Update API bindings

BUG=None
TEST=presubmit

Change-Id: I1c164350b41c66abcdda9362e4d90f56d51430c3
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/2606033
Commit-Queue: Prathmesh Prabhu <pprabhu@google.com>
Tested-by: Prathmesh Prabhu <pprabhu@google.com>
Reviewed-by: Andrew Lamb <andrewlamb@chromium.org>
diff --git a/api/gen/test_platform/execution/__init__.py b/api/gen/test_platform/execution/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/api/gen/test_platform/execution/__init__.py
diff --git a/api/gen/test_platform/execution/param_pb2.py b/api/gen/test_platform/execution/param_pb2.py
new file mode 100644
index 0000000..bee6c8c
--- /dev/null
+++ b/api/gen/test_platform/execution/param_pb2.py
@@ -0,0 +1,70 @@
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: test_platform/execution/param.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+  name='test_platform/execution/param.proto',
+  package='test_platform.execution',
+  syntax='proto3',
+  serialized_options=_b('ZAgo.chromium.org/chromiumos/infra/proto/go/test_platform/execution'),
+  serialized_pb=_b('\n#test_platform/execution/param.proto\x12\x17test_platform.execution\"\x1f\n\x05Param\x12\x16\n\x0eupload_crashes\x18\x01 \x01(\x08\x42\x43ZAgo.chromium.org/chromiumos/infra/proto/go/test_platform/executionb\x06proto3')
+)
+
+
+
+
+_PARAM = _descriptor.Descriptor(
+  name='Param',
+  full_name='test_platform.execution.Param',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='upload_crashes', full_name='test_platform.execution.Param.upload_crashes', index=0,
+      number=1, type=8, cpp_type=7, label=1,
+      has_default_value=False, default_value=False,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=64,
+  serialized_end=95,
+)
+
+DESCRIPTOR.message_types_by_name['Param'] = _PARAM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+Param = _reflection.GeneratedProtocolMessageType('Param', (_message.Message,), dict(
+  DESCRIPTOR = _PARAM,
+  __module__ = 'test_platform.execution.param_pb2'
+  # @@protoc_insertion_point(class_scope:test_platform.execution.Param)
+  ))
+_sym_db.RegisterMessage(Param)
+
+
+DESCRIPTOR._options = None
+# @@protoc_insertion_point(module_scope)
diff --git a/api/gen/test_platform/phosphorus/common_pb2.py b/api/gen/test_platform/phosphorus/common_pb2.py
index c208815..7da08ce 100644
--- a/api/gen/test_platform/phosphorus/common_pb2.py
+++ b/api/gen/test_platform/phosphorus/common_pb2.py
@@ -19,7 +19,7 @@
   package='test_platform.phosphorus',
   syntax='proto3',
   serialized_options=_b('ZBgo.chromium.org/chromiumos/infra/proto/go/test_platform/phosphorus'),
-  serialized_pb=_b('\n%test_platform/phosphorus/common.proto\x12\x18test_platform.phosphorus\"&\n\x0e\x42otEnvironment\x12\x14\n\x0c\x61utotest_dir\x18\x01 \x01(\t\"|\n\x0fTaskEnvironment\x12\x13\n\x0bresults_dir\x18\x02 \x01(\t\x12\x18\n\x10test_results_dir\x18\x03 \x01(\t\x12\x1b\n\x13ssp_base_image_name\x18\x04 \x01(\tJ\x04\x08\x01\x10\x02R\x17synchronous_offload_dir\"3\n\x11LogDataUploadStep\x12\x1e\n\x16max_concurrent_uploads\x18\x01 \x01(\x05\"\xc3\x01\n\x06\x43onfig\x12\x35\n\x03\x62ot\x18\x01 \x01(\x0b\x32(.test_platform.phosphorus.BotEnvironment\x12\x37\n\x04task\x18\x02 \x01(\x0b\x32).test_platform.phosphorus.TaskEnvironment\x12I\n\x14log_data_upload_step\x18\x03 \x01(\x0b\x32+.test_platform.phosphorus.LogDataUploadStepBDZBgo.chromium.org/chromiumos/infra/proto/go/test_platform/phosphorusb\x06proto3')
+  serialized_pb=_b('\n%test_platform/phosphorus/common.proto\x12\x18test_platform.phosphorus\"&\n\x0e\x42otEnvironment\x12\x14\n\x0c\x61utotest_dir\x18\x01 \x01(\t\"|\n\x0fTaskEnvironment\x12\x13\n\x0bresults_dir\x18\x02 \x01(\t\x12\x18\n\x10test_results_dir\x18\x03 \x01(\t\x12\x1b\n\x13ssp_base_image_name\x18\x04 \x01(\tJ\x04\x08\x01\x10\x02R\x17synchronous_offload_dir\"3\n\x11LogDataUploadStep\x12\x1e\n\x16max_concurrent_uploads\x18\x01 \x01(\x05\"R\n\x10\x46\x65tchCrashesStep\x12\x1f\n\x17\x63rash_server_report_url\x18\x01 \x01(\t\x12\x1d\n\x15\x63rash_server_view_url\x18\x02 \x01(\t\"\x8b\x02\n\x06\x43onfig\x12\x35\n\x03\x62ot\x18\x01 \x01(\x0b\x32(.test_platform.phosphorus.BotEnvironment\x12\x37\n\x04task\x18\x02 \x01(\x0b\x32).test_platform.phosphorus.TaskEnvironment\x12I\n\x14log_data_upload_step\x18\x03 \x01(\x0b\x32+.test_platform.phosphorus.LogDataUploadStep\x12\x46\n\x12\x66\x65tch_crashes_step\x18\x04 \x01(\x0b\x32*.test_platform.phosphorus.FetchCrashesStepBDZBgo.chromium.org/chromiumos/infra/proto/go/test_platform/phosphorusb\x06proto3')
 )
 
 
@@ -132,6 +132,44 @@
 )
 
 
+_FETCHCRASHESSTEP = _descriptor.Descriptor(
+  name='FetchCrashesStep',
+  full_name='test_platform.phosphorus.FetchCrashesStep',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='crash_server_report_url', full_name='test_platform.phosphorus.FetchCrashesStep.crash_server_report_url', index=0,
+      number=1, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=_b("").decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='crash_server_view_url', full_name='test_platform.phosphorus.FetchCrashesStep.crash_server_view_url', index=1,
+      number=2, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=_b("").decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=286,
+  serialized_end=368,
+)
+
+
 _CONFIG = _descriptor.Descriptor(
   name='Config',
   full_name='test_platform.phosphorus.Config',
@@ -160,6 +198,13 @@
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='fetch_crashes_step', full_name='test_platform.phosphorus.Config.fetch_crashes_step', index=3,
+      number=4, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
   ],
   extensions=[
   ],
@@ -172,16 +217,18 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=287,
-  serialized_end=482,
+  serialized_start=371,
+  serialized_end=638,
 )
 
 _CONFIG.fields_by_name['bot'].message_type = _BOTENVIRONMENT
 _CONFIG.fields_by_name['task'].message_type = _TASKENVIRONMENT
 _CONFIG.fields_by_name['log_data_upload_step'].message_type = _LOGDATAUPLOADSTEP
+_CONFIG.fields_by_name['fetch_crashes_step'].message_type = _FETCHCRASHESSTEP
 DESCRIPTOR.message_types_by_name['BotEnvironment'] = _BOTENVIRONMENT
 DESCRIPTOR.message_types_by_name['TaskEnvironment'] = _TASKENVIRONMENT
 DESCRIPTOR.message_types_by_name['LogDataUploadStep'] = _LOGDATAUPLOADSTEP
+DESCRIPTOR.message_types_by_name['FetchCrashesStep'] = _FETCHCRASHESSTEP
 DESCRIPTOR.message_types_by_name['Config'] = _CONFIG
 _sym_db.RegisterFileDescriptor(DESCRIPTOR)
 
@@ -206,6 +253,13 @@
   ))
 _sym_db.RegisterMessage(LogDataUploadStep)
 
+FetchCrashesStep = _reflection.GeneratedProtocolMessageType('FetchCrashesStep', (_message.Message,), dict(
+  DESCRIPTOR = _FETCHCRASHESSTEP,
+  __module__ = 'test_platform.phosphorus.common_pb2'
+  # @@protoc_insertion_point(class_scope:test_platform.phosphorus.FetchCrashesStep)
+  ))
+_sym_db.RegisterMessage(FetchCrashesStep)
+
 Config = _reflection.GeneratedProtocolMessageType('Config', (_message.Message,), dict(
   DESCRIPTOR = _CONFIG,
   __module__ = 'test_platform.phosphorus.common_pb2'
diff --git a/api/gen/test_platform/phosphorus/fetchcrashes_pb2.py b/api/gen/test_platform/phosphorus/fetchcrashes_pb2.py
index fbee171..35dacef 100644
--- a/api/gen/test_platform/phosphorus/fetchcrashes_pb2.py
+++ b/api/gen/test_platform/phosphorus/fetchcrashes_pb2.py
@@ -21,7 +21,7 @@
   package='test_platform.phosphorus',
   syntax='proto3',
   serialized_options=_b('ZBgo.chromium.org/chromiumos/infra/proto/go/test_platform/phosphorus'),
-  serialized_pb=_b('\n+test_platform/phosphorus/fetchcrashes.proto\x12\x18test_platform.phosphorus\x1a\x1fgoogle/protobuf/timestamp.proto\x1a%test_platform/phosphorus/common.proto\"\xb8\x01\n\x13\x46\x65tchCrashesRequest\x12\x30\n\x06\x63onfig\x18\x01 \x01(\x0b\x32 .test_platform.phosphorus.Config\x12\x14\n\x0c\x64ut_hostname\x18\x02 \x01(\t\x12,\n\x08\x64\x65\x61\x64line\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x16\n\x0eupload_crashes\x18\x04 \x01(\x08\x12\x13\n\x0buse_staging\x18\x05 \x01(\x08\"\x7f\n\x0c\x43rashSummary\x12\x11\n\texec_name\x18\x01 \x01(\t\x12\x12\n\nupload_url\x18\x02 \x01(\t\x12$\n\x1cin_progress_integration_test\x18\x03 \x01(\t\x12\x0b\n\x03sig\x18\x04 \x01(\t\x12\x15\n\rfilename_base\x18\x05 \x01(\t\"\x9f\x02\n\x14\x46\x65tchCrashesResponse\x12\x43\n\x05state\x18\x01 \x01(\x0e\x32\x34.test_platform.phosphorus.FetchCrashesResponse.State\x12\x37\n\x07\x63rashes\x18\x02 \x03(\x0b\x32&.test_platform.phosphorus.CrashSummary\x12\x18\n\x10\x63rashes_rtd_only\x18\x04 \x03(\t\x12\x18\n\x10\x63rashes_tls_only\x18\x05 \x03(\t\"U\n\x05State\x12\x15\n\x11STATE_UNSPECIFIED\x10\x00\x12\r\n\tSUCCEEDED\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\x12\r\n\tTIMED_OUT\x10\x03\x12\x0b\n\x07\x41\x42ORTED\x10\x04\x42\x44ZBgo.chromium.org/chromiumos/infra/proto/go/test_platform/phosphorusb\x06proto3')
+  serialized_pb=_b('\n+test_platform/phosphorus/fetchcrashes.proto\x12\x18test_platform.phosphorus\x1a\x1fgoogle/protobuf/timestamp.proto\x1a%test_platform/phosphorus/common.proto\"\xbc\x01\n\x13\x46\x65tchCrashesRequest\x12\x30\n\x06\x63onfig\x18\x01 \x01(\x0b\x32 .test_platform.phosphorus.Config\x12\x14\n\x0c\x64ut_hostname\x18\x02 \x01(\t\x12,\n\x08\x64\x65\x61\x64line\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x16\n\x0eupload_crashes\x18\x04 \x01(\x08\x12\x17\n\x0buse_staging\x18\x05 \x01(\x08\x42\x02\x18\x01\"\x7f\n\x0c\x43rashSummary\x12\x11\n\texec_name\x18\x01 \x01(\t\x12\x12\n\nupload_url\x18\x02 \x01(\t\x12$\n\x1cin_progress_integration_test\x18\x03 \x01(\t\x12\x0b\n\x03sig\x18\x04 \x01(\t\x12\x15\n\rfilename_base\x18\x05 \x01(\t\"\x9f\x02\n\x14\x46\x65tchCrashesResponse\x12\x43\n\x05state\x18\x01 \x01(\x0e\x32\x34.test_platform.phosphorus.FetchCrashesResponse.State\x12\x37\n\x07\x63rashes\x18\x02 \x03(\x0b\x32&.test_platform.phosphorus.CrashSummary\x12\x18\n\x10\x63rashes_rtd_only\x18\x04 \x03(\t\x12\x18\n\x10\x63rashes_tls_only\x18\x05 \x03(\t\"U\n\x05State\x12\x15\n\x11STATE_UNSPECIFIED\x10\x00\x12\r\n\tSUCCEEDED\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\x12\r\n\tTIMED_OUT\x10\x03\x12\x0b\n\x07\x41\x42ORTED\x10\x04\x42\x44ZBgo.chromium.org/chromiumos/infra/proto/go/test_platform/phosphorusb\x06proto3')
   ,
   dependencies=[google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,test__platform_dot_phosphorus_dot_common__pb2.DESCRIPTOR,])
 
@@ -56,8 +56,8 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=664,
-  serialized_end=749,
+  serialized_start=668,
+  serialized_end=753,
 )
 _sym_db.RegisterEnumDescriptor(_FETCHCRASHESRESPONSE_STATE)
 
@@ -103,7 +103,7 @@
       has_default_value=False, default_value=False,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=_b('\030\001'), file=DESCRIPTOR),
   ],
   extensions=[
   ],
@@ -117,7 +117,7 @@
   oneofs=[
   ],
   serialized_start=146,
-  serialized_end=330,
+  serialized_end=334,
 )
 
 
@@ -175,8 +175,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=332,
-  serialized_end=459,
+  serialized_start=336,
+  serialized_end=463,
 )
 
 
@@ -228,8 +228,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=462,
-  serialized_end=749,
+  serialized_start=466,
+  serialized_end=753,
 )
 
 _FETCHCRASHESREQUEST.fields_by_name['config'].message_type = test__platform_dot_phosphorus_dot_common__pb2._CONFIG
@@ -265,4 +265,5 @@
 
 
 DESCRIPTOR._options = None
+_FETCHCRASHESREQUEST.fields_by_name['use_staging']._options = None
 # @@protoc_insertion_point(module_scope)
diff --git a/api/gen/test_platform/request_pb2.py b/api/gen/test_platform/request_pb2.py
index 4bf390e..d1c5b80 100644
--- a/api/gen/test_platform/request_pb2.py
+++ b/api/gen/test_platform/request_pb2.py
@@ -15,6 +15,7 @@
 from chromite.api.gen.chromite.api import test_metadata_pb2 as chromite_dot_api_dot_test__metadata__pb2
 from chromite.api.gen.chromiumos import common_pb2 as chromiumos_dot_common__pb2
 from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2
+from chromite.api.gen.test_platform.execution import param_pb2 as test__platform_dot_execution_dot_param__pb2
 
 
 DESCRIPTOR = _descriptor.FileDescriptor(
@@ -22,9 +23,9 @@
   package='test_platform',
   syntax='proto3',
   serialized_options=_b('Z7go.chromium.org/chromiumos/infra/proto/go/test_platform'),
-  serialized_pb=_b('\n\x1btest_platform/request.proto\x12\rtest_platform\x1a chromite/api/test_metadata.proto\x1a\x17\x63hromiumos/common.proto\x1a\x1egoogle/protobuf/duration.proto\"\xcc\x15\n\x07Request\x12-\n\x06params\x18\x01 \x01(\x0b\x32\x1d.test_platform.Request.Params\x12\x32\n\ttest_plan\x18\x05 \x01(\x0b\x32\x1f.test_platform.Request.TestPlan\x1a\x8f\x0f\n\x06Params\x12M\n\x13hardware_attributes\x18\x01 \x01(\x0b\x32\x30.test_platform.Request.Params.HardwareAttributes\x12M\n\x13software_attributes\x18\x02 \x01(\x0b\x32\x30.test_platform.Request.Params.SoftwareAttributes\x12M\n\x13\x66reeform_attributes\x18\t \x01(\x0b\x32\x30.test_platform.Request.Params.FreeformAttributes\x12O\n\x15software_dependencies\x18\x03 \x03(\x0b\x32\x30.test_platform.Request.Params.SoftwareDependency\x12<\n\nscheduling\x18\x04 \x01(\x0b\x32(.test_platform.Request.Params.Scheduling\x12\x32\n\x05retry\x18\x05 \x01(\x0b\x32#.test_platform.Request.Params.Retry\x12\x38\n\x08metadata\x18\x06 \x01(\x0b\x32&.test_platform.Request.Params.Metadata\x12\x30\n\x04time\x18\x07 \x01(\x0b\x32\".test_platform.Request.Params.Time\x12>\n\x0b\x64\x65\x63orations\x18\x08 \x01(\x0b\x32).test_platform.Request.Params.Decorations\x12\x34\n\x06legacy\x18\n \x01(\x0b\x32$.test_platform.Request.Params.Legacy\x12<\n\nmigrations\x18\x0c \x01(\x0b\x32(.test_platform.Request.Params.Migrations\x1a#\n\x12HardwareAttributes\x12\r\n\x05model\x18\x01 \x01(\t\x1a\x43\n\x12SoftwareAttributes\x12-\n\x0c\x62uild_target\x18\x02 \x01(\x0b\x32\x17.chromiumos.BuildTarget\x1a\x31\n\x12\x46reeformAttributes\x12\x1b\n\x13swarming_dimensions\x18\x01 \x03(\t\x1ao\n\x12SoftwareDependency\x12\x18\n\x0e\x63hromeos_build\x18\x03 \x01(\tH\x00\x12\x1b\n\x11ro_firmware_build\x18\x04 \x01(\tH\x00\x12\x1b\n\x11rw_firmware_build\x18\x05 \x01(\tH\x00\x42\x05\n\x03\x64\x65p\x1a\xbb\x03\n\nScheduling\x12L\n\x0cmanaged_pool\x18\x01 \x01(\x0e\x32\x34.test_platform.Request.Params.Scheduling.ManagedPoolH\x00\x12\x18\n\x0eunmanaged_pool\x18\x02 \x01(\tH\x00\x12\x1b\n\rquota_account\x18\x03 \x01(\tB\x02\x18\x01H\x00\x12\x10\n\x08priority\x18\x04 \x01(\x03\x12\x12\n\nqs_account\x18\x05 \x01(\t\"\xf9\x01\n\x0bManagedPool\x12\x1c\n\x18MANAGED_POOL_UNSPECIFIED\x10\x00\x12\x13\n\x0fMANAGED_POOL_CQ\x10\x01\x12\x14\n\x10MANAGED_POOL_BVT\x10\x02\x12\x17\n\x13MANAGED_POOL_SUITES\x10\x03\x12\x14\n\x10MANAGED_POOL_CTS\x10\x04\x12\x1d\n\x19MANAGED_POOL_CTS_PERBUILD\x10\x05\x12\x1b\n\x17MANAGED_POOL_CONTINUOUS\x10\x06\x12\x1e\n\x1aMANAGED_POOL_ARC_PRESUBMIT\x10\x07\x12\x16\n\x12MANAGED_POOL_QUOTA\x10\x08\x42\x06\n\x04pool\x1a#\n\x05Retry\x12\r\n\x05\x61llow\x18\x01 \x01(\x08\x12\x0b\n\x03max\x18\x02 \x01(\x05\x1aH\n\x08Metadata\x12\x19\n\x11test_metadata_url\x18\x01 \x01(\t\x12!\n\x19\x64\x65\x62ug_symbols_archive_url\x18\x02 \x01(\t\x1a;\n\x04Time\x12\x33\n\x10maximum_duration\x18\x01 \x01(\x0b\x32\x19.google.protobuf.Duration\x1a\xad\x01\n\x0b\x44\x65\x63orations\x12X\n\x10\x61utotest_keyvals\x18\x01 \x03(\x0b\x32>.test_platform.Request.Params.Decorations.AutotestKeyvalsEntry\x12\x0c\n\x04tags\x18\x02 \x03(\t\x1a\x36\n\x14\x41utotestKeyvalsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a \n\x06Legacy\x12\x16\n\x0e\x61utotest_suite\x18\x01 \x01(\t\x1ak\n\nMigrations\x12\x17\n\x0fuse_test_runner\x18\x01 \x01(\x08\x12\"\n\x1a\x65nable_synchronous_offload\x18\x02 \x01(\x08\x12 \n\x18notificationless_offload\x18\x03 \x01(\x08\x1a\x15\n\x05Suite\x12\x0c\n\x04name\x18\x01 \x01(\t\x1a\x8e\x01\n\x04Test\x12\x38\n\x08\x61utotest\x18\x01 \x01(\x0b\x32$.test_platform.Request.Test.AutotestH\x00\x1a\x41\n\x08\x41utotest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\ttest_args\x18\x02 \x01(\t\x12\x14\n\x0c\x64isplay_name\x18\x03 \x01(\tB\t\n\x07harness\x1a\xe4\x02\n\x0b\x45numeration\x12S\n\x14\x61utotest_invocations\x18\x02 \x03(\x0b\x32\x35.test_platform.Request.Enumeration.AutotestInvocation\x1a\xff\x01\n\x12\x41utotestInvocation\x12(\n\x04test\x18\x01 \x01(\x0b\x32\x1a.chromite.api.AutotestTest\x12\x11\n\ttest_args\x18\x02 \x01(\t\x12\x14\n\x0c\x64isplay_name\x18\x03 \x01(\t\x12`\n\x0eresult_keyvals\x18\x04 \x03(\x0b\x32H.test_platform.Request.Enumeration.AutotestInvocation.ResultKeyvalsEntry\x1a\x34\n\x12ResultKeyvalsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x9b\x01\n\x08TestPlan\x12+\n\x05suite\x18\x01 \x03(\x0b\x32\x1c.test_platform.Request.Suite\x12)\n\x04test\x18\x02 \x03(\x0b\x32\x1b.test_platform.Request.Test\x12\x37\n\x0b\x65numeration\x18\x03 \x01(\x0b\x32\".test_platform.Request.EnumerationJ\x04\x08\x0b\x10\x0cJ\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08R\rnotificationsB9Z7go.chromium.org/chromiumos/infra/proto/go/test_platformb\x06proto3')
+  serialized_pb=_b('\n\x1btest_platform/request.proto\x12\rtest_platform\x1a chromite/api/test_metadata.proto\x1a\x17\x63hromiumos/common.proto\x1a\x1egoogle/protobuf/duration.proto\x1a#test_platform/execution/param.proto\"\x98\x15\n\x07Request\x12-\n\x06params\x18\x01 \x01(\x0b\x32\x1d.test_platform.Request.Params\x12\x32\n\ttest_plan\x18\x05 \x01(\x0b\x32\x1f.test_platform.Request.TestPlan\x1a\xf0\x0e\n\x06Params\x12M\n\x13hardware_attributes\x18\x01 \x01(\x0b\x32\x30.test_platform.Request.Params.HardwareAttributes\x12M\n\x13software_attributes\x18\x02 \x01(\x0b\x32\x30.test_platform.Request.Params.SoftwareAttributes\x12M\n\x13\x66reeform_attributes\x18\t \x01(\x0b\x32\x30.test_platform.Request.Params.FreeformAttributes\x12O\n\x15software_dependencies\x18\x03 \x03(\x0b\x32\x30.test_platform.Request.Params.SoftwareDependency\x12<\n\nscheduling\x18\x04 \x01(\x0b\x32(.test_platform.Request.Params.Scheduling\x12\x32\n\x05retry\x18\x05 \x01(\x0b\x32#.test_platform.Request.Params.Retry\x12\x38\n\x08metadata\x18\x06 \x01(\x0b\x32&.test_platform.Request.Params.Metadata\x12\x30\n\x04time\x18\x07 \x01(\x0b\x32\".test_platform.Request.Params.Time\x12>\n\x0b\x64\x65\x63orations\x18\x08 \x01(\x0b\x32).test_platform.Request.Params.Decorations\x12<\n\nmigrations\x18\x0c \x01(\x0b\x32(.test_platform.Request.Params.Migrations\x12\x37\n\x0f\x65xecution_param\x18\r \x01(\x0b\x32\x1e.test_platform.execution.Param\x1a#\n\x12HardwareAttributes\x12\r\n\x05model\x18\x01 \x01(\t\x1a\x43\n\x12SoftwareAttributes\x12-\n\x0c\x62uild_target\x18\x02 \x01(\x0b\x32\x17.chromiumos.BuildTarget\x1a\x31\n\x12\x46reeformAttributes\x12\x1b\n\x13swarming_dimensions\x18\x01 \x03(\t\x1ao\n\x12SoftwareDependency\x12\x18\n\x0e\x63hromeos_build\x18\x03 \x01(\tH\x00\x12\x1b\n\x11ro_firmware_build\x18\x04 \x01(\tH\x00\x12\x1b\n\x11rw_firmware_build\x18\x05 \x01(\tH\x00\x42\x05\n\x03\x64\x65p\x1a\x9e\x03\n\nScheduling\x12L\n\x0cmanaged_pool\x18\x01 \x01(\x0e\x32\x34.test_platform.Request.Params.Scheduling.ManagedPoolH\x00\x12\x18\n\x0eunmanaged_pool\x18\x02 \x01(\tH\x00\x12\x10\n\x08priority\x18\x04 \x01(\x03\x12\x12\n\nqs_account\x18\x05 \x01(\t\"\xf9\x01\n\x0bManagedPool\x12\x1c\n\x18MANAGED_POOL_UNSPECIFIED\x10\x00\x12\x13\n\x0fMANAGED_POOL_CQ\x10\x01\x12\x14\n\x10MANAGED_POOL_BVT\x10\x02\x12\x17\n\x13MANAGED_POOL_SUITES\x10\x03\x12\x14\n\x10MANAGED_POOL_CTS\x10\x04\x12\x1d\n\x19MANAGED_POOL_CTS_PERBUILD\x10\x05\x12\x1b\n\x17MANAGED_POOL_CONTINUOUS\x10\x06\x12\x1e\n\x1aMANAGED_POOL_ARC_PRESUBMIT\x10\x07\x12\x16\n\x12MANAGED_POOL_QUOTA\x10\x08\x42\x06\n\x04pool\x1a#\n\x05Retry\x12\r\n\x05\x61llow\x18\x01 \x01(\x08\x12\x0b\n\x03max\x18\x02 \x01(\x05\x1aH\n\x08Metadata\x12\x19\n\x11test_metadata_url\x18\x01 \x01(\t\x12!\n\x19\x64\x65\x62ug_symbols_archive_url\x18\x02 \x01(\t\x1a;\n\x04Time\x12\x33\n\x10maximum_duration\x18\x01 \x01(\x0b\x32\x19.google.protobuf.Duration\x1a\xad\x01\n\x0b\x44\x65\x63orations\x12X\n\x10\x61utotest_keyvals\x18\x01 \x03(\x0b\x32>.test_platform.Request.Params.Decorations.AutotestKeyvalsEntry\x12\x0c\n\x04tags\x18\x02 \x03(\t\x1a\x36\n\x14\x41utotestKeyvalsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x65\n\nMigrationsJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04R\x0fuse_test_runnerR\x1a\x65nable_synchronous_offloadR\x18notificationless_offloadJ\x04\x08\x0b\x10\x0cJ\x04\x08\n\x10\x0bR\rnotificationsR\x06legacy\x1a\x15\n\x05Suite\x12\x0c\n\x04name\x18\x01 \x01(\t\x1a\x8e\x01\n\x04Test\x12\x38\n\x08\x61utotest\x18\x01 \x01(\x0b\x32$.test_platform.Request.Test.AutotestH\x00\x1a\x41\n\x08\x41utotest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\ttest_args\x18\x02 \x01(\t\x12\x14\n\x0c\x64isplay_name\x18\x03 \x01(\tB\t\n\x07harness\x1a\xe4\x02\n\x0b\x45numeration\x12S\n\x14\x61utotest_invocations\x18\x02 \x03(\x0b\x32\x35.test_platform.Request.Enumeration.AutotestInvocation\x1a\xff\x01\n\x12\x41utotestInvocation\x12(\n\x04test\x18\x01 \x01(\x0b\x32\x1a.chromite.api.AutotestTest\x12\x11\n\ttest_args\x18\x02 \x01(\t\x12\x14\n\x0c\x64isplay_name\x18\x03 \x01(\t\x12`\n\x0eresult_keyvals\x18\x04 \x03(\x0b\x32H.test_platform.Request.Enumeration.AutotestInvocation.ResultKeyvalsEntry\x1a\x34\n\x12ResultKeyvalsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x9b\x01\n\x08TestPlan\x12+\n\x05suite\x18\x01 \x03(\x0b\x32\x1c.test_platform.Request.Suite\x12)\n\x04test\x18\x02 \x03(\x0b\x32\x1b.test_platform.Request.Test\x12\x37\n\x0b\x65numeration\x18\x03 \x01(\x0b\x32\".test_platform.Request.EnumerationJ\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08\x42\x39Z7go.chromium.org/chromiumos/infra/proto/go/test_platformb\x06proto3')
   ,
-  dependencies=[chromite_dot_api_dot_test__metadata__pb2.DESCRIPTOR,chromiumos_dot_common__pb2.DESCRIPTOR,google_dot_protobuf_dot_duration__pb2.DESCRIPTOR,])
+  dependencies=[chromite_dot_api_dot_test__metadata__pb2.DESCRIPTOR,chromiumos_dot_common__pb2.DESCRIPTOR,google_dot_protobuf_dot_duration__pb2.DESCRIPTOR,test__platform_dot_execution_dot_param__pb2.DESCRIPTOR,])
 
 
 
@@ -73,8 +74,8 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=1436,
-  serialized_end=1685,
+  serialized_start=1447,
+  serialized_end=1696,
 )
 _sym_db.RegisterEnumDescriptor(_REQUEST_PARAMS_SCHEDULING_MANAGEDPOOL)
 
@@ -105,8 +106,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=979,
-  serialized_end=1014,
+  serialized_start=1019,
+  serialized_end=1054,
 )
 
 _REQUEST_PARAMS_SOFTWAREATTRIBUTES = _descriptor.Descriptor(
@@ -135,8 +136,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1016,
-  serialized_end=1083,
+  serialized_start=1056,
+  serialized_end=1123,
 )
 
 _REQUEST_PARAMS_FREEFORMATTRIBUTES = _descriptor.Descriptor(
@@ -165,8 +166,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1085,
-  serialized_end=1134,
+  serialized_start=1125,
+  serialized_end=1174,
 )
 
 _REQUEST_PARAMS_SOFTWAREDEPENDENCY = _descriptor.Descriptor(
@@ -212,8 +213,8 @@
       name='dep', full_name='test_platform.Request.Params.SoftwareDependency.dep',
       index=0, containing_type=None, fields=[]),
   ],
-  serialized_start=1136,
-  serialized_end=1247,
+  serialized_start=1176,
+  serialized_end=1287,
 )
 
 _REQUEST_PARAMS_SCHEDULING = _descriptor.Descriptor(
@@ -238,21 +239,14 @@
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
-      name='quota_account', full_name='test_platform.Request.Params.Scheduling.quota_account', index=2,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=_b('\030\001'), file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='priority', full_name='test_platform.Request.Params.Scheduling.priority', index=3,
+      name='priority', full_name='test_platform.Request.Params.Scheduling.priority', index=2,
       number=4, type=3, cpp_type=2, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
-      name='qs_account', full_name='test_platform.Request.Params.Scheduling.qs_account', index=4,
+      name='qs_account', full_name='test_platform.Request.Params.Scheduling.qs_account', index=3,
       number=5, type=9, cpp_type=9, label=1,
       has_default_value=False, default_value=_b("").decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
@@ -274,8 +268,8 @@
       name='pool', full_name='test_platform.Request.Params.Scheduling.pool',
       index=0, containing_type=None, fields=[]),
   ],
-  serialized_start=1250,
-  serialized_end=1693,
+  serialized_start=1290,
+  serialized_end=1704,
 )
 
 _REQUEST_PARAMS_RETRY = _descriptor.Descriptor(
@@ -311,8 +305,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1695,
-  serialized_end=1730,
+  serialized_start=1706,
+  serialized_end=1741,
 )
 
 _REQUEST_PARAMS_METADATA = _descriptor.Descriptor(
@@ -348,8 +342,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1732,
-  serialized_end=1804,
+  serialized_start=1743,
+  serialized_end=1815,
 )
 
 _REQUEST_PARAMS_TIME = _descriptor.Descriptor(
@@ -378,8 +372,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1806,
-  serialized_end=1865,
+  serialized_start=1817,
+  serialized_end=1876,
 )
 
 _REQUEST_PARAMS_DECORATIONS_AUTOTESTKEYVALSENTRY = _descriptor.Descriptor(
@@ -415,8 +409,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1987,
-  serialized_end=2041,
+  serialized_start=1998,
+  serialized_end=2052,
 )
 
 _REQUEST_PARAMS_DECORATIONS = _descriptor.Descriptor(
@@ -452,38 +446,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1868,
-  serialized_end=2041,
-)
-
-_REQUEST_PARAMS_LEGACY = _descriptor.Descriptor(
-  name='Legacy',
-  full_name='test_platform.Request.Params.Legacy',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='autotest_suite', full_name='test_platform.Request.Params.Legacy.autotest_suite', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2043,
-  serialized_end=2075,
+  serialized_start=1879,
+  serialized_end=2052,
 )
 
 _REQUEST_PARAMS_MIGRATIONS = _descriptor.Descriptor(
@@ -493,27 +457,6 @@
   file=DESCRIPTOR,
   containing_type=None,
   fields=[
-    _descriptor.FieldDescriptor(
-      name='use_test_runner', full_name='test_platform.Request.Params.Migrations.use_test_runner', index=0,
-      number=1, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='enable_synchronous_offload', full_name='test_platform.Request.Params.Migrations.enable_synchronous_offload', index=1,
-      number=2, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='notificationless_offload', full_name='test_platform.Request.Params.Migrations.notificationless_offload', index=2,
-      number=3, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
   ],
   extensions=[
   ],
@@ -526,8 +469,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2077,
-  serialized_end=2184,
+  serialized_start=2054,
+  serialized_end=2155,
 )
 
 _REQUEST_PARAMS = _descriptor.Descriptor(
@@ -601,15 +544,15 @@
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
-      name='legacy', full_name='test_platform.Request.Params.legacy', index=9,
-      number=10, type=11, cpp_type=10, label=1,
+      name='migrations', full_name='test_platform.Request.Params.migrations', index=9,
+      number=12, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
-      name='migrations', full_name='test_platform.Request.Params.migrations', index=10,
-      number=12, type=11, cpp_type=10, label=1,
+      name='execution_param', full_name='test_platform.Request.Params.execution_param', index=10,
+      number=13, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
@@ -617,7 +560,7 @@
   ],
   extensions=[
   ],
-  nested_types=[_REQUEST_PARAMS_HARDWAREATTRIBUTES, _REQUEST_PARAMS_SOFTWAREATTRIBUTES, _REQUEST_PARAMS_FREEFORMATTRIBUTES, _REQUEST_PARAMS_SOFTWAREDEPENDENCY, _REQUEST_PARAMS_SCHEDULING, _REQUEST_PARAMS_RETRY, _REQUEST_PARAMS_METADATA, _REQUEST_PARAMS_TIME, _REQUEST_PARAMS_DECORATIONS, _REQUEST_PARAMS_LEGACY, _REQUEST_PARAMS_MIGRATIONS, ],
+  nested_types=[_REQUEST_PARAMS_HARDWAREATTRIBUTES, _REQUEST_PARAMS_SOFTWAREATTRIBUTES, _REQUEST_PARAMS_FREEFORMATTRIBUTES, _REQUEST_PARAMS_SOFTWAREDEPENDENCY, _REQUEST_PARAMS_SCHEDULING, _REQUEST_PARAMS_RETRY, _REQUEST_PARAMS_METADATA, _REQUEST_PARAMS_TIME, _REQUEST_PARAMS_DECORATIONS, _REQUEST_PARAMS_MIGRATIONS, ],
   enum_types=[
   ],
   serialized_options=None,
@@ -626,8 +569,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=249,
-  serialized_end=2184,
+  serialized_start=286,
+  serialized_end=2190,
 )
 
 _REQUEST_SUITE = _descriptor.Descriptor(
@@ -656,8 +599,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2186,
-  serialized_end=2207,
+  serialized_start=2192,
+  serialized_end=2213,
 )
 
 _REQUEST_TEST_AUTOTEST = _descriptor.Descriptor(
@@ -700,8 +643,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2276,
-  serialized_end=2341,
+  serialized_start=2282,
+  serialized_end=2347,
 )
 
 _REQUEST_TEST = _descriptor.Descriptor(
@@ -733,8 +676,8 @@
       name='harness', full_name='test_platform.Request.Test.harness',
       index=0, containing_type=None, fields=[]),
   ],
-  serialized_start=2210,
-  serialized_end=2352,
+  serialized_start=2216,
+  serialized_end=2358,
 )
 
 _REQUEST_ENUMERATION_AUTOTESTINVOCATION_RESULTKEYVALSENTRY = _descriptor.Descriptor(
@@ -770,8 +713,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2659,
-  serialized_end=2711,
+  serialized_start=2665,
+  serialized_end=2717,
 )
 
 _REQUEST_ENUMERATION_AUTOTESTINVOCATION = _descriptor.Descriptor(
@@ -821,8 +764,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2456,
-  serialized_end=2711,
+  serialized_start=2462,
+  serialized_end=2717,
 )
 
 _REQUEST_ENUMERATION = _descriptor.Descriptor(
@@ -851,8 +794,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2355,
-  serialized_end=2711,
+  serialized_start=2361,
+  serialized_end=2717,
 )
 
 _REQUEST_TESTPLAN = _descriptor.Descriptor(
@@ -895,8 +838,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2714,
-  serialized_end=2869,
+  serialized_start=2720,
+  serialized_end=2875,
 )
 
 _REQUEST = _descriptor.Descriptor(
@@ -932,8 +875,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=138,
-  serialized_end=2902,
+  serialized_start=175,
+  serialized_end=2887,
 )
 
 _REQUEST_PARAMS_HARDWAREATTRIBUTES.containing_type = _REQUEST_PARAMS
@@ -959,9 +902,6 @@
 _REQUEST_PARAMS_SCHEDULING.oneofs_by_name['pool'].fields.append(
   _REQUEST_PARAMS_SCHEDULING.fields_by_name['unmanaged_pool'])
 _REQUEST_PARAMS_SCHEDULING.fields_by_name['unmanaged_pool'].containing_oneof = _REQUEST_PARAMS_SCHEDULING.oneofs_by_name['pool']
-_REQUEST_PARAMS_SCHEDULING.oneofs_by_name['pool'].fields.append(
-  _REQUEST_PARAMS_SCHEDULING.fields_by_name['quota_account'])
-_REQUEST_PARAMS_SCHEDULING.fields_by_name['quota_account'].containing_oneof = _REQUEST_PARAMS_SCHEDULING.oneofs_by_name['pool']
 _REQUEST_PARAMS_RETRY.containing_type = _REQUEST_PARAMS
 _REQUEST_PARAMS_METADATA.containing_type = _REQUEST_PARAMS
 _REQUEST_PARAMS_TIME.fields_by_name['maximum_duration'].message_type = google_dot_protobuf_dot_duration__pb2._DURATION
@@ -969,7 +909,6 @@
 _REQUEST_PARAMS_DECORATIONS_AUTOTESTKEYVALSENTRY.containing_type = _REQUEST_PARAMS_DECORATIONS
 _REQUEST_PARAMS_DECORATIONS.fields_by_name['autotest_keyvals'].message_type = _REQUEST_PARAMS_DECORATIONS_AUTOTESTKEYVALSENTRY
 _REQUEST_PARAMS_DECORATIONS.containing_type = _REQUEST_PARAMS
-_REQUEST_PARAMS_LEGACY.containing_type = _REQUEST_PARAMS
 _REQUEST_PARAMS_MIGRATIONS.containing_type = _REQUEST_PARAMS
 _REQUEST_PARAMS.fields_by_name['hardware_attributes'].message_type = _REQUEST_PARAMS_HARDWAREATTRIBUTES
 _REQUEST_PARAMS.fields_by_name['software_attributes'].message_type = _REQUEST_PARAMS_SOFTWAREATTRIBUTES
@@ -980,8 +919,8 @@
 _REQUEST_PARAMS.fields_by_name['metadata'].message_type = _REQUEST_PARAMS_METADATA
 _REQUEST_PARAMS.fields_by_name['time'].message_type = _REQUEST_PARAMS_TIME
 _REQUEST_PARAMS.fields_by_name['decorations'].message_type = _REQUEST_PARAMS_DECORATIONS
-_REQUEST_PARAMS.fields_by_name['legacy'].message_type = _REQUEST_PARAMS_LEGACY
 _REQUEST_PARAMS.fields_by_name['migrations'].message_type = _REQUEST_PARAMS_MIGRATIONS
+_REQUEST_PARAMS.fields_by_name['execution_param'].message_type = test__platform_dot_execution_dot_param__pb2._PARAM
 _REQUEST_PARAMS.containing_type = _REQUEST
 _REQUEST_SUITE.containing_type = _REQUEST
 _REQUEST_TEST_AUTOTEST.containing_type = _REQUEST_TEST
@@ -1079,13 +1018,6 @@
       ))
     ,
 
-    Legacy = _reflection.GeneratedProtocolMessageType('Legacy', (_message.Message,), dict(
-      DESCRIPTOR = _REQUEST_PARAMS_LEGACY,
-      __module__ = 'test_platform.request_pb2'
-      # @@protoc_insertion_point(class_scope:test_platform.Request.Params.Legacy)
-      ))
-    ,
-
     Migrations = _reflection.GeneratedProtocolMessageType('Migrations', (_message.Message,), dict(
       DESCRIPTOR = _REQUEST_PARAMS_MIGRATIONS,
       __module__ = 'test_platform.request_pb2'
@@ -1162,7 +1094,6 @@
 _sym_db.RegisterMessage(Request.Params.Time)
 _sym_db.RegisterMessage(Request.Params.Decorations)
 _sym_db.RegisterMessage(Request.Params.Decorations.AutotestKeyvalsEntry)
-_sym_db.RegisterMessage(Request.Params.Legacy)
 _sym_db.RegisterMessage(Request.Params.Migrations)
 _sym_db.RegisterMessage(Request.Suite)
 _sym_db.RegisterMessage(Request.Test)
@@ -1174,7 +1105,6 @@
 
 
 DESCRIPTOR._options = None
-_REQUEST_PARAMS_SCHEDULING.fields_by_name['quota_account']._options = None
 _REQUEST_PARAMS_DECORATIONS_AUTOTESTKEYVALSENTRY._options = None
 _REQUEST_ENUMERATION_AUTOTESTINVOCATION_RESULTKEYVALSENTRY._options = None
 # @@protoc_insertion_point(module_scope)
diff --git a/api/gen/test_platform/service_version_pb2.py b/api/gen/test_platform/service_version_pb2.py
new file mode 100644
index 0000000..87a0e72
--- /dev/null
+++ b/api/gen/test_platform/service_version_pb2.py
@@ -0,0 +1,70 @@
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: test_platform/service_version.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+  name='test_platform/service_version.proto',
+  package='test_platform',
+  syntax='proto3',
+  serialized_options=_b('Z7go.chromium.org/chromiumos/infra/proto/go/test_platform'),
+  serialized_pb=_b('\n#test_platform/service_version.proto\x12\rtest_platform\" \n\x0eServiceVersion\x12\x0e\n\x06global\x18\x01 \x01(\x03\x42\x39Z7go.chromium.org/chromiumos/infra/proto/go/test_platformb\x06proto3')
+)
+
+
+
+
+_SERVICEVERSION = _descriptor.Descriptor(
+  name='ServiceVersion',
+  full_name='test_platform.ServiceVersion',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='global', full_name='test_platform.ServiceVersion.global', index=0,
+      number=1, type=3, cpp_type=2, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=54,
+  serialized_end=86,
+)
+
+DESCRIPTOR.message_types_by_name['ServiceVersion'] = _SERVICEVERSION
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+ServiceVersion = _reflection.GeneratedProtocolMessageType('ServiceVersion', (_message.Message,), dict(
+  DESCRIPTOR = _SERVICEVERSION,
+  __module__ = 'test_platform.service_version_pb2'
+  # @@protoc_insertion_point(class_scope:test_platform.ServiceVersion)
+  ))
+_sym_db.RegisterMessage(ServiceVersion)
+
+
+DESCRIPTOR._options = None
+# @@protoc_insertion_point(module_scope)
diff --git a/api/gen/test_platform/skylab_test_runner/config_pb2.py b/api/gen/test_platform/skylab_test_runner/config_pb2.py
index 3982677..9e08993 100644
--- a/api/gen/test_platform/skylab_test_runner/config_pb2.py
+++ b/api/gen/test_platform/skylab_test_runner/config_pb2.py
@@ -20,7 +20,7 @@
   package='test_platform.skylab_test_runner',
   syntax='proto3',
   serialized_options=_b('ZJgo.chromium.org/chromiumos/infra/proto/go/test_platform/skylab_test_runner'),
-  serialized_pb=_b('\n-test_platform/skylab_test_runner/config.proto\x12 test_platform.skylab_test_runner\x1a%test_platform/phosphorus/common.proto\"\x93\x05\n\x06\x43onfig\x12\x39\n\x03lab\x18\x01 \x01(\x0b\x32,.test_platform.skylab_test_runner.Config.Lab\x12\x41\n\x07harness\x18\x02 \x01(\x0b\x32\x30.test_platform.skylab_test_runner.Config.Harness\x12?\n\x06output\x18\x03 \x01(\x0b\x32/.test_platform.skylab_test_runner.Config.Output\x12K\n\x12result_flow_pubsub\x18\x04 \x01(\x0b\x32/.test_platform.skylab_test_runner.Config.PubSub\x12I\n\x14log_data_upload_step\x18\x05 \x01(\x0b\x32+.test_platform.phosphorus.LogDataUploadStep\x1aV\n\x03Lab\x12\x15\n\radmin_service\x18\x01 \x01(\t\x12\x1e\n\x16\x63ros_inventory_service\x18\x02 \x01(\t\x12\x18\n\x10\x63ros_ufs_service\x18\x03 \x01(\t\x1ay\n\x07Harness\x12\x14\n\x0c\x61utotest_dir\x18\x01 \x01(\t\x12\x1b\n\x13ssp_base_image_name\x18\x03 \x01(\t\x12\x1f\n\x17prejob_deadline_seconds\x18\x04 \x01(\x03J\x04\x08\x02\x10\x03R\x14synch_offload_subdir\x1a\x35\n\x06Output\x12\x18\n\x10log_data_gs_root\x18\x02 \x01(\tJ\x04\x08\x01\x10\x02R\x0bgs_root_dir\x1a(\n\x06PubSub\x12\x0f\n\x07project\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\tBLZJgo.chromium.org/chromiumos/infra/proto/go/test_platform/skylab_test_runnerb\x06proto3')
+  serialized_pb=_b('\n-test_platform/skylab_test_runner/config.proto\x12 test_platform.skylab_test_runner\x1a%test_platform/phosphorus/common.proto\"\xdb\x05\n\x06\x43onfig\x12\x39\n\x03lab\x18\x01 \x01(\x0b\x32,.test_platform.skylab_test_runner.Config.Lab\x12\x41\n\x07harness\x18\x02 \x01(\x0b\x32\x30.test_platform.skylab_test_runner.Config.Harness\x12?\n\x06output\x18\x03 \x01(\x0b\x32/.test_platform.skylab_test_runner.Config.Output\x12K\n\x12result_flow_pubsub\x18\x04 \x01(\x0b\x32/.test_platform.skylab_test_runner.Config.PubSub\x12I\n\x14log_data_upload_step\x18\x05 \x01(\x0b\x32+.test_platform.phosphorus.LogDataUploadStep\x12\x46\n\x12\x66\x65tch_crashes_step\x18\x06 \x01(\x0b\x32*.test_platform.phosphorus.FetchCrashesStep\x1aV\n\x03Lab\x12\x15\n\radmin_service\x18\x01 \x01(\t\x12\x1e\n\x16\x63ros_inventory_service\x18\x02 \x01(\t\x12\x18\n\x10\x63ros_ufs_service\x18\x03 \x01(\t\x1ay\n\x07Harness\x12\x14\n\x0c\x61utotest_dir\x18\x01 \x01(\t\x12\x1b\n\x13ssp_base_image_name\x18\x03 \x01(\t\x12\x1f\n\x17prejob_deadline_seconds\x18\x04 \x01(\x03J\x04\x08\x02\x10\x03R\x14synch_offload_subdir\x1a\x35\n\x06Output\x12\x18\n\x10log_data_gs_root\x18\x02 \x01(\tJ\x04\x08\x01\x10\x02R\x0bgs_root_dir\x1a(\n\x06PubSub\x12\x0f\n\x07project\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\tBLZJgo.chromium.org/chromiumos/infra/proto/go/test_platform/skylab_test_runnerb\x06proto3')
   ,
   dependencies=[test__platform_dot_phosphorus_dot_common__pb2.DESCRIPTOR,])
 
@@ -67,8 +67,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=476,
-  serialized_end=562,
+  serialized_start=548,
+  serialized_end=634,
 )
 
 _CONFIG_HARNESS = _descriptor.Descriptor(
@@ -111,8 +111,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=564,
-  serialized_end=685,
+  serialized_start=636,
+  serialized_end=757,
 )
 
 _CONFIG_OUTPUT = _descriptor.Descriptor(
@@ -141,8 +141,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=687,
-  serialized_end=740,
+  serialized_start=759,
+  serialized_end=812,
 )
 
 _CONFIG_PUBSUB = _descriptor.Descriptor(
@@ -178,8 +178,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=742,
-  serialized_end=782,
+  serialized_start=814,
+  serialized_end=854,
 )
 
 _CONFIG = _descriptor.Descriptor(
@@ -224,6 +224,13 @@
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='fetch_crashes_step', full_name='test_platform.skylab_test_runner.Config.fetch_crashes_step', index=5,
+      number=6, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
   ],
   extensions=[
   ],
@@ -237,7 +244,7 @@
   oneofs=[
   ],
   serialized_start=123,
-  serialized_end=782,
+  serialized_end=854,
 )
 
 _CONFIG_LAB.containing_type = _CONFIG
@@ -249,6 +256,7 @@
 _CONFIG.fields_by_name['output'].message_type = _CONFIG_OUTPUT
 _CONFIG.fields_by_name['result_flow_pubsub'].message_type = _CONFIG_PUBSUB
 _CONFIG.fields_by_name['log_data_upload_step'].message_type = test__platform_dot_phosphorus_dot_common__pb2._LOGDATAUPLOADSTEP
+_CONFIG.fields_by_name['fetch_crashes_step'].message_type = test__platform_dot_phosphorus_dot_common__pb2._FETCHCRASHESSTEP
 DESCRIPTOR.message_types_by_name['Config'] = _CONFIG
 _sym_db.RegisterFileDescriptor(DESCRIPTOR)
 
diff --git a/api/gen/test_platform/skylab_test_runner/request_pb2.py b/api/gen/test_platform/skylab_test_runner/request_pb2.py
index 9b061b6..90a34c2 100644
--- a/api/gen/test_platform/skylab_test_runner/request_pb2.py
+++ b/api/gen/test_platform/skylab_test_runner/request_pb2.py
@@ -13,6 +13,7 @@
 
 
 from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
+from chromite.api.gen.test_platform.execution import param_pb2 as test__platform_dot_execution_dot_param__pb2
 from chromite.api.gen.test_platform import request_pb2 as test__platform_dot_request__pb2
 
 
@@ -21,9 +22,9 @@
   package='test_platform.skylab_test_runner',
   syntax='proto3',
   serialized_options=_b('ZJgo.chromium.org/chromiumos/infra/proto/go/test_platform/skylab_test_runner'),
-  serialized_pb=_b('\n.test_platform/skylab_test_runner/request.proto\x12 test_platform.skylab_test_runner\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1btest_platform/request.proto\"\xea\x08\n\x07Request\x12@\n\x06prejob\x18\x01 \x01(\x0b\x32\x30.test_platform.skylab_test_runner.Request.Prejob\x12<\n\x04test\x18\x02 \x01(\x0b\x32..test_platform.skylab_test_runner.Request.Test\x12,\n\x08\x64\x65\x61\x64line\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x1a\n\x12parent_request_uid\x18\x04 \x01(\t\x12\x17\n\x0fparent_build_id\x18\x05 \x01(\x03\x12\x43\n\x05tests\x18\x06 \x03(\x0b\x32\x34.test_platform.skylab_test_runner.Request.TestsEntry\x1a\x93\x02\n\x06Prejob\x12S\n\x15software_dependencies\x18\x01 \x03(\x0b\x32\x30.test_platform.Request.Params.SoftwareDependencyB\x02\x18\x01\x12g\n\x14provisionable_labels\x18\x02 \x03(\x0b\x32I.test_platform.skylab_test_runner.Request.Prejob.ProvisionableLabelsEntry\x12\x0f\n\x07use_tls\x18\x03 \x01(\x08\x1a:\n\x18ProvisionableLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\xc2\x03\n\x04Test\x12K\n\x08\x61utotest\x18\x01 \x01(\x0b\x32\x37.test_platform.skylab_test_runner.Request.Test.AutotestH\x00\x12N\n\x07offload\x18\x02 \x01(\x0b\x32=.test_platform.skylab_test_runner.Request.Test.OffloadOptions\x1a\xe0\x01\n\x08\x41utotest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\ttest_args\x18\x02 \x01(\t\x12U\n\x07keyvals\x18\x03 \x03(\x0b\x32\x44.test_platform.skylab_test_runner.Request.Test.Autotest.KeyvalsEntry\x12\x16\n\x0eis_client_test\x18\x04 \x01(\x08\x12\x14\n\x0c\x64isplay_name\x18\x05 \x01(\t\x1a.\n\x0cKeyvalsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a/\n\x0eOffloadOptions\x12\x1d\n\x15synchronous_gs_enable\x18\x01 \x01(\x08\x42\t\n\x07harness\x1a\\\n\nTestsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12=\n\x05value\x18\x02 \x01(\x0b\x32..test_platform.skylab_test_runner.Request.Test:\x02\x38\x01\x42LZJgo.chromium.org/chromiumos/infra/proto/go/test_platform/skylab_test_runnerb\x06proto3')
+  serialized_pb=_b('\n.test_platform/skylab_test_runner/request.proto\x12 test_platform.skylab_test_runner\x1a\x1fgoogle/protobuf/timestamp.proto\x1a#test_platform/execution/param.proto\x1a\x1btest_platform/request.proto\"\xa3\t\n\x07Request\x12@\n\x06prejob\x18\x01 \x01(\x0b\x32\x30.test_platform.skylab_test_runner.Request.Prejob\x12<\n\x04test\x18\x02 \x01(\x0b\x32..test_platform.skylab_test_runner.Request.Test\x12,\n\x08\x64\x65\x61\x64line\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x1a\n\x12parent_request_uid\x18\x04 \x01(\t\x12\x17\n\x0fparent_build_id\x18\x05 \x01(\x03\x12\x43\n\x05tests\x18\x06 \x03(\x0b\x32\x34.test_platform.skylab_test_runner.Request.TestsEntry\x12\x37\n\x0f\x65xecution_param\x18\x07 \x01(\x0b\x32\x1e.test_platform.execution.Param\x1a\x93\x02\n\x06Prejob\x12S\n\x15software_dependencies\x18\x01 \x03(\x0b\x32\x30.test_platform.Request.Params.SoftwareDependencyB\x02\x18\x01\x12g\n\x14provisionable_labels\x18\x02 \x03(\x0b\x32I.test_platform.skylab_test_runner.Request.Prejob.ProvisionableLabelsEntry\x12\x0f\n\x07use_tls\x18\x03 \x01(\x08\x1a:\n\x18ProvisionableLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\xc2\x03\n\x04Test\x12K\n\x08\x61utotest\x18\x01 \x01(\x0b\x32\x37.test_platform.skylab_test_runner.Request.Test.AutotestH\x00\x12N\n\x07offload\x18\x02 \x01(\x0b\x32=.test_platform.skylab_test_runner.Request.Test.OffloadOptions\x1a\xe0\x01\n\x08\x41utotest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\ttest_args\x18\x02 \x01(\t\x12U\n\x07keyvals\x18\x03 \x03(\x0b\x32\x44.test_platform.skylab_test_runner.Request.Test.Autotest.KeyvalsEntry\x12\x16\n\x0eis_client_test\x18\x04 \x01(\x08\x12\x14\n\x0c\x64isplay_name\x18\x05 \x01(\t\x1a.\n\x0cKeyvalsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a/\n\x0eOffloadOptions\x12\x1d\n\x15synchronous_gs_enable\x18\x01 \x01(\x08\x42\t\n\x07harness\x1a\\\n\nTestsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12=\n\x05value\x18\x02 \x01(\x0b\x32..test_platform.skylab_test_runner.Request.Test:\x02\x38\x01\x42LZJgo.chromium.org/chromiumos/infra/proto/go/test_platform/skylab_test_runnerb\x06proto3')
   ,
-  dependencies=[google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,test__platform_dot_request__pb2.DESCRIPTOR,])
+  dependencies=[google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,test__platform_dot_execution_dot_param__pb2.DESCRIPTOR,test__platform_dot_request__pb2.DESCRIPTOR,])
 
 
 
@@ -61,8 +62,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=672,
-  serialized_end=730,
+  serialized_start=766,
+  serialized_end=824,
 )
 
 _REQUEST_PREJOB = _descriptor.Descriptor(
@@ -105,8 +106,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=455,
-  serialized_end=730,
+  serialized_start=549,
+  serialized_end=824,
 )
 
 _REQUEST_TEST_AUTOTEST_KEYVALSENTRY = _descriptor.Descriptor(
@@ -142,8 +143,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1077,
-  serialized_end=1123,
+  serialized_start=1171,
+  serialized_end=1217,
 )
 
 _REQUEST_TEST_AUTOTEST = _descriptor.Descriptor(
@@ -200,8 +201,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=899,
-  serialized_end=1123,
+  serialized_start=993,
+  serialized_end=1217,
 )
 
 _REQUEST_TEST_OFFLOADOPTIONS = _descriptor.Descriptor(
@@ -230,8 +231,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1125,
-  serialized_end=1172,
+  serialized_start=1219,
+  serialized_end=1266,
 )
 
 _REQUEST_TEST = _descriptor.Descriptor(
@@ -270,8 +271,8 @@
       name='harness', full_name='test_platform.skylab_test_runner.Request.Test.harness',
       index=0, containing_type=None, fields=[]),
   ],
-  serialized_start=733,
-  serialized_end=1183,
+  serialized_start=827,
+  serialized_end=1277,
 )
 
 _REQUEST_TESTSENTRY = _descriptor.Descriptor(
@@ -307,8 +308,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1185,
-  serialized_end=1277,
+  serialized_start=1279,
+  serialized_end=1371,
 )
 
 _REQUEST = _descriptor.Descriptor(
@@ -360,6 +361,13 @@
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='execution_param', full_name='test_platform.skylab_test_runner.Request.execution_param', index=6,
+      number=7, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
   ],
   extensions=[
   ],
@@ -372,8 +380,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=147,
-  serialized_end=1277,
+  serialized_start=184,
+  serialized_end=1371,
 )
 
 _REQUEST_PREJOB_PROVISIONABLELABELSENTRY.containing_type = _REQUEST_PREJOB
@@ -396,6 +404,7 @@
 _REQUEST.fields_by_name['test'].message_type = _REQUEST_TEST
 _REQUEST.fields_by_name['deadline'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP
 _REQUEST.fields_by_name['tests'].message_type = _REQUEST_TESTSENTRY
+_REQUEST.fields_by_name['execution_param'].message_type = test__platform_dot_execution_dot_param__pb2._PARAM
 DESCRIPTOR.message_types_by_name['Request'] = _REQUEST
 _sym_db.RegisterFileDescriptor(DESCRIPTOR)