temporalio 0.1.1 → 0.3.0

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 (628) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +2 -0
  3. data/Cargo.lock +4324 -0
  4. data/Cargo.toml +25 -0
  5. data/Gemfile +20 -0
  6. data/LICENSE +16 -15
  7. data/README.md +985 -183
  8. data/Rakefile +101 -0
  9. data/ext/Cargo.toml +26 -0
  10. data/lib/temporalio/activity/complete_async_error.rb +11 -0
  11. data/lib/temporalio/activity/context.rb +86 -78
  12. data/lib/temporalio/activity/definition.rb +175 -0
  13. data/lib/temporalio/activity/info.rb +44 -47
  14. data/lib/temporalio/activity.rb +8 -81
  15. data/lib/temporalio/api/activity/v1/message.rb +25 -0
  16. data/lib/temporalio/api/batch/v1/message.rb +31 -0
  17. data/lib/temporalio/api/cloud/account/v1/message.rb +28 -0
  18. data/lib/temporalio/api/cloud/cloudservice/v1/request_response.rb +126 -0
  19. data/lib/temporalio/api/cloud/cloudservice/v1/service.rb +25 -0
  20. data/lib/temporalio/api/cloud/cloudservice.rb +3 -0
  21. data/lib/temporalio/api/cloud/identity/v1/message.rb +41 -0
  22. data/lib/temporalio/api/cloud/namespace/v1/message.rb +42 -0
  23. data/lib/temporalio/api/cloud/nexus/v1/message.rb +31 -0
  24. data/lib/temporalio/api/cloud/operation/v1/message.rb +28 -0
  25. data/lib/temporalio/api/cloud/region/v1/message.rb +24 -0
  26. data/lib/temporalio/api/cloud/resource/v1/message.rb +23 -0
  27. data/lib/temporalio/api/cloud/sink/v1/message.rb +24 -0
  28. data/lib/temporalio/api/cloud/usage/v1/message.rb +31 -0
  29. data/lib/temporalio/api/command/v1/message.rb +46 -0
  30. data/lib/temporalio/api/common/v1/grpc_status.rb +23 -0
  31. data/lib/temporalio/api/common/v1/message.rb +47 -0
  32. data/lib/temporalio/api/enums/v1/batch_operation.rb +22 -0
  33. data/lib/temporalio/api/enums/v1/command_type.rb +21 -0
  34. data/lib/temporalio/api/enums/v1/common.rb +26 -0
  35. data/lib/temporalio/api/enums/v1/event_type.rb +21 -0
  36. data/lib/temporalio/api/enums/v1/failed_cause.rb +26 -0
  37. data/lib/temporalio/api/enums/v1/namespace.rb +23 -0
  38. data/lib/temporalio/api/enums/v1/query.rb +22 -0
  39. data/lib/temporalio/api/enums/v1/reset.rb +23 -0
  40. data/lib/temporalio/api/enums/v1/schedule.rb +21 -0
  41. data/lib/temporalio/api/enums/v1/task_queue.rb +25 -0
  42. data/lib/temporalio/api/enums/v1/update.rb +22 -0
  43. data/lib/temporalio/api/enums/v1/workflow.rb +30 -0
  44. data/lib/temporalio/api/errordetails/v1/message.rb +42 -0
  45. data/lib/temporalio/api/export/v1/message.rb +24 -0
  46. data/lib/temporalio/api/failure/v1/message.rb +35 -0
  47. data/lib/temporalio/api/filter/v1/message.rb +27 -0
  48. data/lib/temporalio/api/history/v1/message.rb +90 -0
  49. data/lib/temporalio/api/namespace/v1/message.rb +31 -0
  50. data/lib/temporalio/api/nexus/v1/message.rb +40 -0
  51. data/lib/temporalio/api/operatorservice/v1/request_response.rb +49 -0
  52. data/lib/temporalio/api/operatorservice/v1/service.rb +23 -0
  53. data/lib/temporalio/api/operatorservice.rb +3 -0
  54. data/lib/temporalio/api/payload_visitor.rb +1513 -0
  55. data/lib/temporalio/api/protocol/v1/message.rb +23 -0
  56. data/lib/temporalio/api/query/v1/message.rb +27 -0
  57. data/lib/temporalio/api/replication/v1/message.rb +26 -0
  58. data/lib/temporalio/api/schedule/v1/message.rb +43 -0
  59. data/lib/temporalio/api/sdk/v1/enhanced_stack_trace.rb +25 -0
  60. data/lib/temporalio/api/sdk/v1/task_complete_metadata.rb +21 -0
  61. data/lib/temporalio/api/sdk/v1/user_metadata.rb +23 -0
  62. data/lib/temporalio/api/sdk/v1/workflow_metadata.rb +23 -0
  63. data/lib/temporalio/api/taskqueue/v1/message.rb +45 -0
  64. data/lib/{gen/temporal/api/testservice/v1/request_response_pb.rb → temporalio/api/testservice/v1/request_response.rb} +6 -24
  65. data/lib/temporalio/api/testservice/v1/service.rb +23 -0
  66. data/lib/temporalio/api/update/v1/message.rb +33 -0
  67. data/lib/temporalio/api/version/v1/message.rb +26 -0
  68. data/lib/temporalio/api/workflow/v1/message.rb +43 -0
  69. data/lib/temporalio/api/workflowservice/v1/request_response.rb +204 -0
  70. data/lib/temporalio/api/workflowservice/v1/service.rb +23 -0
  71. data/lib/temporalio/api/workflowservice.rb +3 -0
  72. data/lib/temporalio/api.rb +14 -0
  73. data/lib/temporalio/cancellation.rb +170 -0
  74. data/lib/temporalio/client/activity_id_reference.rb +32 -0
  75. data/lib/temporalio/client/async_activity_handle.rb +85 -0
  76. data/lib/temporalio/client/connection/cloud_service.rb +726 -0
  77. data/lib/temporalio/client/connection/operator_service.rb +201 -0
  78. data/lib/temporalio/client/connection/service.rb +42 -0
  79. data/lib/temporalio/client/connection/test_service.rb +111 -0
  80. data/lib/temporalio/client/connection/workflow_service.rb +1041 -0
  81. data/lib/temporalio/client/connection.rb +316 -0
  82. data/lib/temporalio/client/interceptor.rb +416 -0
  83. data/lib/temporalio/client/schedule.rb +967 -0
  84. data/lib/temporalio/client/schedule_handle.rb +126 -0
  85. data/lib/temporalio/client/workflow_execution.rb +100 -0
  86. data/lib/temporalio/client/workflow_execution_count.rb +36 -0
  87. data/lib/temporalio/client/workflow_execution_status.rb +18 -0
  88. data/lib/temporalio/client/workflow_handle.rb +326 -180
  89. data/lib/temporalio/client/workflow_query_reject_condition.rb +14 -0
  90. data/lib/temporalio/client/workflow_update_handle.rb +65 -0
  91. data/lib/temporalio/client/workflow_update_wait_stage.rb +17 -0
  92. data/lib/temporalio/client.rb +447 -94
  93. data/lib/temporalio/common_enums.rb +41 -0
  94. data/lib/temporalio/converters/data_converter.rb +99 -0
  95. data/lib/temporalio/converters/failure_converter.rb +202 -0
  96. data/lib/temporalio/converters/payload_codec.rb +26 -0
  97. data/lib/temporalio/converters/payload_converter/binary_null.rb +34 -0
  98. data/lib/temporalio/converters/payload_converter/binary_plain.rb +35 -0
  99. data/lib/temporalio/converters/payload_converter/binary_protobuf.rb +42 -0
  100. data/lib/temporalio/converters/payload_converter/composite.rb +66 -0
  101. data/lib/temporalio/converters/payload_converter/encoding.rb +35 -0
  102. data/lib/temporalio/converters/payload_converter/json_plain.rb +44 -0
  103. data/lib/temporalio/converters/payload_converter/json_protobuf.rb +41 -0
  104. data/lib/temporalio/converters/payload_converter.rb +71 -0
  105. data/lib/temporalio/converters/raw_value.rb +20 -0
  106. data/lib/temporalio/converters.rb +9 -0
  107. data/lib/temporalio/error/failure.rb +119 -94
  108. data/lib/temporalio/error.rb +155 -0
  109. data/lib/temporalio/internal/bridge/api/activity_result/activity_result.rb +34 -0
  110. data/lib/temporalio/internal/bridge/api/activity_task/activity_task.rb +31 -0
  111. data/lib/temporalio/internal/bridge/api/child_workflow/child_workflow.rb +33 -0
  112. data/lib/temporalio/internal/bridge/api/common/common.rb +26 -0
  113. data/lib/temporalio/internal/bridge/api/core_interface.rb +40 -0
  114. data/lib/temporalio/internal/bridge/api/external_data/external_data.rb +27 -0
  115. data/lib/temporalio/internal/bridge/api/nexus/nexus.rb +33 -0
  116. data/lib/temporalio/internal/bridge/api/workflow_activation/workflow_activation.rb +56 -0
  117. data/lib/temporalio/internal/bridge/api/workflow_commands/workflow_commands.rb +57 -0
  118. data/lib/temporalio/internal/bridge/api/workflow_completion/workflow_completion.rb +30 -0
  119. data/lib/temporalio/internal/bridge/api.rb +3 -0
  120. data/lib/temporalio/internal/bridge/client.rb +95 -0
  121. data/lib/temporalio/internal/bridge/runtime.rb +53 -0
  122. data/lib/temporalio/internal/bridge/testing.rb +66 -0
  123. data/lib/temporalio/internal/bridge/worker.rb +85 -0
  124. data/lib/temporalio/internal/bridge.rb +36 -0
  125. data/lib/temporalio/internal/client/implementation.rb +700 -0
  126. data/lib/temporalio/internal/metric.rb +122 -0
  127. data/lib/temporalio/internal/proto_utils.rb +133 -0
  128. data/lib/temporalio/internal/worker/activity_worker.rb +373 -0
  129. data/lib/temporalio/internal/worker/multi_runner.rb +213 -0
  130. data/lib/temporalio/internal/worker/workflow_instance/child_workflow_handle.rb +54 -0
  131. data/lib/temporalio/internal/worker/workflow_instance/context.rb +329 -0
  132. data/lib/temporalio/internal/worker/workflow_instance/details.rb +44 -0
  133. data/lib/temporalio/internal/worker/workflow_instance/external_workflow_handle.rb +32 -0
  134. data/lib/temporalio/internal/worker/workflow_instance/externally_immutable_hash.rb +22 -0
  135. data/lib/temporalio/internal/worker/workflow_instance/handler_execution.rb +25 -0
  136. data/lib/temporalio/internal/worker/workflow_instance/handler_hash.rb +41 -0
  137. data/lib/temporalio/internal/worker/workflow_instance/illegal_call_tracer.rb +97 -0
  138. data/lib/temporalio/internal/worker/workflow_instance/inbound_implementation.rb +62 -0
  139. data/lib/temporalio/internal/worker/workflow_instance/outbound_implementation.rb +415 -0
  140. data/lib/temporalio/internal/worker/workflow_instance/replay_safe_logger.rb +37 -0
  141. data/lib/temporalio/internal/worker/workflow_instance/replay_safe_metric.rb +40 -0
  142. data/lib/temporalio/internal/worker/workflow_instance/scheduler.rb +163 -0
  143. data/lib/temporalio/internal/worker/workflow_instance.rb +730 -0
  144. data/lib/temporalio/internal/worker/workflow_worker.rb +196 -0
  145. data/lib/temporalio/internal.rb +7 -0
  146. data/lib/temporalio/metric.rb +109 -0
  147. data/lib/temporalio/retry_policy.rb +55 -73
  148. data/lib/temporalio/runtime.rb +302 -13
  149. data/lib/temporalio/scoped_logger.rb +96 -0
  150. data/lib/temporalio/search_attributes.rb +343 -0
  151. data/lib/temporalio/testing/activity_environment.rb +132 -0
  152. data/lib/temporalio/testing/workflow_environment.rb +345 -74
  153. data/lib/temporalio/testing.rb +4 -169
  154. data/lib/temporalio/version.rb +3 -1
  155. data/lib/temporalio/worker/activity_executor/fiber.rb +49 -0
  156. data/lib/temporalio/worker/activity_executor/thread_pool.rb +46 -0
  157. data/lib/temporalio/worker/activity_executor.rb +55 -0
  158. data/lib/temporalio/worker/interceptor.rb +362 -0
  159. data/lib/temporalio/worker/thread_pool.rb +237 -0
  160. data/lib/temporalio/worker/tuner.rb +151 -0
  161. data/lib/temporalio/worker/workflow_executor/thread_pool.rb +230 -0
  162. data/lib/temporalio/worker/workflow_executor.rb +26 -0
  163. data/lib/temporalio/worker.rb +554 -161
  164. data/lib/temporalio/workflow/activity_cancellation_type.rb +20 -0
  165. data/lib/temporalio/workflow/child_workflow_cancellation_type.rb +21 -0
  166. data/lib/temporalio/workflow/child_workflow_handle.rb +43 -0
  167. data/lib/temporalio/workflow/definition.rb +566 -0
  168. data/lib/temporalio/workflow/external_workflow_handle.rb +41 -0
  169. data/lib/temporalio/workflow/future.rb +117 -104
  170. data/lib/temporalio/workflow/handler_unfinished_policy.rb +13 -0
  171. data/lib/temporalio/workflow/info.rb +63 -57
  172. data/lib/temporalio/workflow/parent_close_policy.rb +19 -0
  173. data/lib/temporalio/workflow/update_info.rb +20 -0
  174. data/lib/temporalio/workflow.rb +523 -0
  175. data/lib/temporalio/workflow_history.rb +22 -0
  176. data/lib/temporalio.rb +6 -7
  177. data/temporalio.gemspec +20 -39
  178. metadata +171 -710
  179. data/bridge/Cargo.lock +0 -2997
  180. data/bridge/Cargo.toml +0 -29
  181. data/bridge/sdk-core/ARCHITECTURE.md +0 -76
  182. data/bridge/sdk-core/Cargo.toml +0 -2
  183. data/bridge/sdk-core/LICENSE.txt +0 -23
  184. data/bridge/sdk-core/README.md +0 -117
  185. data/bridge/sdk-core/arch_docs/diagrams/README.md +0 -10
  186. data/bridge/sdk-core/arch_docs/diagrams/sticky_queues.puml +0 -40
  187. data/bridge/sdk-core/arch_docs/diagrams/workflow_internals.svg +0 -1
  188. data/bridge/sdk-core/arch_docs/sticky_queues.md +0 -51
  189. data/bridge/sdk-core/client/Cargo.toml +0 -40
  190. data/bridge/sdk-core/client/LICENSE.txt +0 -23
  191. data/bridge/sdk-core/client/src/lib.rs +0 -1462
  192. data/bridge/sdk-core/client/src/metrics.rs +0 -174
  193. data/bridge/sdk-core/client/src/raw.rs +0 -932
  194. data/bridge/sdk-core/client/src/retry.rs +0 -763
  195. data/bridge/sdk-core/client/src/workflow_handle/mod.rs +0 -185
  196. data/bridge/sdk-core/core/Cargo.toml +0 -129
  197. data/bridge/sdk-core/core/LICENSE.txt +0 -23
  198. data/bridge/sdk-core/core/benches/workflow_replay.rs +0 -76
  199. data/bridge/sdk-core/core/src/abstractions.rs +0 -355
  200. data/bridge/sdk-core/core/src/core_tests/activity_tasks.rs +0 -1049
  201. data/bridge/sdk-core/core/src/core_tests/child_workflows.rs +0 -221
  202. data/bridge/sdk-core/core/src/core_tests/determinism.rs +0 -270
  203. data/bridge/sdk-core/core/src/core_tests/local_activities.rs +0 -1046
  204. data/bridge/sdk-core/core/src/core_tests/mod.rs +0 -100
  205. data/bridge/sdk-core/core/src/core_tests/queries.rs +0 -893
  206. data/bridge/sdk-core/core/src/core_tests/replay_flag.rs +0 -65
  207. data/bridge/sdk-core/core/src/core_tests/workers.rs +0 -257
  208. data/bridge/sdk-core/core/src/core_tests/workflow_cancels.rs +0 -124
  209. data/bridge/sdk-core/core/src/core_tests/workflow_tasks.rs +0 -2433
  210. data/bridge/sdk-core/core/src/ephemeral_server/mod.rs +0 -609
  211. data/bridge/sdk-core/core/src/internal_flags.rs +0 -136
  212. data/bridge/sdk-core/core/src/lib.rs +0 -289
  213. data/bridge/sdk-core/core/src/pollers/mod.rs +0 -54
  214. data/bridge/sdk-core/core/src/pollers/poll_buffer.rs +0 -297
  215. data/bridge/sdk-core/core/src/protosext/mod.rs +0 -428
  216. data/bridge/sdk-core/core/src/replay/mod.rs +0 -215
  217. data/bridge/sdk-core/core/src/retry_logic.rs +0 -202
  218. data/bridge/sdk-core/core/src/telemetry/log_export.rs +0 -190
  219. data/bridge/sdk-core/core/src/telemetry/metrics.rs +0 -462
  220. data/bridge/sdk-core/core/src/telemetry/mod.rs +0 -423
  221. data/bridge/sdk-core/core/src/telemetry/prometheus_server.rs +0 -83
  222. data/bridge/sdk-core/core/src/test_help/mod.rs +0 -939
  223. data/bridge/sdk-core/core/src/worker/activities/activity_heartbeat_manager.rs +0 -536
  224. data/bridge/sdk-core/core/src/worker/activities/activity_task_poller_stream.rs +0 -89
  225. data/bridge/sdk-core/core/src/worker/activities/local_activities.rs +0 -1278
  226. data/bridge/sdk-core/core/src/worker/activities.rs +0 -557
  227. data/bridge/sdk-core/core/src/worker/client/mocks.rs +0 -107
  228. data/bridge/sdk-core/core/src/worker/client.rs +0 -389
  229. data/bridge/sdk-core/core/src/worker/mod.rs +0 -677
  230. data/bridge/sdk-core/core/src/worker/workflow/bridge.rs +0 -35
  231. data/bridge/sdk-core/core/src/worker/workflow/driven_workflow.rs +0 -99
  232. data/bridge/sdk-core/core/src/worker/workflow/history_update.rs +0 -1111
  233. data/bridge/sdk-core/core/src/worker/workflow/machines/activity_state_machine.rs +0 -964
  234. data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_external_state_machine.rs +0 -294
  235. data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +0 -168
  236. data/bridge/sdk-core/core/src/worker/workflow/machines/child_workflow_state_machine.rs +0 -918
  237. data/bridge/sdk-core/core/src/worker/workflow/machines/complete_workflow_state_machine.rs +0 -137
  238. data/bridge/sdk-core/core/src/worker/workflow/machines/continue_as_new_workflow_state_machine.rs +0 -158
  239. data/bridge/sdk-core/core/src/worker/workflow/machines/fail_workflow_state_machine.rs +0 -130
  240. data/bridge/sdk-core/core/src/worker/workflow/machines/local_activity_state_machine.rs +0 -1525
  241. data/bridge/sdk-core/core/src/worker/workflow/machines/mod.rs +0 -324
  242. data/bridge/sdk-core/core/src/worker/workflow/machines/modify_workflow_properties_state_machine.rs +0 -179
  243. data/bridge/sdk-core/core/src/worker/workflow/machines/patch_state_machine.rs +0 -659
  244. data/bridge/sdk-core/core/src/worker/workflow/machines/signal_external_state_machine.rs +0 -439
  245. data/bridge/sdk-core/core/src/worker/workflow/machines/timer_state_machine.rs +0 -435
  246. data/bridge/sdk-core/core/src/worker/workflow/machines/transition_coverage.rs +0 -175
  247. data/bridge/sdk-core/core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +0 -249
  248. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines/local_acts.rs +0 -85
  249. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines.rs +0 -1280
  250. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_task_state_machine.rs +0 -269
  251. data/bridge/sdk-core/core/src/worker/workflow/managed_run/managed_wf_test.rs +0 -213
  252. data/bridge/sdk-core/core/src/worker/workflow/managed_run.rs +0 -1305
  253. data/bridge/sdk-core/core/src/worker/workflow/mod.rs +0 -1276
  254. data/bridge/sdk-core/core/src/worker/workflow/run_cache.rs +0 -128
  255. data/bridge/sdk-core/core/src/worker/workflow/wft_extraction.rs +0 -125
  256. data/bridge/sdk-core/core/src/worker/workflow/wft_poller.rs +0 -85
  257. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream/saved_wf_inputs.rs +0 -117
  258. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream/tonic_status_serde.rs +0 -24
  259. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream.rs +0 -715
  260. data/bridge/sdk-core/core-api/Cargo.toml +0 -33
  261. data/bridge/sdk-core/core-api/LICENSE.txt +0 -23
  262. data/bridge/sdk-core/core-api/src/errors.rs +0 -62
  263. data/bridge/sdk-core/core-api/src/lib.rs +0 -113
  264. data/bridge/sdk-core/core-api/src/telemetry.rs +0 -141
  265. data/bridge/sdk-core/core-api/src/worker.rs +0 -161
  266. data/bridge/sdk-core/etc/deps.svg +0 -162
  267. data/bridge/sdk-core/etc/dynamic-config.yaml +0 -2
  268. data/bridge/sdk-core/etc/otel-collector-config.yaml +0 -36
  269. data/bridge/sdk-core/etc/prometheus.yaml +0 -6
  270. data/bridge/sdk-core/etc/regen-depgraph.sh +0 -5
  271. data/bridge/sdk-core/fsm/Cargo.toml +0 -18
  272. data/bridge/sdk-core/fsm/LICENSE.txt +0 -23
  273. data/bridge/sdk-core/fsm/README.md +0 -3
  274. data/bridge/sdk-core/fsm/rustfsm_procmacro/Cargo.toml +0 -27
  275. data/bridge/sdk-core/fsm/rustfsm_procmacro/LICENSE.txt +0 -23
  276. data/bridge/sdk-core/fsm/rustfsm_procmacro/src/lib.rs +0 -650
  277. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/progress.rs +0 -8
  278. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dupe_transitions_fail.rs +0 -18
  279. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dupe_transitions_fail.stderr +0 -12
  280. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dynamic_dest_pass.rs +0 -41
  281. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/forgot_name_fail.rs +0 -14
  282. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/forgot_name_fail.stderr +0 -11
  283. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/handler_arg_pass.rs +0 -32
  284. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/handler_pass.rs +0 -31
  285. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/medium_complex_pass.rs +0 -46
  286. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.rs +0 -29
  287. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.stderr +0 -12
  288. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/simple_pass.rs +0 -32
  289. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/struct_event_variant_fail.rs +0 -18
  290. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/struct_event_variant_fail.stderr +0 -5
  291. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_more_item_event_variant_fail.rs +0 -11
  292. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_more_item_event_variant_fail.stderr +0 -5
  293. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_zero_item_event_variant_fail.rs +0 -11
  294. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_zero_item_event_variant_fail.stderr +0 -5
  295. data/bridge/sdk-core/fsm/rustfsm_trait/Cargo.toml +0 -14
  296. data/bridge/sdk-core/fsm/rustfsm_trait/LICENSE.txt +0 -23
  297. data/bridge/sdk-core/fsm/rustfsm_trait/src/lib.rs +0 -254
  298. data/bridge/sdk-core/fsm/src/lib.rs +0 -2
  299. data/bridge/sdk-core/histories/evict_while_la_running_no_interference-16_history.bin +0 -0
  300. data/bridge/sdk-core/histories/evict_while_la_running_no_interference-23_history.bin +0 -0
  301. data/bridge/sdk-core/histories/evict_while_la_running_no_interference-85_history.bin +0 -0
  302. data/bridge/sdk-core/histories/fail_wf_task.bin +0 -0
  303. data/bridge/sdk-core/histories/timer_workflow_history.bin +0 -0
  304. data/bridge/sdk-core/integ-with-otel.sh +0 -7
  305. data/bridge/sdk-core/protos/api_upstream/README.md +0 -9
  306. data/bridge/sdk-core/protos/api_upstream/api-linter.yaml +0 -40
  307. data/bridge/sdk-core/protos/api_upstream/buf.yaml +0 -9
  308. data/bridge/sdk-core/protos/api_upstream/build/go.mod +0 -7
  309. data/bridge/sdk-core/protos/api_upstream/build/go.sum +0 -5
  310. data/bridge/sdk-core/protos/api_upstream/build/tools.go +0 -29
  311. data/bridge/sdk-core/protos/api_upstream/dependencies/gogoproto/gogo.proto +0 -141
  312. data/bridge/sdk-core/protos/api_upstream/go.mod +0 -6
  313. data/bridge/sdk-core/protos/api_upstream/temporal/api/batch/v1/message.proto +0 -89
  314. data/bridge/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +0 -248
  315. data/bridge/sdk-core/protos/api_upstream/temporal/api/common/v1/message.proto +0 -123
  316. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/batch_operation.proto +0 -47
  317. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/command_type.proto +0 -52
  318. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/common.proto +0 -56
  319. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/event_type.proto +0 -170
  320. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +0 -123
  321. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/namespace.proto +0 -51
  322. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/query.proto +0 -50
  323. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/reset.proto +0 -41
  324. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/schedule.proto +0 -60
  325. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +0 -59
  326. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/update.proto +0 -56
  327. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/workflow.proto +0 -122
  328. data/bridge/sdk-core/protos/api_upstream/temporal/api/errordetails/v1/message.proto +0 -108
  329. data/bridge/sdk-core/protos/api_upstream/temporal/api/failure/v1/message.proto +0 -114
  330. data/bridge/sdk-core/protos/api_upstream/temporal/api/filter/v1/message.proto +0 -56
  331. data/bridge/sdk-core/protos/api_upstream/temporal/api/history/v1/message.proto +0 -787
  332. data/bridge/sdk-core/protos/api_upstream/temporal/api/namespace/v1/message.proto +0 -99
  333. data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +0 -124
  334. data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/service.proto +0 -80
  335. data/bridge/sdk-core/protos/api_upstream/temporal/api/protocol/v1/message.proto +0 -57
  336. data/bridge/sdk-core/protos/api_upstream/temporal/api/query/v1/message.proto +0 -61
  337. data/bridge/sdk-core/protos/api_upstream/temporal/api/replication/v1/message.proto +0 -55
  338. data/bridge/sdk-core/protos/api_upstream/temporal/api/schedule/v1/message.proto +0 -379
  339. data/bridge/sdk-core/protos/api_upstream/temporal/api/sdk/v1/task_complete_metadata.proto +0 -63
  340. data/bridge/sdk-core/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +0 -108
  341. data/bridge/sdk-core/protos/api_upstream/temporal/api/update/v1/message.proto +0 -111
  342. data/bridge/sdk-core/protos/api_upstream/temporal/api/version/v1/message.proto +0 -59
  343. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflow/v1/message.proto +0 -146
  344. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +0 -1199
  345. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +0 -415
  346. data/bridge/sdk-core/protos/grpc/health/v1/health.proto +0 -63
  347. data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_result/activity_result.proto +0 -79
  348. data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_task/activity_task.proto +0 -80
  349. data/bridge/sdk-core/protos/local/temporal/sdk/core/child_workflow/child_workflow.proto +0 -78
  350. data/bridge/sdk-core/protos/local/temporal/sdk/core/common/common.proto +0 -16
  351. data/bridge/sdk-core/protos/local/temporal/sdk/core/core_interface.proto +0 -31
  352. data/bridge/sdk-core/protos/local/temporal/sdk/core/external_data/external_data.proto +0 -31
  353. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +0 -270
  354. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +0 -305
  355. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_completion/workflow_completion.proto +0 -35
  356. data/bridge/sdk-core/protos/testsrv_upstream/api-linter.yaml +0 -38
  357. data/bridge/sdk-core/protos/testsrv_upstream/buf.yaml +0 -13
  358. data/bridge/sdk-core/protos/testsrv_upstream/dependencies/gogoproto/gogo.proto +0 -141
  359. data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/request_response.proto +0 -63
  360. data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/service.proto +0 -90
  361. data/bridge/sdk-core/rustfmt.toml +0 -1
  362. data/bridge/sdk-core/sdk/Cargo.toml +0 -48
  363. data/bridge/sdk-core/sdk/LICENSE.txt +0 -23
  364. data/bridge/sdk-core/sdk/src/activity_context.rs +0 -230
  365. data/bridge/sdk-core/sdk/src/app_data.rs +0 -37
  366. data/bridge/sdk-core/sdk/src/interceptors.rs +0 -50
  367. data/bridge/sdk-core/sdk/src/lib.rs +0 -861
  368. data/bridge/sdk-core/sdk/src/payload_converter.rs +0 -11
  369. data/bridge/sdk-core/sdk/src/workflow_context/options.rs +0 -295
  370. data/bridge/sdk-core/sdk/src/workflow_context.rs +0 -694
  371. data/bridge/sdk-core/sdk/src/workflow_future.rs +0 -500
  372. data/bridge/sdk-core/sdk-core-protos/Cargo.toml +0 -33
  373. data/bridge/sdk-core/sdk-core-protos/LICENSE.txt +0 -23
  374. data/bridge/sdk-core/sdk-core-protos/build.rs +0 -142
  375. data/bridge/sdk-core/sdk-core-protos/src/constants.rs +0 -7
  376. data/bridge/sdk-core/sdk-core-protos/src/history_builder.rs +0 -557
  377. data/bridge/sdk-core/sdk-core-protos/src/history_info.rs +0 -234
  378. data/bridge/sdk-core/sdk-core-protos/src/lib.rs +0 -2088
  379. data/bridge/sdk-core/sdk-core-protos/src/task_token.rs +0 -48
  380. data/bridge/sdk-core/sdk-core-protos/src/utilities.rs +0 -14
  381. data/bridge/sdk-core/test-utils/Cargo.toml +0 -38
  382. data/bridge/sdk-core/test-utils/src/canned_histories.rs +0 -1389
  383. data/bridge/sdk-core/test-utils/src/histfetch.rs +0 -28
  384. data/bridge/sdk-core/test-utils/src/lib.rs +0 -709
  385. data/bridge/sdk-core/test-utils/src/wf_input_saver.rs +0 -50
  386. data/bridge/sdk-core/test-utils/src/workflows.rs +0 -29
  387. data/bridge/sdk-core/tests/fuzzy_workflow.rs +0 -130
  388. data/bridge/sdk-core/tests/heavy_tests.rs +0 -265
  389. data/bridge/sdk-core/tests/integ_tests/client_tests.rs +0 -36
  390. data/bridge/sdk-core/tests/integ_tests/ephemeral_server_tests.rs +0 -150
  391. data/bridge/sdk-core/tests/integ_tests/heartbeat_tests.rs +0 -223
  392. data/bridge/sdk-core/tests/integ_tests/metrics_tests.rs +0 -239
  393. data/bridge/sdk-core/tests/integ_tests/polling_tests.rs +0 -90
  394. data/bridge/sdk-core/tests/integ_tests/queries_tests.rs +0 -314
  395. data/bridge/sdk-core/tests/integ_tests/visibility_tests.rs +0 -151
  396. data/bridge/sdk-core/tests/integ_tests/workflow_tests/activities.rs +0 -902
  397. data/bridge/sdk-core/tests/integ_tests/workflow_tests/appdata_propagation.rs +0 -61
  398. data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +0 -60
  399. data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +0 -51
  400. data/bridge/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +0 -51
  401. data/bridge/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +0 -64
  402. data/bridge/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +0 -47
  403. data/bridge/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +0 -669
  404. data/bridge/sdk-core/tests/integ_tests/workflow_tests/modify_wf_properties.rs +0 -54
  405. data/bridge/sdk-core/tests/integ_tests/workflow_tests/patches.rs +0 -92
  406. data/bridge/sdk-core/tests/integ_tests/workflow_tests/replay.rs +0 -228
  407. data/bridge/sdk-core/tests/integ_tests/workflow_tests/resets.rs +0 -94
  408. data/bridge/sdk-core/tests/integ_tests/workflow_tests/signals.rs +0 -171
  409. data/bridge/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +0 -85
  410. data/bridge/sdk-core/tests/integ_tests/workflow_tests/timers.rs +0 -120
  411. data/bridge/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +0 -77
  412. data/bridge/sdk-core/tests/integ_tests/workflow_tests.rs +0 -596
  413. data/bridge/sdk-core/tests/main.rs +0 -103
  414. data/bridge/sdk-core/tests/runner.rs +0 -132
  415. data/bridge/sdk-core/tests/wf_input_replay.rs +0 -32
  416. data/bridge/src/connection.rs +0 -202
  417. data/bridge/src/lib.rs +0 -494
  418. data/bridge/src/runtime.rs +0 -54
  419. data/bridge/src/test_server.rs +0 -153
  420. data/bridge/src/worker.rs +0 -197
  421. data/ext/Rakefile +0 -9
  422. data/lib/gen/dependencies/gogoproto/gogo_pb.rb +0 -14
  423. data/lib/gen/temporal/api/batch/v1/message_pb.rb +0 -50
  424. data/lib/gen/temporal/api/command/v1/message_pb.rb +0 -160
  425. data/lib/gen/temporal/api/common/v1/message_pb.rb +0 -73
  426. data/lib/gen/temporal/api/enums/v1/batch_operation_pb.rb +0 -33
  427. data/lib/gen/temporal/api/enums/v1/command_type_pb.rb +0 -37
  428. data/lib/gen/temporal/api/enums/v1/common_pb.rb +0 -42
  429. data/lib/gen/temporal/api/enums/v1/event_type_pb.rb +0 -68
  430. data/lib/gen/temporal/api/enums/v1/failed_cause_pb.rb +0 -79
  431. data/lib/gen/temporal/api/enums/v1/namespace_pb.rb +0 -37
  432. data/lib/gen/temporal/api/enums/v1/query_pb.rb +0 -31
  433. data/lib/gen/temporal/api/enums/v1/reset_pb.rb +0 -24
  434. data/lib/gen/temporal/api/enums/v1/schedule_pb.rb +0 -28
  435. data/lib/gen/temporal/api/enums/v1/task_queue_pb.rb +0 -30
  436. data/lib/gen/temporal/api/enums/v1/update_pb.rb +0 -25
  437. data/lib/gen/temporal/api/enums/v1/workflow_pb.rb +0 -89
  438. data/lib/gen/temporal/api/errordetails/v1/message_pb.rb +0 -84
  439. data/lib/gen/temporal/api/failure/v1/message_pb.rb +0 -83
  440. data/lib/gen/temporal/api/filter/v1/message_pb.rb +0 -40
  441. data/lib/gen/temporal/api/history/v1/message_pb.rb +0 -498
  442. data/lib/gen/temporal/api/namespace/v1/message_pb.rb +0 -64
  443. data/lib/gen/temporal/api/operatorservice/v1/request_response_pb.rb +0 -88
  444. data/lib/gen/temporal/api/operatorservice/v1/service_pb.rb +0 -20
  445. data/lib/gen/temporal/api/protocol/v1/message_pb.rb +0 -30
  446. data/lib/gen/temporal/api/query/v1/message_pb.rb +0 -38
  447. data/lib/gen/temporal/api/replication/v1/message_pb.rb +0 -37
  448. data/lib/gen/temporal/api/schedule/v1/message_pb.rb +0 -149
  449. data/lib/gen/temporal/api/sdk/v1/task_complete_metadata_pb.rb +0 -23
  450. data/lib/gen/temporal/api/taskqueue/v1/message_pb.rb +0 -73
  451. data/lib/gen/temporal/api/testservice/v1/service_pb.rb +0 -21
  452. data/lib/gen/temporal/api/update/v1/message_pb.rb +0 -72
  453. data/lib/gen/temporal/api/version/v1/message_pb.rb +0 -41
  454. data/lib/gen/temporal/api/workflow/v1/message_pb.rb +0 -111
  455. data/lib/gen/temporal/api/workflowservice/v1/request_response_pb.rb +0 -798
  456. data/lib/gen/temporal/api/workflowservice/v1/service_pb.rb +0 -20
  457. data/lib/gen/temporal/sdk/core/activity_result/activity_result_pb.rb +0 -62
  458. data/lib/gen/temporal/sdk/core/activity_task/activity_task_pb.rb +0 -61
  459. data/lib/gen/temporal/sdk/core/child_workflow/child_workflow_pb.rb +0 -61
  460. data/lib/gen/temporal/sdk/core/common/common_pb.rb +0 -26
  461. data/lib/gen/temporal/sdk/core/core_interface_pb.rb +0 -40
  462. data/lib/gen/temporal/sdk/core/external_data/external_data_pb.rb +0 -31
  463. data/lib/gen/temporal/sdk/core/workflow_activation/workflow_activation_pb.rb +0 -171
  464. data/lib/gen/temporal/sdk/core/workflow_commands/workflow_commands_pb.rb +0 -200
  465. data/lib/gen/temporal/sdk/core/workflow_completion/workflow_completion_pb.rb +0 -41
  466. data/lib/temporalio/bridge/connect_options.rb +0 -15
  467. data/lib/temporalio/bridge/error.rb +0 -8
  468. data/lib/temporalio/bridge/retry_config.rb +0 -24
  469. data/lib/temporalio/bridge/tls_options.rb +0 -19
  470. data/lib/temporalio/bridge.rb +0 -14
  471. data/lib/temporalio/client/implementation.rb +0 -340
  472. data/lib/temporalio/connection/retry_config.rb +0 -44
  473. data/lib/temporalio/connection/service.rb +0 -20
  474. data/lib/temporalio/connection/test_service.rb +0 -92
  475. data/lib/temporalio/connection/tls_options.rb +0 -51
  476. data/lib/temporalio/connection/workflow_service.rb +0 -731
  477. data/lib/temporalio/connection.rb +0 -86
  478. data/lib/temporalio/data_converter.rb +0 -191
  479. data/lib/temporalio/error/workflow_failure.rb +0 -19
  480. data/lib/temporalio/errors.rb +0 -40
  481. data/lib/temporalio/failure_converter/base.rb +0 -26
  482. data/lib/temporalio/failure_converter/basic.rb +0 -319
  483. data/lib/temporalio/failure_converter.rb +0 -7
  484. data/lib/temporalio/interceptor/activity_inbound.rb +0 -22
  485. data/lib/temporalio/interceptor/activity_outbound.rb +0 -24
  486. data/lib/temporalio/interceptor/chain.rb +0 -28
  487. data/lib/temporalio/interceptor/client.rb +0 -127
  488. data/lib/temporalio/interceptor.rb +0 -22
  489. data/lib/temporalio/payload_codec/base.rb +0 -32
  490. data/lib/temporalio/payload_converter/base.rb +0 -24
  491. data/lib/temporalio/payload_converter/bytes.rb +0 -27
  492. data/lib/temporalio/payload_converter/composite.rb +0 -49
  493. data/lib/temporalio/payload_converter/encoding_base.rb +0 -35
  494. data/lib/temporalio/payload_converter/json.rb +0 -26
  495. data/lib/temporalio/payload_converter/nil.rb +0 -26
  496. data/lib/temporalio/payload_converter.rb +0 -14
  497. data/lib/temporalio/retry_state.rb +0 -35
  498. data/lib/temporalio/testing/time_skipping_handle.rb +0 -32
  499. data/lib/temporalio/testing/time_skipping_interceptor.rb +0 -23
  500. data/lib/temporalio/timeout_type.rb +0 -29
  501. data/lib/temporalio/worker/activity_runner.rb +0 -114
  502. data/lib/temporalio/worker/activity_worker.rb +0 -164
  503. data/lib/temporalio/worker/reactor.rb +0 -46
  504. data/lib/temporalio/worker/runner.rb +0 -63
  505. data/lib/temporalio/worker/sync_worker.rb +0 -124
  506. data/lib/temporalio/worker/thread_pool_executor.rb +0 -51
  507. data/lib/temporalio/workflow/async.rb +0 -46
  508. data/lib/temporalio/workflow/execution_info.rb +0 -54
  509. data/lib/temporalio/workflow/execution_status.rb +0 -36
  510. data/lib/temporalio/workflow/id_reuse_policy.rb +0 -36
  511. data/lib/temporalio/workflow/query_reject_condition.rb +0 -33
  512. data/lib/thermite_patch.rb +0 -33
  513. data/sig/async.rbs +0 -17
  514. data/sig/protobuf.rbs +0 -16
  515. data/sig/protos/dependencies/gogoproto/gogo.rbs +0 -914
  516. data/sig/protos/google/protobuf/any.rbs +0 -157
  517. data/sig/protos/google/protobuf/descriptor.rbs +0 -2825
  518. data/sig/protos/google/protobuf/duration.rbs +0 -114
  519. data/sig/protos/google/protobuf/empty.rbs +0 -36
  520. data/sig/protos/google/protobuf/timestamp.rbs +0 -145
  521. data/sig/protos/google/protobuf/wrappers.rbs +0 -358
  522. data/sig/protos/temporal/api/batch/v1/message.rbs +0 -300
  523. data/sig/protos/temporal/api/command/v1/message.rbs +0 -1399
  524. data/sig/protos/temporal/api/common/v1/message.rbs +0 -528
  525. data/sig/protos/temporal/api/enums/v1/batch_operation.rbs +0 -79
  526. data/sig/protos/temporal/api/enums/v1/command_type.rbs +0 -68
  527. data/sig/protos/temporal/api/enums/v1/common.rbs +0 -118
  528. data/sig/protos/temporal/api/enums/v1/event_type.rbs +0 -264
  529. data/sig/protos/temporal/api/enums/v1/failed_cause.rbs +0 -277
  530. data/sig/protos/temporal/api/enums/v1/namespace.rbs +0 -108
  531. data/sig/protos/temporal/api/enums/v1/query.rbs +0 -81
  532. data/sig/protos/temporal/api/enums/v1/reset.rbs +0 -44
  533. data/sig/protos/temporal/api/enums/v1/schedule.rbs +0 -72
  534. data/sig/protos/temporal/api/enums/v1/task_queue.rbs +0 -92
  535. data/sig/protos/temporal/api/enums/v1/update.rbs +0 -64
  536. data/sig/protos/temporal/api/enums/v1/workflow.rbs +0 -371
  537. data/sig/protos/temporal/api/errordetails/v1/message.rbs +0 -551
  538. data/sig/protos/temporal/api/failure/v1/message.rbs +0 -581
  539. data/sig/protos/temporal/api/filter/v1/message.rbs +0 -171
  540. data/sig/protos/temporal/api/history/v1/message.rbs +0 -4609
  541. data/sig/protos/temporal/api/namespace/v1/message.rbs +0 -410
  542. data/sig/protos/temporal/api/operatorservice/v1/request_response.rbs +0 -643
  543. data/sig/protos/temporal/api/operatorservice/v1/service.rbs +0 -17
  544. data/sig/protos/temporal/api/protocol/v1/message.rbs +0 -84
  545. data/sig/protos/temporal/api/query/v1/message.rbs +0 -182
  546. data/sig/protos/temporal/api/replication/v1/message.rbs +0 -148
  547. data/sig/protos/temporal/api/schedule/v1/message.rbs +0 -1488
  548. data/sig/protos/temporal/api/sdk/v1/task_complete_metadata.rbs +0 -110
  549. data/sig/protos/temporal/api/taskqueue/v1/message.rbs +0 -486
  550. data/sig/protos/temporal/api/testservice/v1/request_response.rbs +0 -249
  551. data/sig/protos/temporal/api/testservice/v1/service.rbs +0 -15
  552. data/sig/protos/temporal/api/update/v1/message.rbs +0 -489
  553. data/sig/protos/temporal/api/version/v1/message.rbs +0 -184
  554. data/sig/protos/temporal/api/workflow/v1/message.rbs +0 -824
  555. data/sig/protos/temporal/api/workflowservice/v1/request_response.rbs +0 -7250
  556. data/sig/protos/temporal/api/workflowservice/v1/service.rbs +0 -22
  557. data/sig/protos/temporal/sdk/core/activity_result/activity_result.rbs +0 -380
  558. data/sig/protos/temporal/sdk/core/activity_task/activity_task.rbs +0 -386
  559. data/sig/protos/temporal/sdk/core/child_workflow/child_workflow.rbs +0 -323
  560. data/sig/protos/temporal/sdk/core/common/common.rbs +0 -62
  561. data/sig/protos/temporal/sdk/core/core_interface.rbs +0 -101
  562. data/sig/protos/temporal/sdk/core/external_data/external_data.rbs +0 -119
  563. data/sig/protos/temporal/sdk/core/workflow_activation/workflow_activation.rbs +0 -1473
  564. data/sig/protos/temporal/sdk/core/workflow_commands/workflow_commands.rbs +0 -1784
  565. data/sig/protos/temporal/sdk/core/workflow_completion/workflow_completion.rbs +0 -180
  566. data/sig/ruby.rbs +0 -12
  567. data/sig/temporalio/activity/context.rbs +0 -29
  568. data/sig/temporalio/activity/info.rbs +0 -43
  569. data/sig/temporalio/activity.rbs +0 -19
  570. data/sig/temporalio/bridge/connect_options.rbs +0 -19
  571. data/sig/temporalio/bridge/error.rbs +0 -8
  572. data/sig/temporalio/bridge/retry_config.rbs +0 -21
  573. data/sig/temporalio/bridge/tls_options.rbs +0 -17
  574. data/sig/temporalio/bridge.rbs +0 -71
  575. data/sig/temporalio/client/implementation.rbs +0 -38
  576. data/sig/temporalio/client/workflow_handle.rbs +0 -41
  577. data/sig/temporalio/client.rbs +0 -35
  578. data/sig/temporalio/connection/retry_config.rbs +0 -37
  579. data/sig/temporalio/connection/service.rbs +0 -14
  580. data/sig/temporalio/connection/test_service.rbs +0 -13
  581. data/sig/temporalio/connection/tls_options.rbs +0 -43
  582. data/sig/temporalio/connection/workflow_service.rbs +0 -48
  583. data/sig/temporalio/connection.rbs +0 -30
  584. data/sig/temporalio/data_converter.rbs +0 -35
  585. data/sig/temporalio/error/failure.rbs +0 -121
  586. data/sig/temporalio/error/workflow_failure.rbs +0 -9
  587. data/sig/temporalio/errors.rbs +0 -36
  588. data/sig/temporalio/failure_converter/base.rbs +0 -12
  589. data/sig/temporalio/failure_converter/basic.rbs +0 -86
  590. data/sig/temporalio/failure_converter.rbs +0 -5
  591. data/sig/temporalio/interceptor/activity_inbound.rbs +0 -21
  592. data/sig/temporalio/interceptor/activity_outbound.rbs +0 -10
  593. data/sig/temporalio/interceptor/chain.rbs +0 -24
  594. data/sig/temporalio/interceptor/client.rbs +0 -148
  595. data/sig/temporalio/interceptor.rbs +0 -6
  596. data/sig/temporalio/payload_codec/base.rbs +0 -12
  597. data/sig/temporalio/payload_converter/base.rbs +0 -12
  598. data/sig/temporalio/payload_converter/bytes.rbs +0 -9
  599. data/sig/temporalio/payload_converter/composite.rbs +0 -19
  600. data/sig/temporalio/payload_converter/encoding_base.rbs +0 -14
  601. data/sig/temporalio/payload_converter/json.rbs +0 -9
  602. data/sig/temporalio/payload_converter/nil.rbs +0 -9
  603. data/sig/temporalio/payload_converter.rbs +0 -5
  604. data/sig/temporalio/retry_policy.rbs +0 -25
  605. data/sig/temporalio/retry_state.rbs +0 -20
  606. data/sig/temporalio/runtime.rbs +0 -12
  607. data/sig/temporalio/testing/time_skipping_handle.rbs +0 -15
  608. data/sig/temporalio/testing/time_skipping_interceptor.rbs +0 -13
  609. data/sig/temporalio/testing/workflow_environment.rbs +0 -22
  610. data/sig/temporalio/testing.rbs +0 -35
  611. data/sig/temporalio/timeout_type.rbs +0 -15
  612. data/sig/temporalio/version.rbs +0 -3
  613. data/sig/temporalio/worker/activity_runner.rbs +0 -35
  614. data/sig/temporalio/worker/activity_worker.rbs +0 -44
  615. data/sig/temporalio/worker/reactor.rbs +0 -22
  616. data/sig/temporalio/worker/runner.rbs +0 -21
  617. data/sig/temporalio/worker/sync_worker.rbs +0 -23
  618. data/sig/temporalio/worker/thread_pool_executor.rbs +0 -23
  619. data/sig/temporalio/worker.rbs +0 -46
  620. data/sig/temporalio/workflow/async.rbs +0 -9
  621. data/sig/temporalio/workflow/execution_info.rbs +0 -55
  622. data/sig/temporalio/workflow/execution_status.rbs +0 -21
  623. data/sig/temporalio/workflow/future.rbs +0 -40
  624. data/sig/temporalio/workflow/id_reuse_policy.rbs +0 -15
  625. data/sig/temporalio/workflow/info.rbs +0 -55
  626. data/sig/temporalio/workflow/query_reject_condition.rbs +0 -14
  627. data/sig/temporalio.rbs +0 -2
  628. data/sig/thermite_patch.rbs +0 -15
@@ -0,0 +1,237 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Much of this logic taken from
4
+ # https://github.com/ruby-concurrency/concurrent-ruby/blob/044020f44b36930b863b930f3ee8fa1e9f750469/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb,
5
+ # see MIT license at
6
+ # https://github.com/ruby-concurrency/concurrent-ruby/blob/044020f44b36930b863b930f3ee8fa1e9f750469/LICENSE.txt
7
+
8
+ module Temporalio
9
+ class Worker
10
+ # Implementation of a thread pool. This implementation is a stripped down form of Concurrent Ruby's
11
+ # `CachedThreadPool`.
12
+ class ThreadPool
13
+ # @return [ThreadPool] Default/shared thread pool instance with unlimited max threads.
14
+ def self.default
15
+ @default ||= new
16
+ end
17
+
18
+ # @!visibility private
19
+ def self._monotonic_time
20
+ Process.clock_gettime(Process::CLOCK_MONOTONIC)
21
+ end
22
+
23
+ # Create a new thread pool that creates threads as needed.
24
+ #
25
+ # @param max_threads [Integer, nil] Maximum number of thread workers to create, or nil for unlimited max.
26
+ # @param idle_timeout [Float] Number of seconds before a thread worker with no work should be stopped. Note,
27
+ # the check of whether a thread worker is idle is only done on each new {execute} call.
28
+ def initialize(max_threads: nil, idle_timeout: 20)
29
+ @max_threads = max_threads
30
+ @idle_timeout = idle_timeout
31
+
32
+ @mutex = Mutex.new
33
+ @pool = []
34
+ @ready = []
35
+ @queue = []
36
+ @scheduled_task_count = 0
37
+ @completed_task_count = 0
38
+ @largest_length = 0
39
+ @workers_counter = 0
40
+ @prune_interval = @idle_timeout / 2
41
+ @next_prune_time = ThreadPool._monotonic_time + @prune_interval
42
+ end
43
+
44
+ # Execute the given block in a thread. The block should be built to never raise and need no arguments.
45
+ #
46
+ # @yield Block to execute.
47
+ def execute(&block)
48
+ @mutex.synchronize do
49
+ locked_assign_worker(&block) || locked_enqueue(&block)
50
+ @scheduled_task_count += 1
51
+ locked_prune_pool if @next_prune_time < ThreadPool._monotonic_time
52
+ end
53
+ end
54
+
55
+ # @return [Integer] The largest number of threads that have been created in the pool since construction.
56
+ def largest_length
57
+ @mutex.synchronize { @largest_length }
58
+ end
59
+
60
+ # @return [Integer] The number of tasks that have been scheduled for execution on the pool since construction.
61
+ def scheduled_task_count
62
+ @mutex.synchronize { @scheduled_task_count }
63
+ end
64
+
65
+ # @return [Integer] The number of tasks that have been completed by the pool since construction.
66
+ def completed_task_count
67
+ @mutex.synchronize { @completed_task_count }
68
+ end
69
+
70
+ # @return [Integer] The number of threads that are actively executing tasks.
71
+ def active_count
72
+ @mutex.synchronize { @pool.length - @ready.length }
73
+ end
74
+
75
+ # @return [Integer] The number of threads currently in the pool.
76
+ def length
77
+ @mutex.synchronize { @pool.length }
78
+ end
79
+
80
+ # @return [Integer] The number of tasks in the queue awaiting execution.
81
+ def queue_length
82
+ @mutex.synchronize { @queue.length }
83
+ end
84
+
85
+ # Gracefully shutdown each thread when it is done with its current task. This should not be called until all
86
+ # workers using this executor are complete. This does not need to be called at all on program exit (e.g. for the
87
+ # global default).
88
+ def shutdown
89
+ @mutex.synchronize do
90
+ # Stop all workers
91
+ @pool.each(&:stop)
92
+ end
93
+ end
94
+
95
+ # Kill each thread. This should not be called until all workers using this executor are complete. This does not
96
+ # need to be called at all on program exit (e.g. for the global default).
97
+ def kill
98
+ @mutex.synchronize do
99
+ # Kill all workers
100
+ @pool.each(&:kill)
101
+ @pool.clear
102
+ @ready.clear
103
+ end
104
+ end
105
+
106
+ # @!visibility private
107
+ def _remove_busy_worker(worker)
108
+ @mutex.synchronize { locked_remove_busy_worker(worker) }
109
+ end
110
+
111
+ # @!visibility private
112
+ def _ready_worker(worker, last_message)
113
+ @mutex.synchronize { locked_ready_worker(worker, last_message) }
114
+ end
115
+
116
+ # @!visibility private
117
+ def _worker_died(worker)
118
+ @mutex.synchronize { locked_worker_died(worker) }
119
+ end
120
+
121
+ # @!visibility private
122
+ def _worker_task_completed
123
+ @mutex.synchronize { @completed_task_count += 1 }
124
+ end
125
+
126
+ private
127
+
128
+ def locked_assign_worker(&block)
129
+ # keep growing if the pool is not at the minimum yet
130
+ worker, = @ready.pop || locked_add_busy_worker
131
+ if worker
132
+ worker << block
133
+ true
134
+ else
135
+ false
136
+ end
137
+ end
138
+
139
+ def locked_enqueue(&block)
140
+ @queue << block
141
+ end
142
+
143
+ def locked_add_busy_worker
144
+ return if @max_threads && @pool.size >= @max_threads
145
+
146
+ @workers_counter += 1
147
+ @pool << (worker = Worker.new(self, @workers_counter))
148
+ @largest_length = @pool.length if @pool.length > @largest_length
149
+ worker
150
+ end
151
+
152
+ def locked_prune_pool
153
+ now = ThreadPool._monotonic_time
154
+ stopped_workers = 0
155
+ while !@ready.empty? && (@pool.size - stopped_workers).positive?
156
+ worker, last_message = @ready.first
157
+ break unless now - last_message > @idle_timeout
158
+
159
+ stopped_workers += 1
160
+ @ready.shift
161
+ worker << :stop
162
+
163
+ end
164
+
165
+ @next_prune_time = ThreadPool._monotonic_time + @prune_interval
166
+ end
167
+
168
+ def locked_remove_busy_worker(worker)
169
+ @pool.delete(worker)
170
+ end
171
+
172
+ def locked_ready_worker(worker, last_message)
173
+ block = @queue.shift
174
+ if block
175
+ worker << block
176
+ else
177
+ @ready.push([worker, last_message])
178
+ end
179
+ end
180
+
181
+ def locked_worker_died(worker)
182
+ locked_remove_busy_worker(worker)
183
+ replacement_worker = locked_add_busy_worker
184
+ locked_ready_worker(replacement_worker, ThreadPool._monotonic_time) if replacement_worker
185
+ end
186
+
187
+ # @!visibility private
188
+ class Worker
189
+ def initialize(pool, id)
190
+ @queue = Queue.new
191
+ @thread = Thread.new(@queue, pool) do |my_queue, my_pool|
192
+ catch(:stop) do
193
+ loop do
194
+ case block = my_queue.pop
195
+ when :stop
196
+ pool._remove_busy_worker(self)
197
+ throw :stop
198
+ else
199
+ begin
200
+ block.call
201
+ my_pool._worker_task_completed
202
+ my_pool._ready_worker(self, ThreadPool._monotonic_time)
203
+ rescue StandardError => e
204
+ # Ignore
205
+ warn("Unexpected execute block error: #{e.full_message}")
206
+ rescue Exception => e # rubocop:disable Lint/RescueException
207
+ warn("Unexpected execute block exception: #{e.full_message}")
208
+ my_pool._worker_died(self)
209
+ throw :stop
210
+ end
211
+ end
212
+ end
213
+ end
214
+ end
215
+ @thread.name = "temporal-thread-#{id}"
216
+ end
217
+
218
+ # @!visibility private
219
+ def <<(block)
220
+ @queue << block
221
+ end
222
+
223
+ # @!visibility private
224
+ def stop
225
+ @queue << :stop
226
+ end
227
+
228
+ # @!visibility private
229
+ def kill
230
+ @thread.kill
231
+ end
232
+ end
233
+
234
+ private_constant :Worker
235
+ end
236
+ end
237
+ end
@@ -0,0 +1,151 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Temporalio
4
+ class Worker
5
+ # Worker tuner that allows for dynamic customization of some aspects of worker configuration.
6
+ class Tuner
7
+ # Slot supplier used for reserving slots for execution. Currently the only implementations allowed are {Fixed} and
8
+ # {ResourceBased}.
9
+ class SlotSupplier
10
+ # A fixed-size slot supplier that will never issue more than a fixed number of slots.
11
+ class Fixed < SlotSupplier
12
+ # @return [Integer] The maximum number of slots that can be issued.
13
+ attr_reader :slots
14
+
15
+ # Create fixed-size slot supplier.
16
+ #
17
+ # @param slots [Integer] The maximum number of slots that can be issued.
18
+ def initialize(slots) # rubocop:disable Lint/MissingSuper
19
+ @slots = slots
20
+ end
21
+ end
22
+
23
+ # A slot supplier that will dynamically adjust the number of slots based on resource usage.
24
+ #
25
+ # @note WARNING: This API is experimental.
26
+ class ResourceBased < SlotSupplier
27
+ attr_reader :tuner_options, :slot_options
28
+
29
+ # Create a reosurce-based slot supplier.
30
+ #
31
+ # @param tuner_options [ResourceBasedTunerOptions] General tuner options.
32
+ # @param slot_options [ResourceBasedSlotOptions] Slot-supplier-specific tuner options.
33
+ def initialize(tuner_options:, slot_options:) # rubocop:disable Lint/MissingSuper
34
+ @tuner_options = tuner_options
35
+ @slot_options = slot_options
36
+ end
37
+ end
38
+ end
39
+
40
+ # Options for {create_resource_based} or {SlotSupplier::ResourceBased}.
41
+ #
42
+ # @!attribute target_memory_usage
43
+ # @return [Float] A value between 0 and 1 that represents the target (system) memory usage. It's not recommended
44
+ # to set this higher than 0.8, since how much memory a workflow may use is not predictable, and you don't want
45
+ # to encounter OOM errors.
46
+ # @!attribute target_cpu_usage
47
+ # @return [Float] A value between 0 and 1 that represents the target (system) CPU usage. This can be set to 1.0
48
+ # if desired, but it's recommended to leave some headroom for other processes.
49
+ ResourceBasedTunerOptions = Struct.new(
50
+ :target_memory_usage,
51
+ :target_cpu_usage,
52
+ keyword_init: true
53
+ )
54
+
55
+ # Options for a specific slot type being used with {SlotSupplier::ResourceBased}.
56
+ #
57
+ # @!attribute min_slots
58
+ # @return [Integer, nil] Amount of slots that will be issued regardless of any other checks. Defaults to 5 for
59
+ # workflows and 1 for activities.
60
+ # @!attribute max_slots
61
+ # @return [Integer, nil] Maximum amount of slots permitted. Defaults to 500.
62
+ # @!attribute ramp_throttle
63
+ # @return [Float, nil] Minimum time we will wait (after passing the minimum slots number) between handing out
64
+ # new slots in seconds. Defaults to 0 for workflows and 0.05 for activities.
65
+ #
66
+ # This value matters because how many resources a task will use cannot be determined ahead of time, and thus
67
+ # the system should wait to see how much resources are used before issuing more slots.
68
+ ResourceBasedSlotOptions = Struct.new(
69
+ :min_slots,
70
+ :max_slots,
71
+ :ramp_throttle,
72
+ keyword_init: true
73
+ )
74
+
75
+ # Create a fixed-size tuner with the provided number of slots.
76
+ #
77
+ # @param workflow_slots [Integer] Maximum number of workflow task slots.
78
+ # @param activity_slots [Integer] Maximum number of activity slots.
79
+ # @param local_activity_slots [Integer] Maximum number of local activity slots.
80
+ # @return [Tuner] Created tuner.
81
+ def self.create_fixed(
82
+ workflow_slots: 100,
83
+ activity_slots: 100,
84
+ local_activity_slots: 100
85
+ )
86
+ new(
87
+ workflow_slot_supplier: SlotSupplier::Fixed.new(workflow_slots),
88
+ activity_slot_supplier: SlotSupplier::Fixed.new(activity_slots),
89
+ local_activity_slot_supplier: SlotSupplier::Fixed.new(local_activity_slots)
90
+ )
91
+ end
92
+
93
+ # Create a resource-based tuner with the provided options.
94
+ #
95
+ # @param target_memory_usage [Float] A value between 0 and 1 that represents the target (system) memory usage.
96
+ # It's not recommended to set this higher than 0.8, since how much memory a workflow may use is not predictable,
97
+ # and you don't want to encounter OOM errors.
98
+ # @param target_cpu_usage [Float] A value between 0 and 1 that represents the target (system) CPU usage. This can
99
+ # be set to 1.0 if desired, but it's recommended to leave some headroom for other processes.
100
+ # @param workflow_options [ResourceBasedSlotOptions] Resource-based options for workflow slot supplier.
101
+ # @param activity_options [ResourceBasedSlotOptions] Resource-based options for activity slot supplier.
102
+ # @param local_activity_options [ResourceBasedSlotOptions] Resource-based options for local activity slot
103
+ # supplier.
104
+ # @return [Tuner] Created tuner.
105
+ def self.create_resource_based(
106
+ target_memory_usage:,
107
+ target_cpu_usage:,
108
+ workflow_options: ResourceBasedSlotOptions.new(min_slots: 5, max_slots: 500, ramp_throttle: 0.0),
109
+ activity_options: ResourceBasedSlotOptions.new(min_slots: 1, max_slots: 500, ramp_throttle: 0.05),
110
+ local_activity_options: ResourceBasedSlotOptions.new(min_slots: 1, max_slots: 500, ramp_throttle: 0.05)
111
+ )
112
+ tuner_options = ResourceBasedTunerOptions.new(target_memory_usage:, target_cpu_usage:)
113
+ new(
114
+ workflow_slot_supplier: SlotSupplier::ResourceBased.new(
115
+ tuner_options:, slot_options: workflow_options
116
+ ),
117
+ activity_slot_supplier: SlotSupplier::ResourceBased.new(
118
+ tuner_options:, slot_options: activity_options
119
+ ),
120
+ local_activity_slot_supplier: SlotSupplier::ResourceBased.new(
121
+ tuner_options:, slot_options: local_activity_options
122
+ )
123
+ )
124
+ end
125
+
126
+ # @return [SlotSupplier] Slot supplier for workflows.
127
+ attr_reader :workflow_slot_supplier
128
+
129
+ # @return [SlotSupplier] Slot supplier for activities.
130
+ attr_reader :activity_slot_supplier
131
+
132
+ # @return [SlotSupplier] Slot supplier for local activities.
133
+ attr_reader :local_activity_slot_supplier
134
+
135
+ # Create a tuner from 3 slot suppliers.
136
+ #
137
+ # @param workflow_slot_supplier [SlotSupplier] Slot supplier for workflows.
138
+ # @param activity_slot_supplier [SlotSupplier] Slot supplier for activities.
139
+ # @param local_activity_slot_supplier [SlotSupplier] Slot supplier for local activities.
140
+ def initialize(
141
+ workflow_slot_supplier:,
142
+ activity_slot_supplier:,
143
+ local_activity_slot_supplier:
144
+ )
145
+ @workflow_slot_supplier = workflow_slot_supplier
146
+ @activity_slot_supplier = activity_slot_supplier
147
+ @local_activity_slot_supplier = local_activity_slot_supplier
148
+ end
149
+ end
150
+ end
151
+ end
@@ -0,0 +1,230 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'etc'
4
+ require 'temporalio/internal/bridge/api'
5
+ require 'temporalio/internal/proto_utils'
6
+ require 'temporalio/internal/worker/workflow_instance'
7
+ require 'temporalio/scoped_logger'
8
+ require 'temporalio/worker/thread_pool'
9
+ require 'temporalio/worker/workflow_executor'
10
+ require 'temporalio/workflow'
11
+ require 'temporalio/workflow/definition'
12
+ require 'timeout'
13
+
14
+ module Temporalio
15
+ class Worker
16
+ class WorkflowExecutor
17
+ # Thread pool implementation of {WorkflowExecutor}.
18
+ #
19
+ # Users should use {default} unless they have specific needs to change the thread pool or max threads.
20
+ class ThreadPool < WorkflowExecutor
21
+ # @return [ThreadPool] Default executor that lazily constructs an instance with default values.
22
+ def self.default
23
+ @default ||= ThreadPool.new
24
+ end
25
+
26
+ # Create a thread pool executor. Most users may prefer {default}.
27
+ #
28
+ # @param max_threads [Integer] Maximum number of threads to use concurrently.
29
+ # @param thread_pool [Worker::ThreadPool] Thread pool to use.
30
+ def initialize(max_threads: [4, Etc.nprocessors].max, thread_pool: Temporalio::Worker::ThreadPool.default) # rubocop:disable Lint/MissingSuper
31
+ @max_threads = max_threads
32
+ @thread_pool = thread_pool
33
+ @workers_mutex = Mutex.new
34
+ @workers = []
35
+ @workers_by_worker_state_and_run_id = {}
36
+ end
37
+
38
+ # @!visibility private
39
+ def _validate_worker(worker, worker_state)
40
+ # Do nothing
41
+ end
42
+
43
+ # @!visibility private
44
+ def _activate(activation, worker_state, &)
45
+ # Get applicable worker
46
+ worker = @workers_mutex.synchronize do
47
+ run_key = [worker_state, activation.run_id]
48
+ @workers_by_worker_state_and_run_id.fetch(run_key) do
49
+ # If not found, get a new one either by creating if not enough or find the one with the fewest.
50
+ new_worker = if @workers.size < @max_threads
51
+ created_worker = Worker.new(self)
52
+ @workers << Worker.new(self)
53
+ created_worker
54
+ else
55
+ @workers.min_by(&:workflow_count)
56
+ end
57
+ @workers_by_worker_state_and_run_id[run_key] = new_worker
58
+ new_worker.workflow_count += 1
59
+ new_worker
60
+ end
61
+ end
62
+ raise "No worker for run ID #{activation.run_id}" unless worker
63
+
64
+ # Enqueue activation
65
+ worker.enqueue_activation(activation, worker_state, &)
66
+ end
67
+
68
+ # @!visibility private
69
+ def _thread_pool
70
+ @thread_pool
71
+ end
72
+
73
+ # @!visibility private
74
+ def _remove_workflow(worker_state, run_id)
75
+ @workers_mutex.synchronize do
76
+ worker = @workers_by_worker_state_and_run_id.delete([worker_state, run_id])
77
+ if worker
78
+ worker.workflow_count -= 1
79
+ # Remove worker from array if done. The array should be small enough that the delete being O(N) is not
80
+ # worth using a set or a map.
81
+ if worker.workflow_count.zero?
82
+ @workers.delete(worker)
83
+ worker.shutdown
84
+ end
85
+ end
86
+ end
87
+ end
88
+
89
+ # @!visibility private
90
+ class Worker
91
+ LOG_ACTIVATIONS = false
92
+
93
+ attr_accessor :workflow_count
94
+
95
+ def initialize(executor)
96
+ @executor = executor
97
+ @workflow_count = 0
98
+ @queue = Queue.new
99
+ executor._thread_pool.execute { run }
100
+ end
101
+
102
+ # @!visibility private
103
+ def enqueue_activation(activation, worker_state, &completion_block)
104
+ @queue << [:activate, activation, worker_state, completion_block]
105
+ end
106
+
107
+ # @!visibility private
108
+ def shutdown
109
+ @queue << [:shutdown]
110
+ end
111
+
112
+ private
113
+
114
+ def run
115
+ loop do
116
+ work = @queue.pop
117
+ if work.is_a?(Exception)
118
+ Warning.warn("Failed activation: #{work}")
119
+ elsif work.is_a?(Array)
120
+ case work.first
121
+ when :shutdown
122
+ return
123
+ when :activate
124
+ activate(work[1], work[2], &work[3])
125
+ end
126
+ end
127
+ rescue Exception => e # rubocop:disable Lint/RescueException
128
+ Warning.warn("Unexpected failure during run: #{e.full_message}")
129
+ end
130
+ end
131
+
132
+ def activate(activation, worker_state, &)
133
+ worker_state.logger.debug("Received workflow activation: #{activation}") if LOG_ACTIVATIONS
134
+
135
+ # Check whether it has eviction
136
+ cache_remove_job = activation.jobs.find { |j| !j.remove_from_cache.nil? }&.remove_from_cache
137
+
138
+ # If it's eviction only, just evict inline and do nothing else
139
+ if cache_remove_job && activation.jobs.size == 1
140
+ evict(worker_state, activation.run_id)
141
+ worker_state.logger.debug('Sending empty workflow completion') if LOG_ACTIVATIONS
142
+ yield Internal::Bridge::Api::WorkflowCompletion::WorkflowActivationCompletion.new(
143
+ run_id: activation.run_id,
144
+ successful: Internal::Bridge::Api::WorkflowCompletion::Success.new
145
+ )
146
+ return
147
+ end
148
+
149
+ completion = Timeout.timeout(
150
+ worker_state.deadlock_timeout,
151
+ DeadlockError,
152
+ # TODO(cretz): Document that this affects all running workflows on this worker
153
+ # and maybe test to see how that is mitigated
154
+ "[TMPRL1101] Potential deadlock detected: workflow didn't yield " \
155
+ "within #{worker_state.deadlock_timeout} second(s)."
156
+ ) do
157
+ # Get or create workflow
158
+ instance = worker_state.get_or_create_running_workflow(activation.run_id) do
159
+ create_instance(activation, worker_state)
160
+ end
161
+
162
+ # Activate. We expect most errors in here to have been captured inside.
163
+ instance.activate(activation)
164
+ rescue Exception => e # rubocop:disable Lint/RescueException
165
+ worker_state.logger.error("Failed activation on workflow run ID: #{activation.run_id}")
166
+ worker_state.logger.error(e)
167
+ Internal::Worker::WorkflowInstance.new_completion_with_failure(
168
+ run_id: activation.run_id,
169
+ error: e,
170
+ failure_converter: worker_state.data_converter.failure_converter,
171
+ payload_converter: worker_state.data_converter.payload_converter
172
+ )
173
+ end
174
+
175
+ # Go ahead and evict if there is an eviction job
176
+ evict(worker_state, activation.run_id) if cache_remove_job
177
+
178
+ # Complete the activation
179
+ worker_state.logger.debug("Sending workflow completion: #{completion}") if LOG_ACTIVATIONS
180
+ yield completion
181
+ end
182
+
183
+ def create_instance(initial_activation, worker_state)
184
+ # Extract start job
185
+ init_job = initial_activation.jobs.find { |j| !j.initialize_workflow.nil? }&.initialize_workflow
186
+ raise 'Missing initialize job in initial activation' unless init_job
187
+
188
+ # Obtain definition
189
+ definition = worker_state.workflow_definitions[init_job.workflow_type] ||
190
+ worker_state.workflow_definitions[nil]
191
+ unless definition
192
+ raise Error::ApplicationError.new(
193
+ "Workflow type #{init_job.workflow_type} is not registered on this worker, available workflows: " +
194
+ worker_state.workflow_definitions.keys.compact.sort.join(', '),
195
+ type: 'NotFoundError'
196
+ )
197
+ end
198
+
199
+ Internal::Worker::WorkflowInstance.new(
200
+ Internal::Worker::WorkflowInstance::Details.new(
201
+ namespace: worker_state.namespace,
202
+ task_queue: worker_state.task_queue,
203
+ definition:,
204
+ initial_activation:,
205
+ logger: worker_state.logger,
206
+ metric_meter: worker_state.metric_meter,
207
+ payload_converter: worker_state.data_converter.payload_converter,
208
+ failure_converter: worker_state.data_converter.failure_converter,
209
+ interceptors: worker_state.workflow_interceptors,
210
+ disable_eager_activity_execution: worker_state.disable_eager_activity_execution,
211
+ illegal_calls: worker_state.illegal_calls,
212
+ workflow_failure_exception_types: worker_state.workflow_failure_exception_types
213
+ )
214
+ )
215
+ end
216
+
217
+ def evict(worker_state, run_id)
218
+ worker_state.evict_running_workflow(run_id)
219
+ @executor._remove_workflow(worker_state, run_id)
220
+ end
221
+ end
222
+
223
+ private_constant :Worker
224
+
225
+ # Error raised when a processing a workflow task takes more than the expected amount of time.
226
+ class DeadlockError < Exception; end # rubocop:disable Lint/InheritException
227
+ end
228
+ end
229
+ end
230
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'temporalio/worker/workflow_executor/thread_pool'
4
+
5
+ module Temporalio
6
+ class Worker
7
+ # Workflow executor that executes workflow tasks. Unlike {ActivityExecutor}, this class is not meant for user
8
+ # implementation. The only implementation that is currently accepted is {WorkflowExecutor::ThreadPool}.
9
+ class WorkflowExecutor
10
+ # @!visibility private
11
+ def initialize
12
+ raise 'Cannot create custom executors'
13
+ end
14
+
15
+ # @!visibility private
16
+ def _validate_worker(worker, worker_state)
17
+ raise NotImplementedError
18
+ end
19
+
20
+ # @!visibility private
21
+ def _activate(activation, worker_state, &)
22
+ raise NotImplementedError
23
+ end
24
+ end
25
+ end
26
+ end