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.
- indexify/executor/executor.py +1 -1
- indexify/executor/function_executor/function_executor.py +35 -7
- indexify/executor/function_executor/invocation_state_client.py +26 -16
- indexify/executor/function_executor_controller/completed_task_metrics.py +1 -0
- indexify/executor/function_executor_controller/create_function_executor.py +1 -0
- indexify/executor/function_executor_controller/destroy_function_executor.py +14 -11
- indexify/executor/function_executor_controller/downloads.py +20 -9
- indexify/executor/function_executor_controller/events.py +3 -17
- indexify/executor/function_executor_controller/function_executor_controller.py +145 -119
- indexify/executor/function_executor_controller/metrics/function_executor_controller.py +25 -18
- indexify/executor/function_executor_controller/run_task.py +82 -20
- indexify/executor/function_executor_controller/task_output.py +11 -14
- indexify/executor/function_executor_controller/upload_task_output.py +102 -62
- indexify/executor/state_reconciler.py +2 -7
- indexify/proto/executor_api.proto +31 -30
- indexify/proto/executor_api_pb2.py +19 -21
- indexify/proto/executor_api_pb2.pyi +8 -22
- {indexify-0.4.9.dist-info → indexify-0.4.11.dist-info}/METADATA +2 -2
- {indexify-0.4.9.dist-info → indexify-0.4.11.dist-info}/RECORD +21 -21
- {indexify-0.4.9.dist-info → indexify-0.4.11.dist-info}/WHEEL +0 -0
- {indexify-0.4.9.dist-info → indexify-0.4.11.dist-info}/entry_points.txt +0 -0
@@ -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
|
-
|
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
|
-
|
34
|
-
|
35
|
-
|
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.
|
47
|
-
self.
|
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.
|
55
|
-
self.
|
56
|
-
self.
|
57
|
-
self.
|
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.
|
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
|
-
|
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(
|
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
|
-
|
132
|
+
task_output: TaskOutput, blob_store: BLOBStore, logger: Any
|
122
133
|
) -> None:
|
123
|
-
if
|
124
|
-
stdout_url = f"{
|
125
|
-
stdout_bytes: bytes =
|
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
|
-
|
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
|
-
|
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
|
138
|
-
stderr_url = f"{
|
139
|
-
stderr_bytes: bytes =
|
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
|
-
|
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
|
-
|
150
|
-
|
151
|
-
if
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
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
|
-
|
174
|
-
|
175
|
-
|
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(
|
207
|
+
def _task_output_summary(task_output: TaskOutput) -> _TaskOutputSummary:
|
179
208
|
summary: _TaskOutputSummary = _TaskOutputSummary()
|
180
209
|
|
181
|
-
if
|
210
|
+
if task_output.stdout is not None:
|
182
211
|
summary.stdout_count += 1
|
183
|
-
summary.stdout_total_bytes += len(
|
212
|
+
summary.stdout_total_bytes += len(task_output.stdout)
|
184
213
|
|
185
|
-
if
|
214
|
+
if task_output.stderr is not None:
|
186
215
|
summary.stderr_count += 1
|
187
|
-
summary.stderr_total_bytes += len(
|
188
|
-
|
189
|
-
if
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
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
|
-
|
200
|
-
|
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(
|
211
|
-
|
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
|
-
|
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
|
-
//
|
64
|
+
// FE is being created.
|
66
65
|
FUNCTION_EXECUTOR_STATUS_PENDING = 1;
|
67
|
-
//
|
66
|
+
// FE is running and ready to accept tasks.
|
68
67
|
FUNCTION_EXECUTOR_STATUS_RUNNING = 2;
|
69
|
-
//
|
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
|
-
|
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
|
-
//
|
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
|
-
//
|
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
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
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
|
-
|
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 =
|
35
|
-
_globals["_DATAPAYLOADENCODING"]._serialized_end =
|
36
|
-
_globals["_GPUMODEL"]._serialized_start =
|
37
|
-
_globals["_GPUMODEL"]._serialized_end =
|
38
|
-
_globals["_FUNCTIONEXECUTORSTATUS"]._serialized_start =
|
39
|
-
_globals["_FUNCTIONEXECUTORSTATUS"]._serialized_end =
|
40
|
-
_globals["_FUNCTIONEXECUTORTERMINATIONREASON"]._serialized_start =
|
41
|
-
_globals["_FUNCTIONEXECUTORTERMINATIONREASON"]._serialized_end =
|
42
|
-
_globals["_EXECUTORSTATUS"]._serialized_start =
|
43
|
-
_globals["_EXECUTORSTATUS"]._serialized_end =
|
44
|
-
_globals["_TASKOUTCOMECODE"]._serialized_start =
|
45
|
-
_globals["_TASKOUTCOMECODE"]._serialized_end =
|
46
|
-
_globals["_TASKFAILUREREASON"]._serialized_start =
|
47
|
-
_globals["_TASKFAILUREREASON"]._serialized_end =
|
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["
|
85
|
-
_globals["
|
86
|
-
_globals["
|
87
|
-
_globals["
|
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)
|