indexify 0.4.26__tar.gz → 0.4.28__tar.gz

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.
Files changed (73) hide show
  1. {indexify-0.4.26 → indexify-0.4.28}/PKG-INFO +4 -4
  2. {indexify-0.4.26 → indexify-0.4.28}/pyproject.toml +4 -4
  3. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/function_executor/function_executor.py +4 -4
  4. indexify-0.4.28/src/indexify/executor/function_executor_controller/aio_utils.py +26 -0
  5. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/function_executor_controller/create_function_executor.py +16 -3
  6. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/function_executor_controller/function_executor_controller.py +19 -13
  7. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/function_executor_controller/message_validators.py +1 -0
  8. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/function_executor_controller/prepare_task.py +2 -2
  9. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/function_executor_controller/run_task.py +3 -3
  10. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/function_executor_controller/terminate_function_executor.py +7 -3
  11. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/state_reconciler.py +2 -0
  12. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/proto/executor_api.proto +1 -1
  13. indexify-0.4.28/src/indexify/proto/executor_api_pb2.py +88 -0
  14. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/proto/executor_api_pb2.pyi +4 -4
  15. indexify-0.4.26/src/indexify/proto/executor_api_pb2.py +0 -88
  16. {indexify-0.4.26 → indexify-0.4.28}/README.md +0 -0
  17. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/cli/__init__.py +0 -0
  18. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/cli/build_image.py +0 -0
  19. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/cli/deploy.py +0 -0
  20. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/cli/executor.py +0 -0
  21. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/README.md +0 -0
  22. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/blob_store/blob_store.py +0 -0
  23. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/blob_store/local_fs_blob_store.py +0 -0
  24. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/blob_store/metrics/blob_store.py +0 -0
  25. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/blob_store/s3_blob_store.py +0 -0
  26. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/channel_manager.py +0 -0
  27. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/executor.py +0 -0
  28. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/function_allowlist.py +0 -0
  29. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/function_executor/health_checker.py +0 -0
  30. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/function_executor/invocation_state_client.py +0 -0
  31. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/function_executor/metrics/function_executor.py +0 -0
  32. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/function_executor/metrics/health_checker.py +0 -0
  33. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/function_executor/metrics/invocation_state_client.py +0 -0
  34. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/function_executor/server/client_configuration.py +0 -0
  35. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/function_executor/server/function_executor_server.py +0 -0
  36. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/function_executor/server/function_executor_server_factory.py +0 -0
  37. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/function_executor/server/subprocess_function_executor_server.py +0 -0
  38. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/function_executor/server/subprocess_function_executor_server_factory.py +0 -0
  39. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/function_executor_controller/__init__.py +0 -0
  40. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/function_executor_controller/completed_task_metrics.py +0 -0
  41. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/function_executor_controller/debug_event_loop.py +0 -0
  42. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/function_executor_controller/downloads.py +0 -0
  43. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/function_executor_controller/events.py +0 -0
  44. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/function_executor_controller/finalize_task.py +0 -0
  45. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/function_executor_controller/loggers.py +0 -0
  46. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/function_executor_controller/metrics/completed_task_metrics.py +0 -0
  47. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/function_executor_controller/metrics/downloads.py +0 -0
  48. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/function_executor_controller/metrics/finalize_task.py +0 -0
  49. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/function_executor_controller/metrics/function_executor_controller.py +0 -0
  50. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/function_executor_controller/metrics/prepare_task.py +0 -0
  51. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/function_executor_controller/metrics/run_task.py +0 -0
  52. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/function_executor_controller/task_info.py +0 -0
  53. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/function_executor_controller/task_input.py +0 -0
  54. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/function_executor_controller/task_output.py +0 -0
  55. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/host_resources/host_resources.py +0 -0
  56. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/host_resources/nvidia_gpu.py +0 -0
  57. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/host_resources/nvidia_gpu_allocator.py +0 -0
  58. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/logging.py +0 -0
  59. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/metrics/channel_manager.py +0 -0
  60. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/metrics/executor.py +0 -0
  61. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/metrics/state_reconciler.py +0 -0
  62. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/metrics/state_reporter.py +0 -0
  63. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/monitoring/handler.py +0 -0
  64. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/monitoring/health_check_handler.py +0 -0
  65. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/monitoring/health_checker/generic_health_checker.py +0 -0
  66. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/monitoring/health_checker/health_checker.py +0 -0
  67. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/monitoring/health_checker/metrics/health_checker.py +0 -0
  68. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/monitoring/metrics.py +0 -0
  69. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/monitoring/prometheus_metrics_handler.py +0 -0
  70. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/monitoring/server.py +0 -0
  71. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/monitoring/startup_probe_handler.py +0 -0
  72. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/executor/state_reporter.py +0 -0
  73. {indexify-0.4.26 → indexify-0.4.28}/src/indexify/proto/executor_api_pb2_grpc.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: indexify
3
- Version: 0.4.26
3
+ Version: 0.4.28
4
4
  Summary: Open Source Indexify components and helper tools
5
5
  Home-page: https://github.com/tensorlakeai/indexify
6
6
  License: Apache 2.0
@@ -14,16 +14,16 @@ Classifier: Programming Language :: Python :: 3.11
14
14
  Classifier: Programming Language :: Python :: 3.12
15
15
  Classifier: Programming Language :: Python :: 3.13
16
16
  Requires-Dist: aiohttp (>=3.12.15,<4.0.0)
17
- Requires-Dist: boto3 (>=1.40.6,<2.0.0)
17
+ Requires-Dist: boto3 (>=1.40.12,<2.0.0)
18
18
  Requires-Dist: docker (>=7.1.0,<8.0.0)
19
19
  Requires-Dist: httpx[http2] (==0.27.2)
20
20
  Requires-Dist: nanoid (>=2.0.0,<3.0.0)
21
21
  Requires-Dist: prometheus-client (>=0.22.1,<0.23.0)
22
22
  Requires-Dist: psutil (>=7.0.0,<8.0.0)
23
23
  Requires-Dist: pydantic (>=2.11,<3.0)
24
- Requires-Dist: requests (>=2.32.4,<3.0.0)
24
+ Requires-Dist: requests (>=2.32.5,<3.0.0)
25
25
  Requires-Dist: structlog (==25.4.0)
26
- Requires-Dist: tensorlake (==0.2.39)
26
+ Requires-Dist: tensorlake (==0.2.42)
27
27
  Requires-Dist: urllib3 (>=2.5.0,<3.0.0)
28
28
  Project-URL: Repository, https://github.com/tensorlakeai/indexify
29
29
  Description-Content-Type: text/markdown
@@ -1,7 +1,7 @@
1
1
  [tool.poetry]
2
2
  name = "indexify"
3
3
  # Incremented if any of the components provided in this packages are updated.
4
- version = "0.4.26"
4
+ version = "0.4.28"
5
5
  description = "Open Source Indexify components and helper tools"
6
6
  authors = ["Tensorlake Inc. <support@tensorlake.ai>"]
7
7
  license = "Apache 2.0"
@@ -25,11 +25,11 @@ httpx = { version = "0.27.2", extras = ["http2"] }
25
25
  pydantic = "^2.11"
26
26
  prometheus-client = "^0.22.1"
27
27
  psutil = "^7.0.0"
28
- boto3 = "^1.40.6"
28
+ boto3 = "^1.40.12"
29
29
  structlog = "25.4.0"
30
30
  # Adds function-executor binary, utils lib, sdk used in indexify-cli commands.
31
31
  # We need to specify the tensorlake version exactly because pip install doesn't respect poetry.lock files.
32
- tensorlake = "0.2.39"
32
+ tensorlake = "0.2.42"
33
33
  # Uncomment the next line to use local tensorlake package (only for development!)
34
34
  # tensorlake = { path = "../tensorlake", develop = true }
35
35
  # grpcio is provided by tensorlake
@@ -40,7 +40,7 @@ tensorlake = "0.2.39"
40
40
  docker = "^7.1.0"
41
41
 
42
42
  # Packages pinned to mitigate vulnerabilities, not a direct dependcy of tensorlake
43
- requests = "^2.32.4"
43
+ requests = "^2.32.5"
44
44
  urllib3 = "^2.5.0"
45
45
 
46
46
  [tool.poetry.group.dev.dependencies]
@@ -308,10 +308,7 @@ async def _initialize_server(
308
308
  customer_code_timeout_sec: float,
309
309
  logger: Any,
310
310
  ) -> FunctionExecutorInitializationResult:
311
- with (
312
- metric_initialize_rpc_errors.count_exceptions(),
313
- metric_initialize_rpc_latency.time(),
314
- ):
311
+ with metric_initialize_rpc_latency.time():
315
312
  try:
316
313
  initialize_response: InitializeResponse = await stub.initialize(
317
314
  initialize_request,
@@ -322,6 +319,9 @@ async def _initialize_server(
322
319
  response=initialize_response,
323
320
  )
324
321
  except grpc.aio.AioRpcError as e:
322
+ # Increment the metric manually as we're not raising this exception.
323
+ metric_initialize_rpc_errors.inc()
324
+ metric_create_errors.inc()
325
325
  if e.code() == grpc.StatusCode.DEADLINE_EXCEEDED:
326
326
  return FunctionExecutorInitializationResult(
327
327
  is_timeout=True,
@@ -0,0 +1,26 @@
1
+ import asyncio
2
+ from typing import Any, Optional
3
+
4
+
5
+ async def shielded_await(task: asyncio.Task, logger: Any) -> Any:
6
+ """Awaits the supplied task and ignores cancellations until it's done.
7
+
8
+ Cancels itself if the task is cancelled once the task is done.
9
+ """
10
+ cancelled_error: Optional[asyncio.CancelledError] = None
11
+
12
+ while not task.done():
13
+ try:
14
+ # Shield to make sure that task is not cancelled.
15
+ await asyncio.shield(task)
16
+ except asyncio.CancelledError as e:
17
+ logger.info(
18
+ "ignoring aio task cancellation until it's finished",
19
+ task_name=task.get_name(),
20
+ )
21
+ cancelled_error = e
22
+
23
+ if cancelled_error is not None:
24
+ raise cancelled_error
25
+ else:
26
+ return task.result()
@@ -25,6 +25,7 @@ from indexify.proto.executor_api_pb2 import (
25
25
  FunctionExecutorTerminationReason,
26
26
  )
27
27
 
28
+ from .aio_utils import shielded_await
28
29
  from .downloads import download_graph
29
30
  from .events import FunctionExecutorCreated
30
31
 
@@ -82,8 +83,13 @@ async def create_function_executor(
82
83
  logger=logger,
83
84
  )
84
85
  if fe_created_event.function_executor is None:
86
+ # _to_fe_created_event doesn't like the FE, destroy it.
87
+ fe_destroy_task: asyncio.Task = asyncio.create_task(
88
+ function_executor.destroy(),
89
+ name=f"destroy function executor {function_executor_description.id}",
90
+ )
85
91
  try:
86
- await asyncio.shield(function_executor.destroy())
92
+ await shielded_await(fe_destroy_task, logger)
87
93
  except asyncio.CancelledError:
88
94
  # destroy() finished due to the shield, return fe_created_event.
89
95
  pass
@@ -230,9 +236,16 @@ async def _create_function_executor(
230
236
  )
231
237
  )
232
238
  return (function_executor, result)
233
- except BaseException: # includes asyncio.CancelledError and anything else
239
+ except BaseException:
240
+ fe_destroy_task: asyncio.Task = asyncio.create_task(
241
+ function_executor.destroy(),
242
+ name=f"destroy function executor {function_executor_description.id}",
243
+ )
234
244
  # This await is a cancellation point, need to shield to ensure we destroyed the FE.
235
- await asyncio.shield(function_executor.destroy())
245
+ await shielded_await(
246
+ fe_destroy_task,
247
+ logger,
248
+ )
236
249
  raise
237
250
 
238
251
 
@@ -137,7 +137,7 @@ class FunctionExecutorController:
137
137
  self._tasks: Dict[str, TaskInfo] = {}
138
138
  # Tracking of task execution on Function Executor.
139
139
  self._runnable_tasks: List[TaskInfo] = []
140
- self._running_task: Optional[TaskInfo] = None
140
+ self._running_tasks: List[TaskInfo] = []
141
141
 
142
142
  def function_executor_id(self) -> str:
143
143
  return self._fe_description.id
@@ -407,7 +407,7 @@ class FunctionExecutorController:
407
407
  """Spawns an aio task for the supplied coroutine.
408
408
 
409
409
  The coroutine should return an event that will be added to the FE controller events.
410
- The coroutine should not raise any exceptions including BaseException and asyncio.CancelledError.
410
+ The coroutine should not raise any exceptions including BaseException.
411
411
  on_exception event will be added to the FE controller events if the aio task raises an unexpected exception.
412
412
  on_exception is required to not silently stall the task processing due to an unexpected exception.
413
413
  If task_info is not None, the aio task will be associated with the task_info while the aio task is running.
@@ -422,6 +422,14 @@ class FunctionExecutorController:
422
422
  async def coroutine_wrapper() -> None:
423
423
  try:
424
424
  self._add_event(await aio, source=aio_task_name)
425
+ except asyncio.CancelledError:
426
+ # Workaround for scenario when coroutine_wrapper gets cancelled at `await aio` before aio starts.
427
+ # In this case aio doesn't handle the cancellation and doesn't return the right event.
428
+ # A fix for this is to cancel aio instead of coroutine_wrapper. We'll need to keep
429
+ # references to both coroutine_wrapper and aio, cause event loop uses weak references to
430
+ # tasks. Not doing this for now. Using on_exception is good enough because not started aios don't
431
+ # need to do anything special on cancellation.
432
+ self._add_event(on_exception, source=aio_task_name)
425
433
  except BaseException as e:
426
434
  logger.error(
427
435
  "unexpected exception in aio task",
@@ -530,11 +538,9 @@ class FunctionExecutorController:
530
538
 
531
539
  self._start_termination(
532
540
  fe_termination_reason=FunctionExecutorTerminationReason.FUNCTION_EXECUTOR_TERMINATION_REASON_UNHEALTHY,
533
- allocation_ids_caused_termination=(
534
- []
535
- if self._running_task is None
536
- else [self._running_task.allocation.allocation_id]
537
- ),
541
+ allocation_ids_caused_termination=[
542
+ task.allocation.allocation_id for task in self._running_tasks
543
+ ],
538
544
  )
539
545
 
540
546
  def _handle_event_task_preparation_finished(
@@ -593,7 +599,7 @@ class FunctionExecutorController:
593
599
 
594
600
  if (
595
601
  self._internal_state == _FE_CONTROLLER_STATE.RUNNING
596
- and self._running_task is not None
602
+ and len(self._running_tasks) == self._fe_description.max_concurrency
597
603
  ):
598
604
  return
599
605
 
@@ -618,13 +624,13 @@ class FunctionExecutorController:
618
624
  _FE_CONTROLLER_STATE.TERMINATED,
619
625
  ]:
620
626
  if task_info.output is None:
621
- # The output can be set already by FE startup failure handler.
627
+ # The output could be set already by FE startup failure handler.
622
628
  task_info.output = TaskOutput.function_executor_terminated(
623
629
  task_info.allocation
624
630
  )
625
631
  self._start_task_finalization(task_info)
626
632
  elif self._internal_state == _FE_CONTROLLER_STATE.RUNNING:
627
- self._running_task = task_info
633
+ self._running_tasks.append(task_info)
628
634
  next_aio = run_task_on_function_executor(
629
635
  task_info=task_info,
630
636
  function_executor=self._fe,
@@ -659,7 +665,8 @@ class FunctionExecutorController:
659
665
 
660
666
  Doesn't raise any exceptions. Doesn't block.
661
667
  """
662
- self._running_task = None
668
+ task_info: TaskInfo = event.task_info
669
+ self._running_tasks.remove(task_info)
663
670
 
664
671
  if event.function_executor_termination_reason is None:
665
672
  self._add_event(
@@ -673,7 +680,6 @@ class FunctionExecutorController:
673
680
  ],
674
681
  )
675
682
 
676
- task_info: TaskInfo = event.task_info
677
683
  if task_info.output is None:
678
684
  # `run_task_on_function_executor` guarantees that the output is set in
679
685
  # all cases including task cancellations. If this didn't happen then some
@@ -936,7 +942,7 @@ def _to_data_payload_encoding(
936
942
  return DataPayloadEncoding.DATA_PAYLOAD_ENCODING_UTF8_TEXT
937
943
  else:
938
944
  logger.error(
939
- "Unexpected encoding for SerializedObject",
945
+ "unexpected encoding for SerializedObject",
940
946
  encoding=SerializedObjectEncoding.Name(encoding),
941
947
  )
942
948
  return DataPayloadEncoding.DATA_PAYLOAD_ENCODING_UNKNOWN
@@ -25,6 +25,7 @@ def validate_function_executor_description(
25
25
  validator.required_field("customer_code_timeout_ms")
26
26
  validator.required_field("graph")
27
27
  validator.required_field("resources")
28
+ validator.required_field("max_concurrency")
28
29
 
29
30
  _validate_data_payload(function_executor_description.graph)
30
31
 
@@ -65,7 +65,7 @@ async def prepare_task(
65
65
  logger=logger,
66
66
  )
67
67
  logger.info(
68
- "Task was prepared for execution",
68
+ "task was prepared for execution",
69
69
  duration=time.monotonic() - start_time,
70
70
  )
71
71
  return TaskPreparationFinished(
@@ -76,7 +76,7 @@ async def prepare_task(
76
76
  return TaskPreparationFinished(task_info=task_info, is_success=False)
77
77
  except BaseException as e:
78
78
  logger.error(
79
- "Failed to prepare task for execution",
79
+ "failed to prepare task for execution",
80
80
  exc_info=e,
81
81
  duration=time.monotonic() - start_time,
82
82
  )
@@ -176,7 +176,7 @@ async def run_task_on_function_executor(
176
176
  # This is an unexpected exception; we believe that this
177
177
  # indicates an internal error.
178
178
  logger.error(
179
- "Unexpected internal error during task lifecycle RPC sequence", exc_info=e
179
+ "unexpected internal error during task lifecycle RPC sequence", exc_info=e
180
180
  )
181
181
  task_info.output = TaskOutput.internal_error(
182
182
  allocation=task_info.allocation,
@@ -357,7 +357,7 @@ def _to_task_outcome_code(
357
357
  return TaskOutcomeCode.TASK_OUTCOME_CODE_FAILURE
358
358
  else:
359
359
  logger.warning(
360
- "Unknown TaskOutcomeCode received from Function Executor",
360
+ "unknown TaskOutcomeCode received from Function Executor",
361
361
  value=FETaskOutcomeCode.Name(fe_task_outcome_code),
362
362
  )
363
363
  return TaskOutcomeCode.TASK_OUTCOME_CODE_UNKNOWN
@@ -379,7 +379,7 @@ def _to_task_failure_reason(
379
379
  return TaskFailureReason.TASK_FAILURE_REASON_INTERNAL_ERROR
380
380
  else:
381
381
  logger.warning(
382
- "Unknown TaskFailureReason received from Function Executor",
382
+ "unknown TaskFailureReason received from Function Executor",
383
383
  value=FETaskFailureReason.Name(fe_task_failure_reason),
384
384
  )
385
385
  return TaskFailureReason.TASK_FAILURE_REASON_UNKNOWN
@@ -4,6 +4,7 @@ from typing import Any, List, Optional
4
4
  from indexify.executor.function_executor.function_executor import FunctionExecutor
5
5
  from indexify.proto.executor_api_pb2 import FunctionExecutorTerminationReason
6
6
 
7
+ from .aio_utils import shielded_await
7
8
  from .events import FunctionExecutorTerminated
8
9
 
9
10
 
@@ -18,7 +19,7 @@ async def terminate_function_executor(
18
19
 
19
20
  The supplied lock is used to ensure that if a destroy operation is in progress,
20
21
  then another caller won't return immediately assuming that the destroy is complete
21
- due to its idempotency.
22
+ due to its idempotency. Ignores cancellations while destroying the function executor.
22
23
 
23
24
  Doesn't raise any exceptions.
24
25
  """
@@ -29,9 +30,12 @@ async def terminate_function_executor(
29
30
  logger.info(
30
31
  "destroying function executor",
31
32
  )
33
+ fe_destroy_task: asyncio.Task = asyncio.create_task(
34
+ function_executor.destroy(),
35
+ name="destroy function executor",
36
+ )
32
37
  try:
33
- # This await is a cancellation point, need to shield to ensure we destroyed the FE.
34
- await asyncio.shield(function_executor.destroy())
38
+ await shielded_await(fe_destroy_task, logger)
35
39
  except asyncio.CancelledError:
36
40
  # We actually destroyed the FE so we can return without error.
37
41
  pass
@@ -193,6 +193,8 @@ class ExecutorStateReconciler:
193
193
  timeout=_DESIRED_EXECUTOR_STATES_TIMEOUT_SEC,
194
194
  )
195
195
  except asyncio.TimeoutError:
196
+ # These log lines really help to debug networking issues. When there are
197
+ # no networking issues and the fleet is not idle we don't get excessive logging here.
196
198
  self._logger.info(
197
199
  f"No desired state received from Server within {_DESIRED_EXECUTOR_STATES_TIMEOUT_SEC} sec, recreating the stream to ensure it is healthy"
198
200
  )
@@ -112,7 +112,6 @@ message FunctionExecutorDescription {
112
112
  optional string graph_name = 3;
113
113
  optional string graph_version = 4;
114
114
  optional string function_name = 5;
115
- optional string image_uri = 6;
116
115
  repeated string secret_names = 7;
117
116
  // Timeout for customer code duration during FE creation.
118
117
  optional uint32 customer_code_timeout_ms = 9;
@@ -123,6 +122,7 @@ message FunctionExecutorDescription {
123
122
  // Starts with "file://"" prefix followed by an absolute directory path if the data is stored on a local file system.
124
123
  // Deprecated: most probably going to be removed once external FE logs ingestion pipeline gets implemented.
125
124
  optional string output_payload_uri_prefix = 12;
125
+ optional uint32 max_concurrency = 13;
126
126
  }
127
127
 
128
128
  message FunctionExecutorState {
@@ -0,0 +1,88 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # NO CHECKED-IN PROTOBUF GENCODE
4
+ # source: indexify/proto/executor_api.proto
5
+ # Protobuf Python Version: 6.31.1
6
+ """Generated protocol buffer code."""
7
+ from google.protobuf import descriptor as _descriptor
8
+ from google.protobuf import descriptor_pool as _descriptor_pool
9
+ from google.protobuf import runtime_version as _runtime_version
10
+ from google.protobuf import symbol_database as _symbol_database
11
+ from google.protobuf.internal import builder as _builder
12
+
13
+ _runtime_version.ValidateProtobufRuntimeVersion(
14
+ _runtime_version.Domain.PUBLIC, 6, 31, 1, "", "indexify/proto/executor_api.proto"
15
+ )
16
+ # @@protoc_insertion_point(imports)
17
+
18
+ _sym_db = _symbol_database.Default()
19
+
20
+
21
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(
22
+ b'\n!indexify/proto/executor_api.proto\x12\x0f\x65xecutor_api_pb"\x8b\x02\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\x12\x13\n\x06offset\x18\x07 \x01(\x04H\x05\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_versionB\t\n\x07_offset"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"\xbf\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\x14\n\x0csecret_names\x18\x07 \x03(\t\x12%\n\x18\x63ustomer_code_timeout_ms\x18\t \x01(\rH\x05\x88\x01\x01\x12\x30\n\x05graph\x18\n \x01(\x0b\x32\x1c.executor_api_pb.DataPayloadH\x06\x88\x01\x01\x12\x42\n\tresources\x18\x0b \x01(\x0b\x32*.executor_api_pb.FunctionExecutorResourcesH\x07\x88\x01\x01\x12&\n\x19output_payload_uri_prefix\x18\x0c \x01(\tH\x08\x88\x01\x01\x12\x1c\n\x0fmax_concurrency\x18\r \x01(\rH\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\x1b\n\x19_customer_code_timeout_msB\x08\n\x06_graphB\x0c\n\n_resourcesB\x1c\n\x1a_output_payload_uri_prefixB\x12\n\x10_max_concurrency"\xcf\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\x12)\n!allocation_ids_caused_termination\x18\x04 \x03(\tB\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"\xa0\x05\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\x12\x30\n#invocation_error_payload_uri_prefix\x18\x0f \x01(\tH\x0b\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_policyB&\n$_invocation_error_payload_uri_prefix"\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"\xcc\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;\n\x0coutcome_code\x18\t \x01(\x0e\x32 .executor_api_pb.TaskOutcomeCodeH\x07\x88\x01\x01\x12?\n\x0e\x66\x61ilure_reason\x18\n \x01(\x0e\x32".executor_api_pb.TaskFailureReasonH\x08\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\t\x88\x01\x01\x12\x31\n\x06stderr\x18\x0e \x01(\x0b\x32\x1c.executor_api_pb.DataPayloadH\n\x88\x01\x01\x12\x42\n\x17invocation_error_output\x18\x0f \x01(\x0b\x32\x1c.executor_api_pb.DataPayloadH\x0b\x88\x01\x01\x12"\n\x15\x65xecution_duration_ms\x18\x10 \x01(\x04H\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\x0f\n\r_outcome_codeB\x11\n\x0f_failure_reasonB\t\n\x07_stdoutB\t\n\x07_stderrB\x1a\n\x18_invocation_error_outputB\x18\n\x16_execution_duration_ms*\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
+ )
24
+
25
+ _globals = globals()
26
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
27
+ _builder.BuildTopDescriptorsAndMessages(
28
+ DESCRIPTOR, "indexify.proto.executor_api_pb2", _globals
29
+ )
30
+ if not _descriptor._USE_C_DESCRIPTORS:
31
+ DESCRIPTOR._loaded_options = None
32
+ _globals["_EXECUTORSTATE_LABELSENTRY"]._loaded_options = None
33
+ _globals["_EXECUTORSTATE_LABELSENTRY"]._serialized_options = b"8\001"
34
+ _globals["_DATAPAYLOADENCODING"]._serialized_start = 5528
35
+ _globals["_DATAPAYLOADENCODING"]._serialized_end = 5737
36
+ _globals["_GPUMODEL"]._serialized_start = 5740
37
+ _globals["_GPUMODEL"]._serialized_end = 5954
38
+ _globals["_FUNCTIONEXECUTORSTATUS"]._serialized_start = 5957
39
+ _globals["_FUNCTIONEXECUTORSTATUS"]._serialized_end = 6136
40
+ _globals["_FUNCTIONEXECUTORTERMINATIONREASON"]._serialized_start = 6139
41
+ _globals["_FUNCTIONEXECUTORTERMINATIONREASON"]._serialized_end = 6671
42
+ _globals["_EXECUTORSTATUS"]._serialized_start = 6674
43
+ _globals["_EXECUTORSTATUS"]._serialized_end = 6839
44
+ _globals["_TASKOUTCOMECODE"]._serialized_start = 6841
45
+ _globals["_TASKOUTCOMECODE"]._serialized_end = 6951
46
+ _globals["_TASKFAILUREREASON"]._serialized_start = 6954
47
+ _globals["_TASKFAILUREREASON"]._serialized_end = 7264
48
+ _globals["_DATAPAYLOAD"]._serialized_start = 55
49
+ _globals["_DATAPAYLOAD"]._serialized_end = 322
50
+ _globals["_GPURESOURCES"]._serialized_start = 324
51
+ _globals["_GPURESOURCES"]._serialized_end = 425
52
+ _globals["_HOSTRESOURCES"]._serialized_start = 428
53
+ _globals["_HOSTRESOURCES"]._serialized_end = 622
54
+ _globals["_ALLOWEDFUNCTION"]._serialized_start = 625
55
+ _globals["_ALLOWEDFUNCTION"]._serialized_end = 812
56
+ _globals["_FUNCTIONEXECUTORRESOURCES"]._serialized_start = 815
57
+ _globals["_FUNCTIONEXECUTORRESOURCES"]._serialized_end = 1031
58
+ _globals["_FUNCTIONEXECUTORDESCRIPTION"]._serialized_start = 1034
59
+ _globals["_FUNCTIONEXECUTORDESCRIPTION"]._serialized_end = 1609
60
+ _globals["_FUNCTIONEXECUTORSTATE"]._serialized_start = 1612
61
+ _globals["_FUNCTIONEXECUTORSTATE"]._serialized_end = 1947
62
+ _globals["_FUNCTIONEXECUTORUPDATE"]._serialized_start = 1950
63
+ _globals["_FUNCTIONEXECUTORUPDATE"]._serialized_end = 2218
64
+ _globals["_EXECUTORSTATE"]._serialized_start = 2221
65
+ _globals["_EXECUTORSTATE"]._serialized_end = 2939
66
+ _globals["_EXECUTORSTATE_LABELSENTRY"]._serialized_start = 2752
67
+ _globals["_EXECUTORSTATE_LABELSENTRY"]._serialized_end = 2797
68
+ _globals["_EXECUTORUPDATE"]._serialized_start = 2942
69
+ _globals["_EXECUTORUPDATE"]._serialized_end = 3127
70
+ _globals["_REPORTEXECUTORSTATEREQUEST"]._serialized_start = 3130
71
+ _globals["_REPORTEXECUTORSTATEREQUEST"]._serialized_end = 3321
72
+ _globals["_REPORTEXECUTORSTATERESPONSE"]._serialized_start = 3323
73
+ _globals["_REPORTEXECUTORSTATERESPONSE"]._serialized_end = 3352
74
+ _globals["_TASKRETRYPOLICY"]._serialized_start = 3355
75
+ _globals["_TASKRETRYPOLICY"]._serialized_end = 3562
76
+ _globals["_TASK"]._serialized_start = 3565
77
+ _globals["_TASK"]._serialized_end = 4237
78
+ _globals["_TASKALLOCATION"]._serialized_start = 4240
79
+ _globals["_TASKALLOCATION"]._serialized_end = 4413
80
+ _globals["_GETDESIREDEXECUTORSTATESREQUEST"]._serialized_start = 4415
81
+ _globals["_GETDESIREDEXECUTORSTATESREQUEST"]._serialized_end = 4490
82
+ _globals["_DESIREDEXECUTORSTATE"]._serialized_start = 4493
83
+ _globals["_DESIREDEXECUTORSTATE"]._serialized_end = 4678
84
+ _globals["_TASKRESULT"]._serialized_start = 4681
85
+ _globals["_TASKRESULT"]._serialized_end = 5525
86
+ _globals["_EXECUTORAPI"]._serialized_start = 7267
87
+ _globals["_EXECUTORAPI"]._serialized_end = 7522
88
+ # @@protoc_insertion_point(module_scope)
@@ -232,35 +232,35 @@ class FunctionExecutorDescription(_message.Message):
232
232
  "graph_name",
233
233
  "graph_version",
234
234
  "function_name",
235
- "image_uri",
236
235
  "secret_names",
237
236
  "customer_code_timeout_ms",
238
237
  "graph",
239
238
  "resources",
240
239
  "output_payload_uri_prefix",
240
+ "max_concurrency",
241
241
  )
242
242
  ID_FIELD_NUMBER: _ClassVar[int]
243
243
  NAMESPACE_FIELD_NUMBER: _ClassVar[int]
244
244
  GRAPH_NAME_FIELD_NUMBER: _ClassVar[int]
245
245
  GRAPH_VERSION_FIELD_NUMBER: _ClassVar[int]
246
246
  FUNCTION_NAME_FIELD_NUMBER: _ClassVar[int]
247
- IMAGE_URI_FIELD_NUMBER: _ClassVar[int]
248
247
  SECRET_NAMES_FIELD_NUMBER: _ClassVar[int]
249
248
  CUSTOMER_CODE_TIMEOUT_MS_FIELD_NUMBER: _ClassVar[int]
250
249
  GRAPH_FIELD_NUMBER: _ClassVar[int]
251
250
  RESOURCES_FIELD_NUMBER: _ClassVar[int]
252
251
  OUTPUT_PAYLOAD_URI_PREFIX_FIELD_NUMBER: _ClassVar[int]
252
+ MAX_CONCURRENCY_FIELD_NUMBER: _ClassVar[int]
253
253
  id: str
254
254
  namespace: str
255
255
  graph_name: str
256
256
  graph_version: str
257
257
  function_name: str
258
- image_uri: str
259
258
  secret_names: _containers.RepeatedScalarFieldContainer[str]
260
259
  customer_code_timeout_ms: int
261
260
  graph: DataPayload
262
261
  resources: FunctionExecutorResources
263
262
  output_payload_uri_prefix: str
263
+ max_concurrency: int
264
264
  def __init__(
265
265
  self,
266
266
  id: _Optional[str] = ...,
@@ -268,12 +268,12 @@ class FunctionExecutorDescription(_message.Message):
268
268
  graph_name: _Optional[str] = ...,
269
269
  graph_version: _Optional[str] = ...,
270
270
  function_name: _Optional[str] = ...,
271
- image_uri: _Optional[str] = ...,
272
271
  secret_names: _Optional[_Iterable[str]] = ...,
273
272
  customer_code_timeout_ms: _Optional[int] = ...,
274
273
  graph: _Optional[_Union[DataPayload, _Mapping]] = ...,
275
274
  resources: _Optional[_Union[FunctionExecutorResources, _Mapping]] = ...,
276
275
  output_payload_uri_prefix: _Optional[str] = ...,
276
+ max_concurrency: _Optional[int] = ...,
277
277
  ) -> None: ...
278
278
 
279
279
  class FunctionExecutorState(_message.Message):
@@ -1,88 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- # Generated by the protocol buffer compiler. DO NOT EDIT!
3
- # NO CHECKED-IN PROTOBUF GENCODE
4
- # source: indexify/proto/executor_api.proto
5
- # Protobuf Python Version: 6.31.1
6
- """Generated protocol buffer code."""
7
- from google.protobuf import descriptor as _descriptor
8
- from google.protobuf import descriptor_pool as _descriptor_pool
9
- from google.protobuf import runtime_version as _runtime_version
10
- from google.protobuf import symbol_database as _symbol_database
11
- from google.protobuf.internal import builder as _builder
12
-
13
- _runtime_version.ValidateProtobufRuntimeVersion(
14
- _runtime_version.Domain.PUBLIC, 6, 31, 1, "", "indexify/proto/executor_api.proto"
15
- )
16
- # @@protoc_insertion_point(imports)
17
-
18
- _sym_db = _symbol_database.Default()
19
-
20
-
21
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(
22
- b'\n!indexify/proto/executor_api.proto\x12\x0f\x65xecutor_api_pb"\x8b\x02\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\x12\x13\n\x06offset\x18\x07 \x01(\x04H\x05\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_versionB\t\n\x07_offset"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"\xcf\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\x12)\n!allocation_ids_caused_termination\x18\x04 \x03(\tB\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"\xa0\x05\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\x12\x30\n#invocation_error_payload_uri_prefix\x18\x0f \x01(\tH\x0b\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_policyB&\n$_invocation_error_payload_uri_prefix"\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"\xcc\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;\n\x0coutcome_code\x18\t \x01(\x0e\x32 .executor_api_pb.TaskOutcomeCodeH\x07\x88\x01\x01\x12?\n\x0e\x66\x61ilure_reason\x18\n \x01(\x0e\x32".executor_api_pb.TaskFailureReasonH\x08\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\t\x88\x01\x01\x12\x31\n\x06stderr\x18\x0e \x01(\x0b\x32\x1c.executor_api_pb.DataPayloadH\n\x88\x01\x01\x12\x42\n\x17invocation_error_output\x18\x0f \x01(\x0b\x32\x1c.executor_api_pb.DataPayloadH\x0b\x88\x01\x01\x12"\n\x15\x65xecution_duration_ms\x18\x10 \x01(\x04H\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\x0f\n\r_outcome_codeB\x11\n\x0f_failure_reasonB\t\n\x07_stdoutB\t\n\x07_stderrB\x1a\n\x18_invocation_error_outputB\x18\n\x16_execution_duration_ms*\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
- )
24
-
25
- _globals = globals()
26
- _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
27
- _builder.BuildTopDescriptorsAndMessages(
28
- DESCRIPTOR, "indexify.proto.executor_api_pb2", _globals
29
- )
30
- if not _descriptor._USE_C_DESCRIPTORS:
31
- DESCRIPTOR._loaded_options = None
32
- _globals["_EXECUTORSTATE_LABELSENTRY"]._loaded_options = None
33
- _globals["_EXECUTORSTATE_LABELSENTRY"]._serialized_options = b"8\001"
34
- _globals["_DATAPAYLOADENCODING"]._serialized_start = 5516
35
- _globals["_DATAPAYLOADENCODING"]._serialized_end = 5725
36
- _globals["_GPUMODEL"]._serialized_start = 5728
37
- _globals["_GPUMODEL"]._serialized_end = 5942
38
- _globals["_FUNCTIONEXECUTORSTATUS"]._serialized_start = 5945
39
- _globals["_FUNCTIONEXECUTORSTATUS"]._serialized_end = 6124
40
- _globals["_FUNCTIONEXECUTORTERMINATIONREASON"]._serialized_start = 6127
41
- _globals["_FUNCTIONEXECUTORTERMINATIONREASON"]._serialized_end = 6659
42
- _globals["_EXECUTORSTATUS"]._serialized_start = 6662
43
- _globals["_EXECUTORSTATUS"]._serialized_end = 6827
44
- _globals["_TASKOUTCOMECODE"]._serialized_start = 6829
45
- _globals["_TASKOUTCOMECODE"]._serialized_end = 6939
46
- _globals["_TASKFAILUREREASON"]._serialized_start = 6942
47
- _globals["_TASKFAILUREREASON"]._serialized_end = 7252
48
- _globals["_DATAPAYLOAD"]._serialized_start = 55
49
- _globals["_DATAPAYLOAD"]._serialized_end = 322
50
- _globals["_GPURESOURCES"]._serialized_start = 324
51
- _globals["_GPURESOURCES"]._serialized_end = 425
52
- _globals["_HOSTRESOURCES"]._serialized_start = 428
53
- _globals["_HOSTRESOURCES"]._serialized_end = 622
54
- _globals["_ALLOWEDFUNCTION"]._serialized_start = 625
55
- _globals["_ALLOWEDFUNCTION"]._serialized_end = 812
56
- _globals["_FUNCTIONEXECUTORRESOURCES"]._serialized_start = 815
57
- _globals["_FUNCTIONEXECUTORRESOURCES"]._serialized_end = 1031
58
- _globals["_FUNCTIONEXECUTORDESCRIPTION"]._serialized_start = 1034
59
- _globals["_FUNCTIONEXECUTORDESCRIPTION"]._serialized_end = 1597
60
- _globals["_FUNCTIONEXECUTORSTATE"]._serialized_start = 1600
61
- _globals["_FUNCTIONEXECUTORSTATE"]._serialized_end = 1935
62
- _globals["_FUNCTIONEXECUTORUPDATE"]._serialized_start = 1938
63
- _globals["_FUNCTIONEXECUTORUPDATE"]._serialized_end = 2206
64
- _globals["_EXECUTORSTATE"]._serialized_start = 2209
65
- _globals["_EXECUTORSTATE"]._serialized_end = 2927
66
- _globals["_EXECUTORSTATE_LABELSENTRY"]._serialized_start = 2740
67
- _globals["_EXECUTORSTATE_LABELSENTRY"]._serialized_end = 2785
68
- _globals["_EXECUTORUPDATE"]._serialized_start = 2930
69
- _globals["_EXECUTORUPDATE"]._serialized_end = 3115
70
- _globals["_REPORTEXECUTORSTATEREQUEST"]._serialized_start = 3118
71
- _globals["_REPORTEXECUTORSTATEREQUEST"]._serialized_end = 3309
72
- _globals["_REPORTEXECUTORSTATERESPONSE"]._serialized_start = 3311
73
- _globals["_REPORTEXECUTORSTATERESPONSE"]._serialized_end = 3340
74
- _globals["_TASKRETRYPOLICY"]._serialized_start = 3343
75
- _globals["_TASKRETRYPOLICY"]._serialized_end = 3550
76
- _globals["_TASK"]._serialized_start = 3553
77
- _globals["_TASK"]._serialized_end = 4225
78
- _globals["_TASKALLOCATION"]._serialized_start = 4228
79
- _globals["_TASKALLOCATION"]._serialized_end = 4401
80
- _globals["_GETDESIREDEXECUTORSTATESREQUEST"]._serialized_start = 4403
81
- _globals["_GETDESIREDEXECUTORSTATESREQUEST"]._serialized_end = 4478
82
- _globals["_DESIREDEXECUTORSTATE"]._serialized_start = 4481
83
- _globals["_DESIREDEXECUTORSTATE"]._serialized_end = 4666
84
- _globals["_TASKRESULT"]._serialized_start = 4669
85
- _globals["_TASKRESULT"]._serialized_end = 5513
86
- _globals["_EXECUTORAPI"]._serialized_start = 7255
87
- _globals["_EXECUTORAPI"]._serialized_end = 7510
88
- # @@protoc_insertion_point(module_scope)
File without changes