indexify 0.4.9__py3-none-any.whl → 0.4.11__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,7 @@
1
1
  from typing import Dict, List, Optional
2
2
 
3
3
  from tensorlake.function_executor.proto.function_executor_pb2 import (
4
- FunctionOutput,
5
- RouterOutput,
4
+ SerializedObject,
6
5
  )
7
6
 
8
7
  from indexify.proto.executor_api_pb2 import (
@@ -30,31 +29,29 @@ class TaskOutput:
30
29
  outcome_code: TaskOutcomeCode,
31
30
  # Optional[TaskFailureReason] is not supported in python 3.9
32
31
  failure_reason: TaskFailureReason = None,
33
- output_encoding: Optional[str] = None,
34
- function_output: Optional[FunctionOutput] = None,
35
- router_output: Optional[RouterOutput] = None,
32
+ invocation_error_output: Optional[SerializedObject] = None,
33
+ function_outputs: List[SerializedObject] = [],
34
+ next_functions: List[str] = [],
36
35
  stdout: Optional[str] = None,
37
36
  stderr: Optional[str] = None,
38
37
  reducer: bool = False,
39
38
  metrics: Optional[TaskMetrics] = None,
40
- uploaded_data_payloads: List[DataPayload] = [],
41
- uploaded_stdout: Optional[DataPayload] = None,
42
- uploaded_stderr: Optional[DataPayload] = None,
43
39
  ):
44
40
  self.task = allocation.task
45
41
  self.allocation = allocation
46
- self.function_output = function_output
47
- self.router_output = router_output
42
+ self.function_outputs = function_outputs
43
+ self.next_functions = next_functions
48
44
  self.stdout = stdout
49
45
  self.stderr = stderr
50
46
  self.reducer = reducer
51
47
  self.outcome_code = outcome_code
52
48
  self.failure_reason = failure_reason
49
+ self.invocation_error_output = invocation_error_output
53
50
  self.metrics = metrics
54
- self.output_encoding = output_encoding
55
- self.uploaded_data_payloads = uploaded_data_payloads
56
- self.uploaded_stdout = uploaded_stdout
57
- self.uploaded_stderr = uploaded_stderr
51
+ self.uploaded_data_payloads: List[DataPayload] = []
52
+ self.uploaded_stdout: Optional[DataPayload] = None
53
+ self.uploaded_stderr: Optional[DataPayload] = None
54
+ self.uploaded_invocation_error_output: Optional[DataPayload] = None
58
55
 
59
56
  @classmethod
60
57
  def internal_error(
@@ -1,7 +1,12 @@
1
1
  import asyncio
2
2
  import hashlib
3
3
  import time
4
- from typing import Any
4
+ from typing import Any, List
5
+
6
+ from tensorlake.function_executor.proto.function_executor_pb2 import (
7
+ SerializedObject,
8
+ SerializedObjectEncoding,
9
+ )
5
10
 
6
11
  from indexify.executor.blob_store.blob_store import BLOBStore
7
12
  from indexify.proto.executor_api_pb2 import (
@@ -74,11 +79,13 @@ class _TaskOutputSummary:
74
79
  def __init__(self):
75
80
  self.output_count: int = 0
76
81
  self.output_total_bytes: int = 0
77
- self.router_output_count: int = 0
82
+ self.next_functions_count: int = 0
78
83
  self.stdout_count: int = 0
79
84
  self.stdout_total_bytes: int = 0
80
85
  self.stderr_count: int = 0
81
86
  self.stderr_total_bytes: int = 0
87
+ self.invocation_error_output_count: int = 0
88
+ self.invocation_error_output_total_bytes: int = 0
82
89
  self.total_bytes: int = 0
83
90
 
84
91
 
@@ -95,12 +102,14 @@ async def _upload_task_output_once(
95
102
  total_bytes=output_summary.total_bytes,
96
103
  total_files=output_summary.output_count
97
104
  + output_summary.stdout_count
98
- + output_summary.stderr_count,
105
+ + output_summary.stderr_count
106
+ + output_summary.invocation_error_output_count,
99
107
  output_files=output_summary.output_count,
100
108
  output_bytes=output_summary.total_bytes,
101
- router_output_count=output_summary.router_output_count,
109
+ next_functions_count=output_summary.next_functions_count,
102
110
  stdout_bytes=output_summary.stdout_total_bytes,
103
111
  stderr_bytes=output_summary.stderr_total_bytes,
112
+ invocation_error_output_bytes=output_summary.invocation_error_output_total_bytes,
104
113
  )
105
114
 
106
115
  start_time = time.time()
@@ -109,7 +118,9 @@ async def _upload_task_output_once(
109
118
  metric_task_output_blob_store_upload_errors.count_exceptions(),
110
119
  ):
111
120
  metric_task_output_blob_store_uploads.inc()
112
- await _upload_to_blob_store(output=output, blob_store=blob_store, logger=logger)
121
+ await _upload_to_blob_store(
122
+ task_output=output, blob_store=blob_store, logger=logger
123
+ )
113
124
 
114
125
  logger.info(
115
126
  "files uploaded to blob store",
@@ -118,86 +129,105 @@ async def _upload_task_output_once(
118
129
 
119
130
 
120
131
  async def _upload_to_blob_store(
121
- output: TaskOutput, blob_store: BLOBStore, logger: Any
132
+ task_output: TaskOutput, blob_store: BLOBStore, logger: Any
122
133
  ) -> None:
123
- if output.stdout is not None:
124
- stdout_url = f"{output.allocation.task.output_payload_uri_prefix}.{output.allocation.task.id}.stdout"
125
- stdout_bytes: bytes = output.stdout.encode()
134
+ if task_output.stdout is not None:
135
+ stdout_url = f"{task_output.allocation.task.output_payload_uri_prefix}.{task_output.allocation.task.id}.stdout"
136
+ stdout_bytes: bytes = task_output.stdout.encode()
126
137
  await blob_store.put(stdout_url, stdout_bytes, logger)
127
- output.uploaded_stdout = DataPayload(
138
+ task_output.uploaded_stdout = DataPayload(
128
139
  uri=stdout_url,
129
140
  size=len(stdout_bytes),
130
141
  sha256_hash=compute_hash(stdout_bytes),
131
142
  encoding=DataPayloadEncoding.DATA_PAYLOAD_ENCODING_UTF8_TEXT,
132
143
  encoding_version=0,
133
144
  )
134
- # stdout is uploaded, free the memory used for it.
135
- output.stdout = None
145
+ # stdout is uploaded, free the memory used for it and don't upload again if we retry overall output upload again.
146
+ task_output.stdout = None
136
147
 
137
- if output.stderr is not None:
138
- stderr_url = f"{output.allocation.task.output_payload_uri_prefix}.{output.allocation.task.id}.stderr"
139
- stderr_bytes: bytes = output.stderr.encode()
148
+ if task_output.stderr is not None:
149
+ stderr_url = f"{task_output.allocation.task.output_payload_uri_prefix}.{task_output.allocation.task.id}.stderr"
150
+ stderr_bytes: bytes = task_output.stderr.encode()
140
151
  await blob_store.put(stderr_url, stderr_bytes, logger)
141
- output.uploaded_stderr = DataPayload(
152
+ task_output.uploaded_stderr = DataPayload(
142
153
  uri=stderr_url,
143
154
  size=len(stderr_bytes),
144
155
  sha256_hash=compute_hash(stderr_bytes),
145
156
  encoding=DataPayloadEncoding.DATA_PAYLOAD_ENCODING_UTF8_TEXT,
146
157
  encoding_version=0,
147
158
  )
148
- # stderr is uploaded, free the memory used for it.
149
- output.stderr = None
150
-
151
- if output.function_output is not None:
152
- # We can't use the default empty list output.uploaded_data_payloads because it's a singleton.
153
- uploaded_data_payloads = []
154
- for func_output_item in output.function_output.outputs:
155
- node_output_sequence = len(uploaded_data_payloads)
156
- output_url = f"{output.allocation.task.output_payload_uri_prefix}.{output.allocation.task.id}.{node_output_sequence}"
157
- output_bytes: bytes = (
158
- func_output_item.bytes
159
- if func_output_item.HasField("bytes")
160
- else func_output_item.string.encode()
161
- )
162
- await blob_store.put(output_url, output_bytes, logger)
163
- uploaded_data_payloads.append(
164
- DataPayload(
165
- uri=output_url,
166
- size=len(output_bytes),
167
- sha256_hash=compute_hash(output_bytes),
168
- encoding=_to_grpc_data_payload_encoding(output),
169
- encoding_version=0,
170
- )
159
+ # stderr is uploaded, free the memory used for it and don't upload again if we retry overall output upload again.
160
+ task_output.stderr = None
161
+
162
+ if task_output.invocation_error_output is not None:
163
+ invocation_error_output_url = (
164
+ f"{task_output.allocation.task.output_payload_uri_prefix}.inverr."
165
+ f"{task_output.allocation.task.graph_invocation_id}"
166
+ )
167
+ invocation_error_output_bytes: bytes = task_output.invocation_error_output.data
168
+ await blob_store.put(
169
+ invocation_error_output_url, invocation_error_output_bytes, logger
170
+ )
171
+ task_output.uploaded_invocation_error_output = DataPayload(
172
+ uri=invocation_error_output_url,
173
+ size=len(invocation_error_output_bytes),
174
+ sha256_hash=compute_hash(invocation_error_output_bytes),
175
+ encoding=_to_grpc_data_payload_encoding(
176
+ task_output.invocation_error_output.encoding, logger
177
+ ),
178
+ encoding_version=0,
179
+ )
180
+ # Invocation error output is uploaded, free the memory used for it and don't upload again if we retry overall output upload again.
181
+ task_output.invocation_error_output = None
182
+
183
+ # We can't use the default empty list output.uploaded_data_payloads because it's a singleton.
184
+ uploaded_data_payloads: List[DataPayload] = []
185
+ for output in task_output.function_outputs:
186
+ output: SerializedObject
187
+ output_ix: int = len(uploaded_data_payloads)
188
+ output_url: str = (
189
+ f"{task_output.allocation.task.output_payload_uri_prefix}.{task_output.allocation.task.id}.{output_ix}"
190
+ )
191
+ await blob_store.put(output_url, output.data, logger)
192
+ uploaded_data_payloads.append(
193
+ DataPayload(
194
+ uri=output_url,
195
+ size=len(output.data),
196
+ sha256_hash=compute_hash(output.data),
197
+ encoding=_to_grpc_data_payload_encoding(output.encoding, logger),
198
+ encoding_version=0,
171
199
  )
200
+ )
172
201
 
173
- output.uploaded_data_payloads = uploaded_data_payloads
174
- # The output is uploaded, free the memory used for it.
175
- output.function_output = None
202
+ task_output.uploaded_data_payloads = uploaded_data_payloads
203
+ # The output is uploaded, free the memory used for it and don't upload again if we retry overall output upload again.
204
+ task_output.function_outputs = []
176
205
 
177
206
 
178
- def _task_output_summary(output: TaskOutput) -> _TaskOutputSummary:
207
+ def _task_output_summary(task_output: TaskOutput) -> _TaskOutputSummary:
179
208
  summary: _TaskOutputSummary = _TaskOutputSummary()
180
209
 
181
- if output.stdout is not None:
210
+ if task_output.stdout is not None:
182
211
  summary.stdout_count += 1
183
- summary.stdout_total_bytes += len(output.stdout)
212
+ summary.stdout_total_bytes += len(task_output.stdout)
184
213
 
185
- if output.stderr is not None:
214
+ if task_output.stderr is not None:
186
215
  summary.stderr_count += 1
187
- summary.stderr_total_bytes += len(output.stderr)
188
-
189
- if output.function_output is not None:
190
- for func_output_item in output.function_output.outputs:
191
- output_len: bytes = len(
192
- func_output_item.bytes
193
- if func_output_item.HasField("bytes")
194
- else func_output_item.string
195
- )
196
- summary.output_count += 1
197
- summary.output_total_bytes += output_len
216
+ summary.stderr_total_bytes += len(task_output.stderr)
217
+
218
+ if task_output.invocation_error_output is not None:
219
+ summary.invocation_error_output_count += 1
220
+ summary.invocation_error_output_total_bytes += len(
221
+ task_output.invocation_error_output.data
222
+ )
198
223
 
199
- if output.router_output is not None:
200
- summary.router_output_count += 1
224
+ for output in task_output.function_outputs:
225
+ output: SerializedObject
226
+ output_len: bytes = len(output.data)
227
+ summary.output_count += 1
228
+ summary.output_total_bytes += output_len
229
+
230
+ summary.next_functions_count = len(task_output.next_functions)
201
231
 
202
232
  summary.total_bytes = (
203
233
  summary.output_total_bytes
@@ -207,11 +237,21 @@ def _task_output_summary(output: TaskOutput) -> _TaskOutputSummary:
207
237
  return summary
208
238
 
209
239
 
210
- def _to_grpc_data_payload_encoding(task_output: TaskOutput) -> DataPayloadEncoding:
211
- if task_output.output_encoding == "json":
240
+ def _to_grpc_data_payload_encoding(
241
+ encoding: SerializedObjectEncoding, logger: Any
242
+ ) -> DataPayloadEncoding:
243
+ if encoding == SerializedObjectEncoding.SERIALIZED_OBJECT_ENCODING_BINARY_PICKLE:
244
+ return DataPayloadEncoding.DATA_PAYLOAD_ENCODING_BINARY_PICKLE
245
+ elif encoding == SerializedObjectEncoding.SERIALIZED_OBJECT_ENCODING_UTF8_JSON:
212
246
  return DataPayloadEncoding.DATA_PAYLOAD_ENCODING_UTF8_JSON
247
+ elif encoding == SerializedObjectEncoding.SERIALIZED_OBJECT_ENCODING_UTF8_TEXT:
248
+ return DataPayloadEncoding.DATA_PAYLOAD_ENCODING_UTF8_TEXT
213
249
  else:
214
- return DataPayloadEncoding.DATA_PAYLOAD_ENCODING_BINARY_PICKLE
250
+ logger.error(
251
+ "Unexpected encoding for SerializedObject",
252
+ encoding=SerializedObjectEncoding.Name(encoding),
253
+ )
254
+ return DataPayloadEncoding.DATA_PAYLOAD_ENCODING_UNKNOWN
215
255
 
216
256
 
217
257
  def compute_hash(data: bytes) -> str:
@@ -7,7 +7,6 @@ from tensorlake.function_executor.proto.message_validator import MessageValidato
7
7
  from indexify.proto.executor_api_pb2 import (
8
8
  DesiredExecutorState,
9
9
  FunctionExecutorDescription,
10
- FunctionExecutorTerminationReason,
11
10
  GetDesiredExecutorStatesRequest,
12
11
  TaskAllocation,
13
12
  )
@@ -123,9 +122,7 @@ class ExecutorStateReconciler:
123
122
  for fe_controller in self._function_executor_controllers.values():
124
123
  fe_shutdown_tasks.append(
125
124
  asyncio.create_task(
126
- fe_controller.shutdown(
127
- termination_reason=FunctionExecutorTerminationReason.FUNCTION_EXECUTOR_TERMINATION_REASON_EXECUTOR_SHUTDOWN
128
- ),
125
+ fe_controller.shutdown(),
129
126
  name=f"Shutdown Function Executor {fe_controller.function_executor_id()}",
130
127
  )
131
128
  )
@@ -327,9 +324,7 @@ class ExecutorStateReconciler:
327
324
  self._function_executor_controllers.pop(function_executor_id)
328
325
  )
329
326
  asyncio.create_task(
330
- fe_controller.shutdown(
331
- termination_reason=FunctionExecutorTerminationReason.FUNCTION_EXECUTOR_TERMINATION_REASON_REMOVED_FROM_DESIRED_STATE
332
- ),
327
+ fe_controller.shutdown(),
333
328
  name=f"Shutdown Function Executor {function_executor_id}",
334
329
  )
335
330
 
@@ -7,11 +7,10 @@ package executor_api_pb;
7
7
  // ===== DataPayload =====
8
8
  enum DataPayloadEncoding {
9
9
  DATA_PAYLOAD_ENCODING_UNKNOWN = 0;
10
- // These encodings are currently mapping 1:1 to mime types.
11
- // TODO: use SDK specific encodings becase 1:1 mapping might not work in the future.
12
10
  DATA_PAYLOAD_ENCODING_UTF8_JSON = 1;
13
11
  DATA_PAYLOAD_ENCODING_UTF8_TEXT = 2;
14
12
  DATA_PAYLOAD_ENCODING_BINARY_PICKLE = 3;
13
+ DATA_PAYLOAD_ENCODING_BINARY_ZIP = 4;
15
14
  }
16
15
 
17
16
  message DataPayload {
@@ -62,28 +61,35 @@ message AllowedFunction {
62
61
 
63
62
  enum FunctionExecutorStatus {
64
63
  FUNCTION_EXECUTOR_STATUS_UNKNOWN = 0;
65
- // Function Executor is being created.
64
+ // FE is being created.
66
65
  FUNCTION_EXECUTOR_STATUS_PENDING = 1;
67
- // Function Executor is running and ready to accept tasks.
66
+ // FE is running and ready to accept tasks.
68
67
  FUNCTION_EXECUTOR_STATUS_RUNNING = 2;
69
- // Function Executor is terminated, all resources are freed.
68
+ // FE is terminated, all resources are freed.
70
69
  FUNCTION_EXECUTOR_STATUS_TERMINATED = 3;
71
70
  }
72
71
 
72
+ // The reasons why an Executor decided to terminate a Function Executor.
73
73
  enum FunctionExecutorTerminationReason {
74
74
  FUNCTION_EXECUTOR_TERMINATION_REASON_UNKNOWN = 0;
75
+ // Internal error aka platform error on FE startup.
75
76
  FUNCTION_EXECUTOR_TERMINATION_REASON_STARTUP_FAILED_INTERNAL_ERROR = 1;
77
+ // A clear function constructor code error on FE startup.
78
+ // Typically an exception raised from the constructor.
76
79
  FUNCTION_EXECUTOR_TERMINATION_REASON_STARTUP_FAILED_FUNCTION_ERROR = 2;
77
80
  // Timeout on FE startup while running the function constructor.
78
81
  FUNCTION_EXECUTOR_TERMINATION_REASON_STARTUP_FAILED_FUNCTION_TIMEOUT = 3;
79
82
 
80
- FUNCTION_EXECUTOR_TERMINATION_REASON_EXECUTOR_SHUTDOWN = 10;
81
- FUNCTION_EXECUTOR_TERMINATION_REASON_REMOVED_FROM_DESIRED_STATE = 11;
83
+ // FE was terminated because it failed a health check.
82
84
  FUNCTION_EXECUTOR_TERMINATION_REASON_UNHEALTHY = 12;
85
+ // FE was terminated due to an unrecoverable internal error on Executor.
83
86
  FUNCTION_EXECUTOR_TERMINATION_REASON_INTERNAL_ERROR = 13;
84
- // Timeout while running the function.
87
+ // FE was terminated because Function code exceeded its cofigured timeout.
88
+ // FE termination is the only way to reliably stop the function code execution.
85
89
  FUNCTION_EXECUTOR_TERMINATION_REASON_FUNCTION_TIMEOUT = 14;
86
- // The running function allocation was removed from the desired state.
90
+ // FE was terminated because function allocation currently running on it was removed
91
+ // from Executor desired state.
92
+ // FE termination is the only way to reliably stop the function code execution.
87
93
  FUNCTION_EXECUTOR_TERMINATION_REASON_FUNCTION_CANCELLED = 15;
88
94
  }
89
95
 
@@ -129,9 +135,13 @@ message FunctionExecutorUpdate {
129
135
 
130
136
  enum ExecutorStatus {
131
137
  EXECUTOR_STATUS_UNKNOWN = 0;
138
+ // Executor is starting up, not ready to accept task allocations and FEs.
132
139
  EXECUTOR_STATUS_STARTING_UP = 1;
140
+ // Executor is ready to accept task allocations and FEs.
133
141
  EXECUTOR_STATUS_RUNNING = 2;
142
+ // No new task allocations or FEs should be places on the Executor.
134
143
  EXECUTOR_STATUS_DRAINED = 3;
144
+ // Executor is stopped, all resources are freed, all FEs are terminated.
135
145
  EXECUTOR_STATUS_STOPPED = 4;
136
146
  }
137
147
 
@@ -228,17 +238,19 @@ enum TaskOutcomeCode {
228
238
 
229
239
  enum TaskFailureReason {
230
240
  TASK_FAILURE_REASON_UNKNOWN = 0;
241
+ // Internal error on Executor aka platform error.
242
+ // Includes grey failures when we can't determine the exact cause.
231
243
  TASK_FAILURE_REASON_INTERNAL_ERROR = 1;
244
+ // Clear function code failure typically by raising an exception from the function code.
232
245
  TASK_FAILURE_REASON_FUNCTION_ERROR = 2;
246
+ // Function code run time exceeded its cofigured timeout.
233
247
  TASK_FAILURE_REASON_FUNCTION_TIMEOUT = 3;
234
- TASK_FAILURE_REASON_TASK_CANCELLED = 4;
235
- TASK_FAILURE_REASON_FUNCTION_EXECUTOR_TERMINATED = 5;
236
- }
237
-
238
- message ResultRouting {
239
- // The list of next functions.
240
- // NB: An empty list indicates that no routing should be performed.
241
- repeated string next_functions = 1;
248
+ // Function code raised InvocationError to mark the invocation as permanently failed.
249
+ TASK_FAILURE_REASON_INVOCATION_ERROR = 4;
250
+ // Server removed the task allocation from Executor desired state. The task allocation didn't finish before the removal.
251
+ TASK_FAILURE_REASON_TASK_CANCELLED = 5;
252
+ // Function Executor terminated - can't run the task allocation on it anymore.
253
+ TASK_FAILURE_REASON_FUNCTION_EXECUTOR_TERMINATED = 6;
242
254
  }
243
255
 
244
256
  message TaskResult {
@@ -253,24 +265,13 @@ message TaskResult {
253
265
  optional TaskOutcomeCode outcome_code = 9;
254
266
  optional TaskFailureReason failure_reason = 10;
255
267
  // Edges that the function wants the invocation to be routed to.
256
- // Previously called router_edges.
257
- // NB: An empty list indicates that the graph's route definitions should be used,
258
- // unless this field is overridden by the presence of the `routing` field.
259
268
  repeated string next_functions = 11;
260
269
  repeated DataPayload function_outputs = 12;
261
270
  // Standard output and error streams of the function.
262
271
  optional DataPayload stdout = 13;
263
272
  optional DataPayload stderr = 14;
264
-
265
- // Indicates how the results should be routed.
266
- // If this is present, it replaces `next_functions`.
267
- //
268
- // If absent, `next_functions` will be used; note that if no
269
- // routes are defined in `next_functions`, this will use the
270
- // graph's routing. The long-term goal is to deprecate
271
- // `next_functions`, so that if `routing` is not present, the
272
- // graph's routing definitions will always be used.
273
- ResultRouting routing = 15;
273
+ // User payload for invocation error if task failed with invocation error.
274
+ optional DataPayload invocation_error_output = 15;
274
275
  }
275
276
 
276
277
  // Internal API for scheduling and running tasks on Executors. Executors are acting as clients of this API.
@@ -19,7 +19,7 @@ _sym_db = _symbol_database.Default()
19
19
 
20
20
 
21
21
  DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(
22
- b'\n!indexify/proto/executor_api.proto\x12\x0f\x65xecutor_api_pb"\xeb\x01\n\x0b\x44\x61taPayload\x12\x11\n\x04size\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x18\n\x0bsha256_hash\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x10\n\x03uri\x18\x04 \x01(\tH\x02\x88\x01\x01\x12;\n\x08\x65ncoding\x18\x05 \x01(\x0e\x32$.executor_api_pb.DataPayloadEncodingH\x03\x88\x01\x01\x12\x1d\n\x10\x65ncoding_version\x18\x06 \x01(\x04H\x04\x88\x01\x01\x42\x07\n\x05_sizeB\x0e\n\x0c_sha256_hashB\x06\n\x04_uriB\x0b\n\t_encodingB\x13\n\x11_encoding_version"e\n\x0cGPUResources\x12\x12\n\x05\x63ount\x18\x01 \x01(\rH\x00\x88\x01\x01\x12-\n\x05model\x18\x02 \x01(\x0e\x32\x19.executor_api_pb.GPUModelH\x01\x88\x01\x01\x42\x08\n\x06_countB\x08\n\x06_model"\xc2\x01\n\rHostResources\x12\x16\n\tcpu_count\x18\x01 \x01(\rH\x00\x88\x01\x01\x12\x19\n\x0cmemory_bytes\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x17\n\ndisk_bytes\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12/\n\x03gpu\x18\x04 \x01(\x0b\x32\x1d.executor_api_pb.GPUResourcesH\x03\x88\x01\x01\x42\x0c\n\n_cpu_countB\x0f\n\r_memory_bytesB\r\n\x0b_disk_bytesB\x06\n\x04_gpu"\xbb\x01\n\x0f\x41llowedFunction\x12\x16\n\tnamespace\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x17\n\ngraph_name\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1a\n\rfunction_name\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x1a\n\rgraph_version\x18\x04 \x01(\tH\x03\x88\x01\x01\x42\x0c\n\n_namespaceB\r\n\x0b_graph_nameB\x10\n\x0e_function_nameB\x10\n\x0e_graph_version"\xd8\x01\n\x19\x46unctionExecutorResources\x12\x1b\n\x0e\x63pu_ms_per_sec\x18\x01 \x01(\rH\x00\x88\x01\x01\x12\x19\n\x0cmemory_bytes\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x17\n\ndisk_bytes\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12/\n\x03gpu\x18\x04 \x01(\x0b\x32\x1d.executor_api_pb.GPUResourcesH\x03\x88\x01\x01\x42\x11\n\x0f_cpu_ms_per_secB\x0f\n\r_memory_bytesB\r\n\x0b_disk_bytesB\x06\n\x04_gpu"\xb3\x04\n\x1b\x46unctionExecutorDescription\x12\x0f\n\x02id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tnamespace\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x17\n\ngraph_name\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x1a\n\rgraph_version\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x1a\n\rfunction_name\x18\x05 \x01(\tH\x04\x88\x01\x01\x12\x16\n\timage_uri\x18\x06 \x01(\tH\x05\x88\x01\x01\x12\x14\n\x0csecret_names\x18\x07 \x03(\t\x12%\n\x18\x63ustomer_code_timeout_ms\x18\t \x01(\rH\x06\x88\x01\x01\x12\x30\n\x05graph\x18\n \x01(\x0b\x32\x1c.executor_api_pb.DataPayloadH\x07\x88\x01\x01\x12\x42\n\tresources\x18\x0b \x01(\x0b\x32*.executor_api_pb.FunctionExecutorResourcesH\x08\x88\x01\x01\x12&\n\x19output_payload_uri_prefix\x18\x0c \x01(\tH\t\x88\x01\x01\x42\x05\n\x03_idB\x0c\n\n_namespaceB\r\n\x0b_graph_nameB\x10\n\x0e_graph_versionB\x10\n\x0e_function_nameB\x0c\n\n_image_uriB\x1b\n\x19_customer_code_timeout_msB\x08\n\x06_graphB\x0c\n\n_resourcesB\x1c\n\x1a_output_payload_uri_prefix"\xa4\x02\n\x15\x46unctionExecutorState\x12\x46\n\x0b\x64\x65scription\x18\x01 \x01(\x0b\x32,.executor_api_pb.FunctionExecutorDescriptionH\x00\x88\x01\x01\x12<\n\x06status\x18\x02 \x01(\x0e\x32\'.executor_api_pb.FunctionExecutorStatusH\x01\x88\x01\x01\x12S\n\x12termination_reason\x18\x03 \x01(\x0e\x32\x32.executor_api_pb.FunctionExecutorTerminationReasonH\x02\x88\x01\x01\x42\x0e\n\x0c_descriptionB\t\n\x07_statusB\x15\n\x13_termination_reason"\x8c\x02\n\x16\x46unctionExecutorUpdate\x12\x46\n\x0b\x64\x65scription\x18\x01 \x01(\x0b\x32,.executor_api_pb.FunctionExecutorDescriptionH\x00\x88\x01\x01\x12\x39\n\x0estartup_stdout\x18\x02 \x01(\x0b\x32\x1c.executor_api_pb.DataPayloadH\x01\x88\x01\x01\x12\x39\n\x0estartup_stderr\x18\x03 \x01(\x0b\x32\x1c.executor_api_pb.DataPayloadH\x02\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x11\n\x0f_startup_stdoutB\x11\n\x0f_startup_stderr"\xce\x05\n\rExecutorState\x12\x18\n\x0b\x65xecutor_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08hostname\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x07version\x18\x05 \x01(\tH\x02\x88\x01\x01\x12\x34\n\x06status\x18\x06 \x01(\x0e\x32\x1f.executor_api_pb.ExecutorStatusH\x03\x88\x01\x01\x12<\n\x0ftotal_resources\x18\r \x01(\x0b\x32\x1e.executor_api_pb.HostResourcesH\x04\x88\x01\x01\x12N\n!total_function_executor_resources\x18\x07 \x01(\x0b\x32\x1e.executor_api_pb.HostResourcesH\x05\x88\x01\x01\x12;\n\x11\x61llowed_functions\x18\x08 \x03(\x0b\x32 .executor_api_pb.AllowedFunction\x12H\n\x18\x66unction_executor_states\x18\t \x03(\x0b\x32&.executor_api_pb.FunctionExecutorState\x12:\n\x06labels\x18\n \x03(\x0b\x32*.executor_api_pb.ExecutorState.LabelsEntry\x12\x17\n\nstate_hash\x18\x0b \x01(\tH\x06\x88\x01\x01\x12\x19\n\x0cserver_clock\x18\x0c \x01(\x04H\x07\x88\x01\x01\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x0e\n\x0c_executor_idB\x0b\n\t_hostnameB\n\n\x08_versionB\t\n\x07_statusB\x12\n\x10_total_resourcesB$\n"_total_function_executor_resourcesB\r\n\x0b_state_hashB\x0f\n\r_server_clock"\xb9\x01\n\x0e\x45xecutorUpdate\x12\x18\n\x0b\x65xecutor_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x31\n\x0ctask_results\x18\x02 \x03(\x0b\x32\x1b.executor_api_pb.TaskResult\x12J\n\x19\x66unction_executor_updates\x18\x03 \x03(\x0b\x32\'.executor_api_pb.FunctionExecutorUpdateB\x0e\n\x0c_executor_id"\xbf\x01\n\x1aReportExecutorStateRequest\x12;\n\x0e\x65xecutor_state\x18\x01 \x01(\x0b\x32\x1e.executor_api_pb.ExecutorStateH\x00\x88\x01\x01\x12=\n\x0f\x65xecutor_update\x18\x02 \x01(\x0b\x32\x1f.executor_api_pb.ExecutorUpdateH\x01\x88\x01\x01\x42\x11\n\x0f_executor_stateB\x12\n\x10_executor_update"\x1d\n\x1bReportExecutorStateResponse"\xcf\x01\n\x0fTaskRetryPolicy\x12\x18\n\x0bmax_retries\x18\x01 \x01(\rH\x00\x88\x01\x01\x12\x1d\n\x10initial_delay_ms\x18\x02 \x01(\rH\x01\x88\x01\x01\x12\x19\n\x0cmax_delay_ms\x18\x03 \x01(\rH\x02\x88\x01\x01\x12\x1d\n\x10\x64\x65lay_multiplier\x18\x04 \x01(\rH\x03\x88\x01\x01\x42\x0e\n\x0c_max_retriesB\x13\n\x11_initial_delay_msB\x0f\n\r_max_delay_msB\x13\n\x11_delay_multiplier"\xc6\x04\n\x04Task\x12\x0f\n\x02id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tnamespace\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x17\n\ngraph_name\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x1a\n\rgraph_version\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x1a\n\rfunction_name\x18\x05 \x01(\tH\x04\x88\x01\x01\x12 \n\x13graph_invocation_id\x18\x06 \x01(\tH\x05\x88\x01\x01\x12\x17\n\ntimeout_ms\x18\n \x01(\rH\x06\x88\x01\x01\x12\x30\n\x05input\x18\x0b \x01(\x0b\x32\x1c.executor_api_pb.DataPayloadH\x07\x88\x01\x01\x12\x38\n\rreducer_input\x18\x0c \x01(\x0b\x32\x1c.executor_api_pb.DataPayloadH\x08\x88\x01\x01\x12&\n\x19output_payload_uri_prefix\x18\r \x01(\tH\t\x88\x01\x01\x12;\n\x0cretry_policy\x18\x0e \x01(\x0b\x32 .executor_api_pb.TaskRetryPolicyH\n\x88\x01\x01\x42\x05\n\x03_idB\x0c\n\n_namespaceB\r\n\x0b_graph_nameB\x10\n\x0e_graph_versionB\x10\n\x0e_function_nameB\x16\n\x14_graph_invocation_idB\r\n\x0b_timeout_msB\x08\n\x06_inputB\x10\n\x0e_reducer_inputB\x1c\n\x1a_output_payload_uri_prefixB\x0f\n\r_retry_policy"\xad\x01\n\x0eTaskAllocation\x12!\n\x14\x66unction_executor_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12(\n\x04task\x18\x02 \x01(\x0b\x32\x15.executor_api_pb.TaskH\x01\x88\x01\x01\x12\x1a\n\rallocation_id\x18\x03 \x01(\tH\x02\x88\x01\x01\x42\x17\n\x15_function_executor_idB\x07\n\x05_taskB\x10\n\x0e_allocation_id"K\n\x1fGetDesiredExecutorStatesRequest\x12\x18\n\x0b\x65xecutor_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x0e\n\x0c_executor_id"\xb9\x01\n\x14\x44\x65siredExecutorState\x12H\n\x12\x66unction_executors\x18\x01 \x03(\x0b\x32,.executor_api_pb.FunctionExecutorDescription\x12\x39\n\x10task_allocations\x18\x02 \x03(\x0b\x32\x1f.executor_api_pb.TaskAllocation\x12\x12\n\x05\x63lock\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x08\n\x06_clock"\'\n\rResultRouting\x12\x16\n\x0enext_functions\x18\x01 \x03(\t"\x81\x06\n\nTaskResult\x12\x14\n\x07task_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1a\n\rallocation_id\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x16\n\tnamespace\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x17\n\ngraph_name\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x1a\n\rgraph_version\x18\x05 \x01(\tH\x04\x88\x01\x01\x12\x1a\n\rfunction_name\x18\x06 \x01(\tH\x05\x88\x01\x01\x12 \n\x13graph_invocation_id\x18\x07 \x01(\tH\x06\x88\x01\x01\x12\x14\n\x07reducer\x18\x08 \x01(\x08H\x07\x88\x01\x01\x12;\n\x0coutcome_code\x18\t \x01(\x0e\x32 .executor_api_pb.TaskOutcomeCodeH\x08\x88\x01\x01\x12?\n\x0e\x66\x61ilure_reason\x18\n \x01(\x0e\x32".executor_api_pb.TaskFailureReasonH\t\x88\x01\x01\x12\x16\n\x0enext_functions\x18\x0b \x03(\t\x12\x36\n\x10\x66unction_outputs\x18\x0c \x03(\x0b\x32\x1c.executor_api_pb.DataPayload\x12\x31\n\x06stdout\x18\r \x01(\x0b\x32\x1c.executor_api_pb.DataPayloadH\n\x88\x01\x01\x12\x31\n\x06stderr\x18\x0e \x01(\x0b\x32\x1c.executor_api_pb.DataPayloadH\x0b\x88\x01\x01\x12/\n\x07routing\x18\x0f \x01(\x0b\x32\x1e.executor_api_pb.ResultRoutingB\n\n\x08_task_idB\x10\n\x0e_allocation_idB\x0c\n\n_namespaceB\r\n\x0b_graph_nameB\x10\n\x0e_graph_versionB\x10\n\x0e_function_nameB\x16\n\x14_graph_invocation_idB\n\n\x08_reducerB\x0f\n\r_outcome_codeB\x11\n\x0f_failure_reasonB\t\n\x07_stdoutB\t\n\x07_stderr*\xab\x01\n\x13\x44\x61taPayloadEncoding\x12!\n\x1d\x44\x41TA_PAYLOAD_ENCODING_UNKNOWN\x10\x00\x12#\n\x1f\x44\x41TA_PAYLOAD_ENCODING_UTF8_JSON\x10\x01\x12#\n\x1f\x44\x41TA_PAYLOAD_ENCODING_UTF8_TEXT\x10\x02\x12\'\n#DATA_PAYLOAD_ENCODING_BINARY_PICKLE\x10\x03*\xd6\x01\n\x08GPUModel\x12\x15\n\x11GPU_MODEL_UNKNOWN\x10\x00\x12\x1e\n\x1aGPU_MODEL_NVIDIA_A100_40GB\x10\x01\x12\x1e\n\x1aGPU_MODEL_NVIDIA_A100_80GB\x10\x02\x12\x1e\n\x1aGPU_MODEL_NVIDIA_H100_80GB\x10\x03\x12\x1d\n\x19GPU_MODEL_NVIDIA_TESLA_T4\x10\x04\x12\x1a\n\x16GPU_MODEL_NVIDIA_A6000\x10\x05\x12\x18\n\x14GPU_MODEL_NVIDIA_A10\x10\x06*\xb3\x01\n\x16\x46unctionExecutorStatus\x12$\n FUNCTION_EXECUTOR_STATUS_UNKNOWN\x10\x00\x12$\n FUNCTION_EXECUTOR_STATUS_PENDING\x10\x01\x12$\n FUNCTION_EXECUTOR_STATUS_RUNNING\x10\x02\x12\'\n#FUNCTION_EXECUTOR_STATUS_TERMINATED\x10\x03*\x95\x05\n!FunctionExecutorTerminationReason\x12\x30\n,FUNCTION_EXECUTOR_TERMINATION_REASON_UNKNOWN\x10\x00\x12\x46\nBFUNCTION_EXECUTOR_TERMINATION_REASON_STARTUP_FAILED_INTERNAL_ERROR\x10\x01\x12\x46\nBFUNCTION_EXECUTOR_TERMINATION_REASON_STARTUP_FAILED_FUNCTION_ERROR\x10\x02\x12H\nDFUNCTION_EXECUTOR_TERMINATION_REASON_STARTUP_FAILED_FUNCTION_TIMEOUT\x10\x03\x12:\n6FUNCTION_EXECUTOR_TERMINATION_REASON_EXECUTOR_SHUTDOWN\x10\n\x12\x43\n?FUNCTION_EXECUTOR_TERMINATION_REASON_REMOVED_FROM_DESIRED_STATE\x10\x0b\x12\x32\n.FUNCTION_EXECUTOR_TERMINATION_REASON_UNHEALTHY\x10\x0c\x12\x37\n3FUNCTION_EXECUTOR_TERMINATION_REASON_INTERNAL_ERROR\x10\r\x12\x39\n5FUNCTION_EXECUTOR_TERMINATION_REASON_FUNCTION_TIMEOUT\x10\x0e\x12;\n7FUNCTION_EXECUTOR_TERMINATION_REASON_FUNCTION_CANCELLED\x10\x0f*\xa5\x01\n\x0e\x45xecutorStatus\x12\x1b\n\x17\x45XECUTOR_STATUS_UNKNOWN\x10\x00\x12\x1f\n\x1b\x45XECUTOR_STATUS_STARTING_UP\x10\x01\x12\x1b\n\x17\x45XECUTOR_STATUS_RUNNING\x10\x02\x12\x1b\n\x17\x45XECUTOR_STATUS_DRAINED\x10\x03\x12\x1b\n\x17\x45XECUTOR_STATUS_STOPPED\x10\x04*n\n\x0fTaskOutcomeCode\x12\x1d\n\x19TASK_OUTCOME_CODE_UNKNOWN\x10\x00\x12\x1d\n\x19TASK_OUTCOME_CODE_SUCCESS\x10\x01\x12\x1d\n\x19TASK_OUTCOME_CODE_FAILURE\x10\x02*\x8c\x02\n\x11TaskFailureReason\x12\x1f\n\x1bTASK_FAILURE_REASON_UNKNOWN\x10\x00\x12&\n"TASK_FAILURE_REASON_INTERNAL_ERROR\x10\x01\x12&\n"TASK_FAILURE_REASON_FUNCTION_ERROR\x10\x02\x12(\n$TASK_FAILURE_REASON_FUNCTION_TIMEOUT\x10\x03\x12&\n"TASK_FAILURE_REASON_TASK_CANCELLED\x10\x04\x12\x34\n0TASK_FAILURE_REASON_FUNCTION_EXECUTOR_TERMINATED\x10\x05\x32\xff\x01\n\x0b\x45xecutorAPI\x12t\n\x15report_executor_state\x12+.executor_api_pb.ReportExecutorStateRequest\x1a,.executor_api_pb.ReportExecutorStateResponse"\x00\x12z\n\x1bget_desired_executor_states\x12\x30.executor_api_pb.GetDesiredExecutorStatesRequest\x1a%.executor_api_pb.DesiredExecutorState"\x00\x30\x01\x62\x06proto3'
22
+ b'\n!indexify/proto/executor_api.proto\x12\x0f\x65xecutor_api_pb"\xeb\x01\n\x0b\x44\x61taPayload\x12\x11\n\x04size\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x18\n\x0bsha256_hash\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x10\n\x03uri\x18\x04 \x01(\tH\x02\x88\x01\x01\x12;\n\x08\x65ncoding\x18\x05 \x01(\x0e\x32$.executor_api_pb.DataPayloadEncodingH\x03\x88\x01\x01\x12\x1d\n\x10\x65ncoding_version\x18\x06 \x01(\x04H\x04\x88\x01\x01\x42\x07\n\x05_sizeB\x0e\n\x0c_sha256_hashB\x06\n\x04_uriB\x0b\n\t_encodingB\x13\n\x11_encoding_version"e\n\x0cGPUResources\x12\x12\n\x05\x63ount\x18\x01 \x01(\rH\x00\x88\x01\x01\x12-\n\x05model\x18\x02 \x01(\x0e\x32\x19.executor_api_pb.GPUModelH\x01\x88\x01\x01\x42\x08\n\x06_countB\x08\n\x06_model"\xc2\x01\n\rHostResources\x12\x16\n\tcpu_count\x18\x01 \x01(\rH\x00\x88\x01\x01\x12\x19\n\x0cmemory_bytes\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x17\n\ndisk_bytes\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12/\n\x03gpu\x18\x04 \x01(\x0b\x32\x1d.executor_api_pb.GPUResourcesH\x03\x88\x01\x01\x42\x0c\n\n_cpu_countB\x0f\n\r_memory_bytesB\r\n\x0b_disk_bytesB\x06\n\x04_gpu"\xbb\x01\n\x0f\x41llowedFunction\x12\x16\n\tnamespace\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x17\n\ngraph_name\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1a\n\rfunction_name\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x1a\n\rgraph_version\x18\x04 \x01(\tH\x03\x88\x01\x01\x42\x0c\n\n_namespaceB\r\n\x0b_graph_nameB\x10\n\x0e_function_nameB\x10\n\x0e_graph_version"\xd8\x01\n\x19\x46unctionExecutorResources\x12\x1b\n\x0e\x63pu_ms_per_sec\x18\x01 \x01(\rH\x00\x88\x01\x01\x12\x19\n\x0cmemory_bytes\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x17\n\ndisk_bytes\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12/\n\x03gpu\x18\x04 \x01(\x0b\x32\x1d.executor_api_pb.GPUResourcesH\x03\x88\x01\x01\x42\x11\n\x0f_cpu_ms_per_secB\x0f\n\r_memory_bytesB\r\n\x0b_disk_bytesB\x06\n\x04_gpu"\xb3\x04\n\x1b\x46unctionExecutorDescription\x12\x0f\n\x02id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tnamespace\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x17\n\ngraph_name\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x1a\n\rgraph_version\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x1a\n\rfunction_name\x18\x05 \x01(\tH\x04\x88\x01\x01\x12\x16\n\timage_uri\x18\x06 \x01(\tH\x05\x88\x01\x01\x12\x14\n\x0csecret_names\x18\x07 \x03(\t\x12%\n\x18\x63ustomer_code_timeout_ms\x18\t \x01(\rH\x06\x88\x01\x01\x12\x30\n\x05graph\x18\n \x01(\x0b\x32\x1c.executor_api_pb.DataPayloadH\x07\x88\x01\x01\x12\x42\n\tresources\x18\x0b \x01(\x0b\x32*.executor_api_pb.FunctionExecutorResourcesH\x08\x88\x01\x01\x12&\n\x19output_payload_uri_prefix\x18\x0c \x01(\tH\t\x88\x01\x01\x42\x05\n\x03_idB\x0c\n\n_namespaceB\r\n\x0b_graph_nameB\x10\n\x0e_graph_versionB\x10\n\x0e_function_nameB\x0c\n\n_image_uriB\x1b\n\x19_customer_code_timeout_msB\x08\n\x06_graphB\x0c\n\n_resourcesB\x1c\n\x1a_output_payload_uri_prefix"\xa4\x02\n\x15\x46unctionExecutorState\x12\x46\n\x0b\x64\x65scription\x18\x01 \x01(\x0b\x32,.executor_api_pb.FunctionExecutorDescriptionH\x00\x88\x01\x01\x12<\n\x06status\x18\x02 \x01(\x0e\x32\'.executor_api_pb.FunctionExecutorStatusH\x01\x88\x01\x01\x12S\n\x12termination_reason\x18\x03 \x01(\x0e\x32\x32.executor_api_pb.FunctionExecutorTerminationReasonH\x02\x88\x01\x01\x42\x0e\n\x0c_descriptionB\t\n\x07_statusB\x15\n\x13_termination_reason"\x8c\x02\n\x16\x46unctionExecutorUpdate\x12\x46\n\x0b\x64\x65scription\x18\x01 \x01(\x0b\x32,.executor_api_pb.FunctionExecutorDescriptionH\x00\x88\x01\x01\x12\x39\n\x0estartup_stdout\x18\x02 \x01(\x0b\x32\x1c.executor_api_pb.DataPayloadH\x01\x88\x01\x01\x12\x39\n\x0estartup_stderr\x18\x03 \x01(\x0b\x32\x1c.executor_api_pb.DataPayloadH\x02\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x11\n\x0f_startup_stdoutB\x11\n\x0f_startup_stderr"\xce\x05\n\rExecutorState\x12\x18\n\x0b\x65xecutor_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08hostname\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x07version\x18\x05 \x01(\tH\x02\x88\x01\x01\x12\x34\n\x06status\x18\x06 \x01(\x0e\x32\x1f.executor_api_pb.ExecutorStatusH\x03\x88\x01\x01\x12<\n\x0ftotal_resources\x18\r \x01(\x0b\x32\x1e.executor_api_pb.HostResourcesH\x04\x88\x01\x01\x12N\n!total_function_executor_resources\x18\x07 \x01(\x0b\x32\x1e.executor_api_pb.HostResourcesH\x05\x88\x01\x01\x12;\n\x11\x61llowed_functions\x18\x08 \x03(\x0b\x32 .executor_api_pb.AllowedFunction\x12H\n\x18\x66unction_executor_states\x18\t \x03(\x0b\x32&.executor_api_pb.FunctionExecutorState\x12:\n\x06labels\x18\n \x03(\x0b\x32*.executor_api_pb.ExecutorState.LabelsEntry\x12\x17\n\nstate_hash\x18\x0b \x01(\tH\x06\x88\x01\x01\x12\x19\n\x0cserver_clock\x18\x0c \x01(\x04H\x07\x88\x01\x01\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x0e\n\x0c_executor_idB\x0b\n\t_hostnameB\n\n\x08_versionB\t\n\x07_statusB\x12\n\x10_total_resourcesB$\n"_total_function_executor_resourcesB\r\n\x0b_state_hashB\x0f\n\r_server_clock"\xb9\x01\n\x0e\x45xecutorUpdate\x12\x18\n\x0b\x65xecutor_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x31\n\x0ctask_results\x18\x02 \x03(\x0b\x32\x1b.executor_api_pb.TaskResult\x12J\n\x19\x66unction_executor_updates\x18\x03 \x03(\x0b\x32\'.executor_api_pb.FunctionExecutorUpdateB\x0e\n\x0c_executor_id"\xbf\x01\n\x1aReportExecutorStateRequest\x12;\n\x0e\x65xecutor_state\x18\x01 \x01(\x0b\x32\x1e.executor_api_pb.ExecutorStateH\x00\x88\x01\x01\x12=\n\x0f\x65xecutor_update\x18\x02 \x01(\x0b\x32\x1f.executor_api_pb.ExecutorUpdateH\x01\x88\x01\x01\x42\x11\n\x0f_executor_stateB\x12\n\x10_executor_update"\x1d\n\x1bReportExecutorStateResponse"\xcf\x01\n\x0fTaskRetryPolicy\x12\x18\n\x0bmax_retries\x18\x01 \x01(\rH\x00\x88\x01\x01\x12\x1d\n\x10initial_delay_ms\x18\x02 \x01(\rH\x01\x88\x01\x01\x12\x19\n\x0cmax_delay_ms\x18\x03 \x01(\rH\x02\x88\x01\x01\x12\x1d\n\x10\x64\x65lay_multiplier\x18\x04 \x01(\rH\x03\x88\x01\x01\x42\x0e\n\x0c_max_retriesB\x13\n\x11_initial_delay_msB\x0f\n\r_max_delay_msB\x13\n\x11_delay_multiplier"\xc6\x04\n\x04Task\x12\x0f\n\x02id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tnamespace\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x17\n\ngraph_name\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x1a\n\rgraph_version\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x1a\n\rfunction_name\x18\x05 \x01(\tH\x04\x88\x01\x01\x12 \n\x13graph_invocation_id\x18\x06 \x01(\tH\x05\x88\x01\x01\x12\x17\n\ntimeout_ms\x18\n \x01(\rH\x06\x88\x01\x01\x12\x30\n\x05input\x18\x0b \x01(\x0b\x32\x1c.executor_api_pb.DataPayloadH\x07\x88\x01\x01\x12\x38\n\rreducer_input\x18\x0c \x01(\x0b\x32\x1c.executor_api_pb.DataPayloadH\x08\x88\x01\x01\x12&\n\x19output_payload_uri_prefix\x18\r \x01(\tH\t\x88\x01\x01\x12;\n\x0cretry_policy\x18\x0e \x01(\x0b\x32 .executor_api_pb.TaskRetryPolicyH\n\x88\x01\x01\x42\x05\n\x03_idB\x0c\n\n_namespaceB\r\n\x0b_graph_nameB\x10\n\x0e_graph_versionB\x10\n\x0e_function_nameB\x16\n\x14_graph_invocation_idB\r\n\x0b_timeout_msB\x08\n\x06_inputB\x10\n\x0e_reducer_inputB\x1c\n\x1a_output_payload_uri_prefixB\x0f\n\r_retry_policy"\xad\x01\n\x0eTaskAllocation\x12!\n\x14\x66unction_executor_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12(\n\x04task\x18\x02 \x01(\x0b\x32\x15.executor_api_pb.TaskH\x01\x88\x01\x01\x12\x1a\n\rallocation_id\x18\x03 \x01(\tH\x02\x88\x01\x01\x42\x17\n\x15_function_executor_idB\x07\n\x05_taskB\x10\n\x0e_allocation_id"K\n\x1fGetDesiredExecutorStatesRequest\x12\x18\n\x0b\x65xecutor_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x0e\n\x0c_executor_id"\xb9\x01\n\x14\x44\x65siredExecutorState\x12H\n\x12\x66unction_executors\x18\x01 \x03(\x0b\x32,.executor_api_pb.FunctionExecutorDescription\x12\x39\n\x10task_allocations\x18\x02 \x03(\x0b\x32\x1f.executor_api_pb.TaskAllocation\x12\x12\n\x05\x63lock\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x08\n\x06_clock"\xb0\x06\n\nTaskResult\x12\x14\n\x07task_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1a\n\rallocation_id\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x16\n\tnamespace\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x17\n\ngraph_name\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x1a\n\rgraph_version\x18\x05 \x01(\tH\x04\x88\x01\x01\x12\x1a\n\rfunction_name\x18\x06 \x01(\tH\x05\x88\x01\x01\x12 \n\x13graph_invocation_id\x18\x07 \x01(\tH\x06\x88\x01\x01\x12\x14\n\x07reducer\x18\x08 \x01(\x08H\x07\x88\x01\x01\x12;\n\x0coutcome_code\x18\t \x01(\x0e\x32 .executor_api_pb.TaskOutcomeCodeH\x08\x88\x01\x01\x12?\n\x0e\x66\x61ilure_reason\x18\n \x01(\x0e\x32".executor_api_pb.TaskFailureReasonH\t\x88\x01\x01\x12\x16\n\x0enext_functions\x18\x0b \x03(\t\x12\x36\n\x10\x66unction_outputs\x18\x0c \x03(\x0b\x32\x1c.executor_api_pb.DataPayload\x12\x31\n\x06stdout\x18\r \x01(\x0b\x32\x1c.executor_api_pb.DataPayloadH\n\x88\x01\x01\x12\x31\n\x06stderr\x18\x0e \x01(\x0b\x32\x1c.executor_api_pb.DataPayloadH\x0b\x88\x01\x01\x12\x42\n\x17invocation_error_output\x18\x0f \x01(\x0b\x32\x1c.executor_api_pb.DataPayloadH\x0c\x88\x01\x01\x42\n\n\x08_task_idB\x10\n\x0e_allocation_idB\x0c\n\n_namespaceB\r\n\x0b_graph_nameB\x10\n\x0e_graph_versionB\x10\n\x0e_function_nameB\x16\n\x14_graph_invocation_idB\n\n\x08_reducerB\x0f\n\r_outcome_codeB\x11\n\x0f_failure_reasonB\t\n\x07_stdoutB\t\n\x07_stderrB\x1a\n\x18_invocation_error_output*\xd1\x01\n\x13\x44\x61taPayloadEncoding\x12!\n\x1d\x44\x41TA_PAYLOAD_ENCODING_UNKNOWN\x10\x00\x12#\n\x1f\x44\x41TA_PAYLOAD_ENCODING_UTF8_JSON\x10\x01\x12#\n\x1f\x44\x41TA_PAYLOAD_ENCODING_UTF8_TEXT\x10\x02\x12\'\n#DATA_PAYLOAD_ENCODING_BINARY_PICKLE\x10\x03\x12$\n DATA_PAYLOAD_ENCODING_BINARY_ZIP\x10\x04*\xd6\x01\n\x08GPUModel\x12\x15\n\x11GPU_MODEL_UNKNOWN\x10\x00\x12\x1e\n\x1aGPU_MODEL_NVIDIA_A100_40GB\x10\x01\x12\x1e\n\x1aGPU_MODEL_NVIDIA_A100_80GB\x10\x02\x12\x1e\n\x1aGPU_MODEL_NVIDIA_H100_80GB\x10\x03\x12\x1d\n\x19GPU_MODEL_NVIDIA_TESLA_T4\x10\x04\x12\x1a\n\x16GPU_MODEL_NVIDIA_A6000\x10\x05\x12\x18\n\x14GPU_MODEL_NVIDIA_A10\x10\x06*\xb3\x01\n\x16\x46unctionExecutorStatus\x12$\n FUNCTION_EXECUTOR_STATUS_UNKNOWN\x10\x00\x12$\n FUNCTION_EXECUTOR_STATUS_PENDING\x10\x01\x12$\n FUNCTION_EXECUTOR_STATUS_RUNNING\x10\x02\x12\'\n#FUNCTION_EXECUTOR_STATUS_TERMINATED\x10\x03*\x94\x04\n!FunctionExecutorTerminationReason\x12\x30\n,FUNCTION_EXECUTOR_TERMINATION_REASON_UNKNOWN\x10\x00\x12\x46\nBFUNCTION_EXECUTOR_TERMINATION_REASON_STARTUP_FAILED_INTERNAL_ERROR\x10\x01\x12\x46\nBFUNCTION_EXECUTOR_TERMINATION_REASON_STARTUP_FAILED_FUNCTION_ERROR\x10\x02\x12H\nDFUNCTION_EXECUTOR_TERMINATION_REASON_STARTUP_FAILED_FUNCTION_TIMEOUT\x10\x03\x12\x32\n.FUNCTION_EXECUTOR_TERMINATION_REASON_UNHEALTHY\x10\x0c\x12\x37\n3FUNCTION_EXECUTOR_TERMINATION_REASON_INTERNAL_ERROR\x10\r\x12\x39\n5FUNCTION_EXECUTOR_TERMINATION_REASON_FUNCTION_TIMEOUT\x10\x0e\x12;\n7FUNCTION_EXECUTOR_TERMINATION_REASON_FUNCTION_CANCELLED\x10\x0f*\xa5\x01\n\x0e\x45xecutorStatus\x12\x1b\n\x17\x45XECUTOR_STATUS_UNKNOWN\x10\x00\x12\x1f\n\x1b\x45XECUTOR_STATUS_STARTING_UP\x10\x01\x12\x1b\n\x17\x45XECUTOR_STATUS_RUNNING\x10\x02\x12\x1b\n\x17\x45XECUTOR_STATUS_DRAINED\x10\x03\x12\x1b\n\x17\x45XECUTOR_STATUS_STOPPED\x10\x04*n\n\x0fTaskOutcomeCode\x12\x1d\n\x19TASK_OUTCOME_CODE_UNKNOWN\x10\x00\x12\x1d\n\x19TASK_OUTCOME_CODE_SUCCESS\x10\x01\x12\x1d\n\x19TASK_OUTCOME_CODE_FAILURE\x10\x02*\xb6\x02\n\x11TaskFailureReason\x12\x1f\n\x1bTASK_FAILURE_REASON_UNKNOWN\x10\x00\x12&\n"TASK_FAILURE_REASON_INTERNAL_ERROR\x10\x01\x12&\n"TASK_FAILURE_REASON_FUNCTION_ERROR\x10\x02\x12(\n$TASK_FAILURE_REASON_FUNCTION_TIMEOUT\x10\x03\x12(\n$TASK_FAILURE_REASON_INVOCATION_ERROR\x10\x04\x12&\n"TASK_FAILURE_REASON_TASK_CANCELLED\x10\x05\x12\x34\n0TASK_FAILURE_REASON_FUNCTION_EXECUTOR_TERMINATED\x10\x06\x32\xff\x01\n\x0b\x45xecutorAPI\x12t\n\x15report_executor_state\x12+.executor_api_pb.ReportExecutorStateRequest\x1a,.executor_api_pb.ReportExecutorStateResponse"\x00\x12z\n\x1bget_desired_executor_states\x12\x30.executor_api_pb.GetDesiredExecutorStatesRequest\x1a%.executor_api_pb.DesiredExecutorState"\x00\x30\x01\x62\x06proto3'
23
23
  )
24
24
 
25
25
  _globals = globals()
@@ -31,20 +31,20 @@ if not _descriptor._USE_C_DESCRIPTORS:
31
31
  DESCRIPTOR._loaded_options = None
32
32
  _globals["_EXECUTORSTATE_LABELSENTRY"]._loaded_options = None
33
33
  _globals["_EXECUTORSTATE_LABELSENTRY"]._serialized_options = b"8\001"
34
- _globals["_DATAPAYLOADENCODING"]._serialized_start = 5317
35
- _globals["_DATAPAYLOADENCODING"]._serialized_end = 5488
36
- _globals["_GPUMODEL"]._serialized_start = 5491
37
- _globals["_GPUMODEL"]._serialized_end = 5705
38
- _globals["_FUNCTIONEXECUTORSTATUS"]._serialized_start = 5708
39
- _globals["_FUNCTIONEXECUTORSTATUS"]._serialized_end = 5887
40
- _globals["_FUNCTIONEXECUTORTERMINATIONREASON"]._serialized_start = 5890
41
- _globals["_FUNCTIONEXECUTORTERMINATIONREASON"]._serialized_end = 6551
42
- _globals["_EXECUTORSTATUS"]._serialized_start = 6554
43
- _globals["_EXECUTORSTATUS"]._serialized_end = 6719
44
- _globals["_TASKOUTCOMECODE"]._serialized_start = 6721
45
- _globals["_TASKOUTCOMECODE"]._serialized_end = 6831
46
- _globals["_TASKFAILUREREASON"]._serialized_start = 6834
47
- _globals["_TASKFAILUREREASON"]._serialized_end = 7102
34
+ _globals["_DATAPAYLOADENCODING"]._serialized_start = 5323
35
+ _globals["_DATAPAYLOADENCODING"]._serialized_end = 5532
36
+ _globals["_GPUMODEL"]._serialized_start = 5535
37
+ _globals["_GPUMODEL"]._serialized_end = 5749
38
+ _globals["_FUNCTIONEXECUTORSTATUS"]._serialized_start = 5752
39
+ _globals["_FUNCTIONEXECUTORSTATUS"]._serialized_end = 5931
40
+ _globals["_FUNCTIONEXECUTORTERMINATIONREASON"]._serialized_start = 5934
41
+ _globals["_FUNCTIONEXECUTORTERMINATIONREASON"]._serialized_end = 6466
42
+ _globals["_EXECUTORSTATUS"]._serialized_start = 6469
43
+ _globals["_EXECUTORSTATUS"]._serialized_end = 6634
44
+ _globals["_TASKOUTCOMECODE"]._serialized_start = 6636
45
+ _globals["_TASKOUTCOMECODE"]._serialized_end = 6746
46
+ _globals["_TASKFAILUREREASON"]._serialized_start = 6749
47
+ _globals["_TASKFAILUREREASON"]._serialized_end = 7059
48
48
  _globals["_DATAPAYLOAD"]._serialized_start = 55
49
49
  _globals["_DATAPAYLOAD"]._serialized_end = 290
50
50
  _globals["_GPURESOURCES"]._serialized_start = 292
@@ -81,10 +81,8 @@ if not _descriptor._USE_C_DESCRIPTORS:
81
81
  _globals["_GETDESIREDEXECUTORSTATESREQUEST"]._serialized_end = 4313
82
82
  _globals["_DESIREDEXECUTORSTATE"]._serialized_start = 4316
83
83
  _globals["_DESIREDEXECUTORSTATE"]._serialized_end = 4501
84
- _globals["_RESULTROUTING"]._serialized_start = 4503
85
- _globals["_RESULTROUTING"]._serialized_end = 4542
86
- _globals["_TASKRESULT"]._serialized_start = 4545
87
- _globals["_TASKRESULT"]._serialized_end = 5314
88
- _globals["_EXECUTORAPI"]._serialized_start = 7105
89
- _globals["_EXECUTORAPI"]._serialized_end = 7360
84
+ _globals["_TASKRESULT"]._serialized_start = 4504
85
+ _globals["_TASKRESULT"]._serialized_end = 5320
86
+ _globals["_EXECUTORAPI"]._serialized_start = 7062
87
+ _globals["_EXECUTORAPI"]._serialized_end = 7317
90
88
  # @@protoc_insertion_point(module_scope)