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
@@ -1,204 +1,597 @@
1
- require 'async'
2
- require 'temporalio/bridge'
3
- require 'temporalio/data_converter'
4
- require 'temporalio/runtime'
5
- require 'temporalio/worker/activity_worker'
6
- require 'temporalio/worker/runner'
7
- require 'temporalio/worker/sync_worker'
8
- require 'temporalio/worker/thread_pool_executor'
1
+ # frozen_string_literal: true
2
+
3
+ require 'temporalio/activity'
4
+ require 'temporalio/cancellation'
5
+ require 'temporalio/client'
6
+ require 'temporalio/error'
7
+ require 'temporalio/internal/bridge'
8
+ require 'temporalio/internal/bridge/worker'
9
+ require 'temporalio/internal/worker/activity_worker'
10
+ require 'temporalio/internal/worker/multi_runner'
11
+ require 'temporalio/internal/worker/workflow_instance'
12
+ require 'temporalio/internal/worker/workflow_worker'
13
+ require 'temporalio/worker/activity_executor'
14
+ require 'temporalio/worker/interceptor'
15
+ require 'temporalio/worker/thread_pool'
16
+ require 'temporalio/worker/tuner'
17
+ require 'temporalio/worker/workflow_executor'
9
18
 
10
19
  module Temporalio
11
- # Worker to process activities.
20
+ # Worker for processing activities and workflows on a task queue.
12
21
  #
13
- # Once created, workers can be run and shutdown explicitly via {#run} and {#shutdown}.
22
+ # Workers are created for a task queue and the items they can run. Then {run} is used for running a single worker, or
23
+ # {run_all} is used for a collection of workers. These can wait until a block is complete or a {Cancellation} is
24
+ # canceled.
14
25
  class Worker
15
- # Run multiple workers and wait for them to be shut down.
16
- #
17
- # This will not return until shutdown is complete (and all running activities in all workers
18
- # finished) and will raise if any of the workers raises a fatal error.
19
- #
20
- # @param workers [Array<Temporalio::Worker>] A list of the workers to be run.
21
- # @param shutdown_signals [Array<String>] A list of process signals for the worker to stop on.
22
- # This argument can not be used with a custom block.
26
+ Options = Data.define(
27
+ :client,
28
+ :task_queue,
29
+ :activities,
30
+ :workflows,
31
+ :tuner,
32
+ :activity_executors,
33
+ :workflow_executor,
34
+ :interceptors,
35
+ :build_id,
36
+ :identity,
37
+ :logger,
38
+ :max_cached_workflows,
39
+ :max_concurrent_workflow_task_polls,
40
+ :nonsticky_to_sticky_poll_ratio,
41
+ :max_concurrent_activity_task_polls,
42
+ :no_remote_activities,
43
+ :sticky_queue_schedule_to_start_timeout,
44
+ :max_heartbeat_throttle_interval,
45
+ :default_heartbeat_throttle_interval,
46
+ :max_activities_per_second,
47
+ :max_task_queue_activities_per_second,
48
+ :graceful_shutdown_period,
49
+ :use_worker_versioning,
50
+ :disable_eager_activity_execution,
51
+ :illegal_workflow_calls,
52
+ :workflow_failure_exception_types,
53
+ :workflow_payload_codec_thread_pool,
54
+ :debug_mode
55
+ )
56
+
57
+ # Options as returned from {options} for `**to_h` splat use in {initialize}. See {initialize} for details.
58
+ class Options; end # rubocop:disable Lint/EmptyClass
59
+
60
+ # @return [String] Memoized default build ID. This default value is built as a checksum of all of the loaded Ruby
61
+ # source files in `$LOADED_FEATURES`. Users may prefer to set the build ID to a better representation of the
62
+ # source.
63
+ def self.default_build_id
64
+ @default_build_id ||= _load_default_build_id
65
+ end
66
+
67
+ # @!visibility private
68
+ def self._load_default_build_id
69
+ # The goal is to get a hash of runtime code, both Temporal's and the
70
+ # user's. After all options were explored, we have decided to default to
71
+ # hashing all bytecode of required files. This means later/dynamic require
72
+ # won't be accounted for because this is memoized. It also means the
73
+ # tiniest code change will affect this, which is what we want since this
74
+ # is meant to be a "binary checksum". We have chosen to use MD5 for speed,
75
+ # similarity with other SDKs, and because security is not a factor.
76
+ require 'digest'
77
+
78
+ saw_bridge = false
79
+ build_id = $LOADED_FEATURES.each_with_object(Digest::MD5.new) do |file, digest|
80
+ saw_bridge = true if file.include?('temporalio_bridge.')
81
+ digest.update(File.read(file)) if File.file?(file)
82
+ end.hexdigest
83
+ raise 'Temporal bridge library not in $LOADED_FEATURES, unable to calculate default build ID' unless saw_bridge
84
+
85
+ build_id
86
+ end
87
+
88
+ # Run all workers until cancellation or optional block completes. When the cancellation or block is complete, the
89
+ # workers are shut down. This will return the block result if everything successful or raise an error if not. See
90
+ # {run} for details on how worker shutdown works.
23
91
  #
24
- # @yield Optionally you can provide a block by the end of which all the workers will be shut
25
- # down. Any errors raised from this block will be re-raised by this method.
26
- def self.run(*workers, shutdown_signals: [], &block)
27
- unless shutdown_signals.empty?
28
- if block
29
- raise ArgumentError, 'Temporalio::Worker.run accepts :shutdown_signals or a block, but not both'
92
+ # @param workers [Array<Worker>] Workers to run.
93
+ # @param cancellation [Cancellation] Cancellation that can be canceled to shut down all workers.
94
+ # @param shutdown_signals [Array] Signals to trap and cause worker shutdown.
95
+ # @param raise_in_block_on_shutdown [Exception, nil] Exception to {::Thread.raise} or {::Fiber.raise} if a block is
96
+ # present and still running on shutdown. If nil, `raise` is not used.
97
+ # @param wait_block_complete [Boolean] If block given and shutdown caused by something else (e.g. cancellation
98
+ # canceled), whether to wait on the block to complete before returning.
99
+ # @yield Optional block. This will be run in a new background thread or fiber. Workers will shut down upon
100
+ # completion of this and, assuming no other failures, return/bubble success/exception of the block.
101
+ # @return [Object] Return value of the block or nil of no block given.
102
+ def self.run_all(
103
+ *workers,
104
+ cancellation: Cancellation.new,
105
+ shutdown_signals: [],
106
+ raise_in_block_on_shutdown: Error::CanceledError.new('Workers finished'),
107
+ wait_block_complete: true,
108
+ &block
109
+ )
110
+ # Confirm there is at least one and they are all workers
111
+ raise ArgumentError, 'At least one worker required' if workers.empty?
112
+ raise ArgumentError, 'Not all parameters are workers' unless workers.all? { |w| w.is_a?(Worker) }
113
+
114
+ Internal::Bridge.assert_fiber_compatibility!
115
+
116
+ # Start the multi runner
117
+ runner = Internal::Worker::MultiRunner.new(workers:, shutdown_signals:)
118
+
119
+ # Apply block
120
+ runner.apply_thread_or_fiber_block(&block)
121
+
122
+ # Reuse first worker logger
123
+ logger = workers.first&.options&.logger or raise # Never nil
124
+
125
+ # On cancel, initiate shutdown
126
+ cancellation.add_cancel_callback do
127
+ logger.info('Cancel invoked, beginning worker shutdown')
128
+ runner.initiate_shutdown
129
+ end
130
+
131
+ # Poller loop, run until all pollers shut down
132
+ first_error = nil
133
+ block_result = nil
134
+ loop do
135
+ event = runner.next_event
136
+ # TODO(cretz): Consider improving performance instead of this case statement
137
+ case event
138
+ when Internal::Worker::MultiRunner::Event::PollSuccess
139
+ # Successful poll
140
+ event.worker._on_poll_bytes(runner, event.worker_type, event.bytes)
141
+ when Internal::Worker::MultiRunner::Event::PollFailure
142
+ # Poll failure, this causes shutdown of all workers
143
+ logger.error('Poll failure (beginning worker shutdown if not already occurring)')
144
+ logger.error(event.error)
145
+ first_error ||= event.error
146
+ runner.initiate_shutdown
147
+ when Internal::Worker::MultiRunner::Event::WorkflowActivationDecoded
148
+ # Came back from a codec as decoded
149
+ event.workflow_worker.handle_activation(runner:, activation: event.activation, decoded: true)
150
+ when Internal::Worker::MultiRunner::Event::WorkflowActivationComplete
151
+ # An activation is complete
152
+ event.workflow_worker.handle_activation_complete(
153
+ runner:,
154
+ activation_completion: event.activation_completion,
155
+ encoded: event.encoded,
156
+ completion_complete_queue: event.completion_complete_queue
157
+ )
158
+ when Internal::Worker::MultiRunner::Event::WorkflowActivationCompletionComplete
159
+ # Completion complete, only need to log error if it occurs here
160
+ if event.error
161
+ logger.error("Activation completion failed to record on run ID #{event.run_id}")
162
+ logger.error(event.error)
163
+ end
164
+ when Internal::Worker::MultiRunner::Event::PollerShutDown
165
+ # Individual poller shut down. Nothing to do here until we support
166
+ # worker status or something.
167
+ when Internal::Worker::MultiRunner::Event::AllPollersShutDown
168
+ # This is where we break the loop, no more polling can happen
169
+ break
170
+ when Internal::Worker::MultiRunner::Event::BlockSuccess
171
+ logger.info('Block completed, beginning worker shutdown')
172
+ block_result = event
173
+ runner.initiate_shutdown
174
+ when Internal::Worker::MultiRunner::Event::BlockFailure
175
+ logger.error('Block failure (beginning worker shutdown)')
176
+ logger.error(event.error)
177
+ block_result = event
178
+ first_error ||= event.error
179
+ runner.initiate_shutdown
180
+ when Internal::Worker::MultiRunner::Event::ShutdownSignalReceived
181
+ logger.info('Signal received, beginning worker shutdown')
182
+ runner.initiate_shutdown
183
+ else
184
+ raise "Unexpected event: #{event}"
30
185
  end
186
+ end
31
187
 
32
- signal_queue = Queue.new
188
+ # Now that all pollers have stopped, let's wait for all to complete
189
+ begin
190
+ runner.wait_complete_and_finalize_shutdown
191
+ rescue StandardError => e
192
+ logger.warn('Failed waiting and finalizing')
193
+ logger.warn(e)
194
+ end
33
195
 
34
- shutdown_signals.each do |signal|
35
- Signal.trap(signal) { signal_queue.close }
196
+ # If there was a block but not a result yet, we want to raise if that is
197
+ # wanted, and wait if that is wanted
198
+ if block_given? && block_result.nil?
199
+ runner.raise_in_thread_or_fiber_block(raise_in_block_on_shutdown) unless raise_in_block_on_shutdown.nil?
200
+ if wait_block_complete
201
+ event = runner.next_event
202
+ case event
203
+ when Internal::Worker::MultiRunner::Event::BlockSuccess
204
+ logger.info('Block completed (after worker shutdown)')
205
+ block_result = event
206
+ when Internal::Worker::MultiRunner::Event::BlockFailure
207
+ logger.error('Block failure (after worker shutdown)')
208
+ logger.error(event.error)
209
+ block_result = event
210
+ first_error ||= event.error
211
+ when Internal::Worker::MultiRunner::Event::ShutdownSignalReceived
212
+ # Do nothing, waiting for block
213
+ else
214
+ raise "Unexpected event: #{event}"
215
+ end
36
216
  end
217
+ end
218
+
219
+ # Notify each worker we're done with it
220
+ workers.each(&:_on_shutdown_complete)
37
221
 
38
- block = -> { signal_queue.pop }
222
+ # If there was an shutdown-causing error, we raise that
223
+ if !first_error.nil?
224
+ raise first_error
225
+ elsif block_result.is_a?(Internal::Worker::MultiRunner::Event::BlockSuccess)
226
+ block_result.result
39
227
  end
228
+ end
40
229
 
41
- Runner.new(*workers).run(&block)
230
+ # @return [Hash<String, [:all, Array<Symbol>]>] Default, immutable set illegal calls used for the
231
+ # `illegal_workflow_calls` worker option. See the documentation of that option for more details.
232
+ def self.default_illegal_workflow_calls
233
+ @default_illegal_workflow_calls ||= begin
234
+ hash = {
235
+ 'BasicSocket' => :all,
236
+ 'Date' => %i[initialize today],
237
+ 'DateTime' => %i[initialize now],
238
+ 'Dir' => :all,
239
+ 'Fiber' => [:set_scheduler],
240
+ 'File' => :all,
241
+ 'FileTest' => :all,
242
+ 'FileUtils' => :all,
243
+ 'Find' => :all,
244
+ 'GC' => :all,
245
+ 'IO' => [
246
+ :read
247
+ # Intentionally leaving out write so puts will work. We don't want to add heavy logic replacing stdout or
248
+ # trying to derive whether it's file vs stdout write.
249
+ #:write
250
+ ],
251
+ 'Kernel' => %i[abort at_exit autoload autoload? eval exec exit fork gets load open rand readline readlines
252
+ spawn srand system test trap],
253
+ 'Net::HTTP' => :all,
254
+ 'Pathname' => :all,
255
+ # TODO(cretz): Investigate why clock_gettime called from Timeout thread affects this code at all. Stack trace
256
+ # test executing activities inside a timeout will fail if clock_gettime is blocked.
257
+ 'Process' => %i[abort argv0 daemon detach exec exit exit! fork kill setpriority setproctitle setrlimit setsid
258
+ spawn times wait wait2 waitall warmup],
259
+ # TODO(cretz): Allow Ractor.current since exception formatting in error_highlight references it
260
+ # 'Ractor' => :all,
261
+ 'Random::Base' => [:initialize],
262
+ 'Resolv' => :all,
263
+ 'SecureRandom' => :all,
264
+ 'Signal' => :all,
265
+ 'Socket' => :all,
266
+ 'Tempfile' => :all,
267
+ 'Thread' => %i[abort_on_exception= exit fork handle_interrupt ignore_deadlock= kill new pass
268
+ pending_interrupt? report_on_exception= start stop initialize join name= priority= raise run
269
+ terminate thread_variable_set wakeup],
270
+ 'Time' => %i[initialize now]
271
+ } #: Hash[String, :all | Array[Symbol]]
272
+ hash.each_value(&:freeze)
273
+ hash.freeze
274
+ end
42
275
  end
43
276
 
44
- # Create a worker to process activities.
45
- #
46
- # @param connection [Temporalio::Connection] A connection to be used for this worker.
47
- # @param namespace [String] A namespace.
48
- # @param task_queue [String] A task queue.
49
- # @param activities [Array<Class>] A list of activities (subclasses of {Temporalio::Activity}).
50
- # @param data_converter [Temporalio::DataConverter] Data converter to use for all data conversions
51
- # to/from payloads.
52
- # @param activity_executor [ThreadPoolExecutor] Concurrent executor for all activities. Defaults
53
- # to a {ThreadPoolExecutor} with `:max_concurrent_activities` available threads.
54
- # @param interceptors [Array<Temporalio::Interceptor::ActivityInbound, Temporalio::Interceptor::ActivityOutbound>]
55
- # Collection of interceptors for this worker.
56
- # @param max_concurrent_activities [Integer] Number of concurrently running activities.
57
- # @param graceful_shutdown_timeout [Integer] Amount of time (in seconds) activities are given
58
- # after a shutdown to complete before they are cancelled. A default value of `nil` means that
59
- # activities are never cancelled when handling a shutdown.
277
+ # @return [Options] Frozen options for this client which has the same attributes as {initialize}.
278
+ attr_reader :options
279
+
280
+ # Create a new worker. At least one activity or workflow must be present.
60
281
  #
61
- # @raise [ArgumentError] When no activities have been provided.
282
+ # @param client [Client] Client for this worker.
283
+ # @param task_queue [String] Task queue for this worker.
284
+ # @param activities [Array<Activity::Definition, Class<Activity::Definition>, Activity::Definition::Info>]
285
+ # Activities for this worker.
286
+ # @param workflows [Array<Class<Workflow::Definition>>] Workflows for this worker.
287
+ # @param tuner [Tuner] Tuner that controls the amount of concurrent activities/workflows that run at a time.
288
+ # @param activity_executors [Hash<Symbol, Worker::ActivityExecutor>] Executors that activities can run within.
289
+ # @param workflow_executor [WorkflowExecutor] Workflow executor that workflow tasks run within. This must be a
290
+ # {WorkflowExecutor::ThreadPool} currently.
291
+ # @param interceptors [Array<Interceptor::Activity, Interceptor::Workflow>] Interceptors specific to this worker.
292
+ # Note, interceptors set on the client that include the {Interceptor::Activity} or {Interceptor::Workflow} module
293
+ # are automatically included here, so no need to specify them again.
294
+ # @param build_id [String] Unique identifier for the current runtime. This is best set as a unique value
295
+ # representing all code and should change only when code does. This can be something like a git commit hash. If
296
+ # unset, default is hash of known Ruby code.
297
+ # @param identity [String, nil] Override the identity for this worker. If unset, client identity is used.
298
+ # @param logger [Logger] Logger to override client logger with. Default is the client logger.
299
+ # @param max_cached_workflows [Integer] Number of workflows held in cache for use by sticky task queue. If set to 0,
300
+ # workflow caching and sticky queuing are disabled.
301
+ # @param max_concurrent_workflow_task_polls [Integer] Maximum number of concurrent poll workflow task requests we
302
+ # will perform at a time on this worker's task queue.
303
+ # @param nonsticky_to_sticky_poll_ratio [Float] `max_concurrent_workflow_task_polls` * this number = the number of
304
+ # max pollers that will be allowed for the nonsticky queue when sticky tasks are enabled. If both defaults are
305
+ # used, the sticky queue will allow 4 max pollers while the nonsticky queue will allow one. The minimum for either
306
+ # poller is 1, so if `max_concurrent_workflow_task_polls` is 1 and sticky queues are enabled, there will be 2
307
+ # concurrent polls.
308
+ # @param max_concurrent_activity_task_polls [Integer] Maximum number of concurrent poll activity task requests we
309
+ # will perform at a time on this worker's task queue.
310
+ # @param no_remote_activities [Boolean] If true, this worker will only handle workflow tasks and local activities,
311
+ # it will not poll for activity tasks.
312
+ # @param sticky_queue_schedule_to_start_timeout [Float] How long a workflow task is allowed to sit on the sticky
313
+ # queue before it is timed out and moved to the non-sticky queue where it may be picked up by any worker.
314
+ # @param max_heartbeat_throttle_interval [Float] Longest interval for throttling activity heartbeats.
315
+ # @param default_heartbeat_throttle_interval [Float] Default interval for throttling activity heartbeats in case
316
+ # per-activity heartbeat timeout is unset. Otherwise, it's the per-activity heartbeat timeout * 0.8.
317
+ # @param max_activities_per_second [Float, nil] Limits the number of activities per second that this worker will
318
+ # process. The worker will not poll for new activities if by doing so it might receive and execute an activity
319
+ # which would cause it to exceed this limit.
320
+ # @param max_task_queue_activities_per_second [Float, nil] Sets the maximum number of activities per second the task
321
+ # queue will dispatch, controlled server-side. Note that this only takes effect upon an activity poll request. If
322
+ # multiple workers on the same queue have different values set, they will thrash with the last poller winning.
323
+ # @param graceful_shutdown_period [Float] Amount of time after shutdown is called that activities are given to
324
+ # complete before their tasks are canceled.
325
+ # @param use_worker_versioning [Boolean] If true, the `build_id` argument must be specified, and this worker opts
326
+ # into the worker versioning feature. This ensures it only receives workflow tasks for workflows which it claims
327
+ # to be compatible with. For more information, see https://docs.temporal.io/workers#worker-versioning.
328
+ # @param disable_eager_activity_execution [Boolean] If true, disables eager activity execution. Eager activity
329
+ # execution is an optimization on some servers that sends activities back to the same worker as the calling
330
+ # workflow if they can run there. This should be set to true for `max_task_queue_activities_per_second` to work
331
+ # and in a future version of this API may be implied as such (i.e. this setting will be ignored if that setting is
332
+ # set).
333
+ # @param illegal_workflow_calls [Hash<String, [:all, Array<Symbol>]>] Set of illegal workflow calls that are
334
+ # considered unsafe/non-deterministic and will raise if seen. The key of the hash is the fully qualified string
335
+ # class name (no leading `::`). The value is either `:all` which means any use of the class, or an array of
336
+ # symbols for methods on the class that cannot be used. The methods refer to either instance or class methods,
337
+ # there is no way to differentiate at this time.
338
+ # @param workflow_failure_exception_types [Array<Class<Exception>>] Workflow failure exception types. This is the
339
+ # set of exception types that, if a workflow-thrown exception extends, will cause the workflow/update to fail
340
+ # instead of suspending the workflow via task failure. These are applied in addition to the
341
+ # `workflow_failure_exception_type` on the workflow definition class itself. If {::Exception} is set, it
342
+ # effectively will fail a workflow/update in all user exception cases.
343
+ # @param workflow_payload_codec_thread_pool [ThreadPool, nil] Thread pool to run payload codec encode/decode within.
344
+ # This is required if a payload codec exists and the worker is not fiber based. Codecs can potentially block
345
+ # execution which is why they need to be run in the background.
346
+ # @param debug_mode [Boolean] If true, deadlock detection is disabled. Deadlock detection will fail workflow tasks
347
+ # if they block the thread for too long. This defaults to true if the `TEMPORAL_DEBUG` environment variable is
348
+ # `true` or `1`.
62
349
  def initialize(
63
- connection,
64
- namespace,
65
- task_queue,
350
+ client:,
351
+ task_queue:,
66
352
  activities: [],
67
- data_converter: Temporalio::DataConverter.new,
68
- activity_executor: nil,
353
+ workflows: [],
354
+ tuner: Tuner.create_fixed,
355
+ activity_executors: ActivityExecutor.defaults,
356
+ workflow_executor: WorkflowExecutor::ThreadPool.default,
69
357
  interceptors: [],
70
- max_concurrent_activities: 100,
71
- graceful_shutdown_timeout: nil
358
+ build_id: Worker.default_build_id,
359
+ identity: nil,
360
+ logger: client.options.logger,
361
+ max_cached_workflows: 1000,
362
+ max_concurrent_workflow_task_polls: 5,
363
+ nonsticky_to_sticky_poll_ratio: 0.2,
364
+ max_concurrent_activity_task_polls: 5,
365
+ no_remote_activities: false,
366
+ sticky_queue_schedule_to_start_timeout: 10,
367
+ max_heartbeat_throttle_interval: 60,
368
+ default_heartbeat_throttle_interval: 30,
369
+ max_activities_per_second: nil,
370
+ max_task_queue_activities_per_second: nil,
371
+ graceful_shutdown_period: 0,
372
+ use_worker_versioning: false,
373
+ disable_eager_activity_execution: false,
374
+ illegal_workflow_calls: Worker.default_illegal_workflow_calls,
375
+ workflow_failure_exception_types: [],
376
+ workflow_payload_codec_thread_pool: nil,
377
+ debug_mode: %w[true 1].include?(ENV['TEMPORAL_DEBUG'].to_s.downcase)
72
378
  )
73
- @started = false
74
- @shutdown = false
75
- @mutex = Mutex.new
76
- @runtime = Temporalio::Runtime.instance
77
- @activity_executor = activity_executor || ThreadPoolExecutor.new(max_concurrent_activities)
78
- @core_worker = Temporalio::Bridge::Worker.create(
79
- @runtime.core_runtime,
80
- connection.core_connection,
81
- namespace,
82
- task_queue,
83
- 0, # maxCachedWorkflows disabled temporarily
84
- # FIXME: expose enable_non_local_activities
85
- activities.empty?,
86
- )
87
- sync_worker = Worker::SyncWorker.new(@core_worker)
88
- @activity_worker =
89
- unless activities.empty?
90
- Worker::ActivityWorker.new(
91
- task_queue,
92
- sync_worker,
93
- activities,
94
- data_converter,
95
- interceptors,
96
- @activity_executor,
97
- graceful_shutdown_timeout,
98
- )
379
+ raise ArgumentError, 'Must have at least one activity or workflow' if activities.empty? && workflows.empty?
380
+
381
+ @options = Options.new(
382
+ client:,
383
+ task_queue:,
384
+ activities:,
385
+ workflows:,
386
+ tuner:,
387
+ activity_executors:,
388
+ workflow_executor:,
389
+ interceptors:,
390
+ build_id:,
391
+ identity:,
392
+ logger:,
393
+ max_cached_workflows:,
394
+ max_concurrent_workflow_task_polls:,
395
+ nonsticky_to_sticky_poll_ratio:,
396
+ max_concurrent_activity_task_polls:,
397
+ no_remote_activities:,
398
+ sticky_queue_schedule_to_start_timeout:,
399
+ max_heartbeat_throttle_interval:,
400
+ default_heartbeat_throttle_interval:,
401
+ max_activities_per_second:,
402
+ max_task_queue_activities_per_second:,
403
+ graceful_shutdown_period:,
404
+ use_worker_versioning:,
405
+ disable_eager_activity_execution:,
406
+ illegal_workflow_calls:,
407
+ workflow_failure_exception_types:,
408
+ workflow_payload_codec_thread_pool:,
409
+ debug_mode:
410
+ ).freeze
411
+
412
+ # Preload workflow definitions and some workflow settings for the bridge
413
+ workflow_definitions = Internal::Worker::WorkflowWorker.workflow_definitions(workflows)
414
+ nondeterminism_as_workflow_fail = workflow_failure_exception_types.any? do |t|
415
+ t.is_a?(Class) && t >= Workflow::NondeterminismError
416
+ end
417
+ nondeterminism_as_workflow_fail_for_types = workflow_definitions.values.map do |defn|
418
+ next unless defn.failure_exception_types.any? { |t| t.is_a?(Class) && t >= Workflow::NondeterminismError }
419
+
420
+ # If they tried to do this on a dynamic workflow and haven't already set worker-level option, warn
421
+ unless defn.name || nondeterminism_as_workflow_fail
422
+ warn('Note, dynamic workflows cannot trap non-determinism errors, so worker-level ' \
423
+ 'workflow_failure_exception_types should be set to capture that if that is the intention')
99
424
  end
425
+ defn.name
426
+ end.compact
427
+
428
+ # Create the bridge worker
429
+ @bridge_worker = Internal::Bridge::Worker.new(
430
+ client.connection._core_client,
431
+ Internal::Bridge::Worker::Options.new(
432
+ activity: !activities.empty?,
433
+ workflow: !workflows.empty?,
434
+ namespace: client.namespace,
435
+ task_queue:,
436
+ tuner: Internal::Bridge::Worker::TunerOptions.new(
437
+ workflow_slot_supplier: to_bridge_slot_supplier_options(tuner.workflow_slot_supplier),
438
+ activity_slot_supplier: to_bridge_slot_supplier_options(tuner.activity_slot_supplier),
439
+ local_activity_slot_supplier: to_bridge_slot_supplier_options(tuner.local_activity_slot_supplier)
440
+ ),
441
+ build_id:,
442
+ identity_override: identity,
443
+ max_cached_workflows:,
444
+ max_concurrent_workflow_task_polls:,
445
+ nonsticky_to_sticky_poll_ratio:,
446
+ max_concurrent_activity_task_polls:,
447
+ # For shutdown to work properly, we must disable remote activities
448
+ # ourselves if there are no activities
449
+ no_remote_activities: no_remote_activities || activities.empty?,
450
+ sticky_queue_schedule_to_start_timeout:,
451
+ max_heartbeat_throttle_interval:,
452
+ default_heartbeat_throttle_interval:,
453
+ max_worker_activities_per_second: max_activities_per_second,
454
+ max_task_queue_activities_per_second:,
455
+ graceful_shutdown_period:,
456
+ use_worker_versioning:,
457
+ nondeterminism_as_workflow_fail:,
458
+ nondeterminism_as_workflow_fail_for_types:
459
+ )
460
+ )
100
461
 
101
- unless @activity_worker
102
- raise ArgumentError, 'At least one activity must be specified'
462
+ # Collect interceptors from client and params
463
+ @activity_interceptors = (client.options.interceptors + interceptors).select do |i|
464
+ i.is_a?(Interceptor::Activity)
103
465
  end
466
+ @workflow_interceptors = (client.options.interceptors + interceptors).select do |i|
467
+ i.is_a?(Interceptor::Workflow)
468
+ end
469
+
470
+ # Cancellation for the whole worker
471
+ @worker_shutdown_cancellation = Cancellation.new
472
+
473
+ # Create workers
474
+ unless activities.empty?
475
+ @activity_worker = Internal::Worker::ActivityWorker.new(worker: self,
476
+ bridge_worker: @bridge_worker)
477
+ end
478
+ unless workflows.empty?
479
+ @workflow_worker = Internal::Worker::WorkflowWorker.new(worker: self,
480
+ bridge_worker: @bridge_worker,
481
+ workflow_definitions:)
482
+ end
483
+
484
+ # Validate worker
485
+ @bridge_worker.validate
104
486
  end
105
487
 
106
- # Run the worker and wait on it to be shut down.
107
- #
108
- # This will not return until shutdown is complete (and all running activities finished) and will
109
- # raise if there is a worker fatal error. To run multiple workers use the class method {.run}.
110
- #
111
- # @note A worker is only intended to be started once. Initialize a new worker should you need to
112
- # run it again.
113
- #
114
- # @yield Optionally you can provide a block by the end of which the worker will shut itself
115
- # down. You can use this to stop a worker after some time has passed or any other arbitrary
116
- # implementation has completed. Any errors raised from this block will be re-raised by this
117
- # method.
118
- def run(&block)
119
- Runner.new(self).run(&block)
488
+ # @return [String] Task queue set on the worker options.
489
+ def task_queue
490
+ @options.task_queue
120
491
  end
121
492
 
122
- # Start the worker asynchronously in a shared runtime.
123
- #
124
- # This is an internal method for advanced use-cases for those intended to implement their own
125
- # worker runner.
126
- #
127
- # @note A worker is only intended to be started once. Initialize a new worker should you need to
128
- # start it again.
493
+ # Run this worker until cancellation or optional block completes. When the cancellation or block is complete, the
494
+ # worker is shut down. This will return the block result if everything successful or raise an error if not.
129
495
  #
130
- # @api private
496
+ # Upon shutdown (either via cancellation, block completion, or worker fatal error), the worker immediately stops
497
+ # accepting new work. Then, after an optional grace period, all activities are canceled. This call then waits for
498
+ # every activity and workflow task to complete before returning.
131
499
  #
132
- # @param runner [Temporalio::Worker::Runner] A runner to notify when the worker is shutting down.
133
- def start(runner = nil)
134
- mutex.synchronize do
135
- raise 'Worker is already started' if started?
500
+ # @param cancellation [Cancellation] Cancellation that can be canceled to shut down this worker.
501
+ # @param shutdown_signals [Array] Signals to trap and cause worker shutdown.
502
+ # @param raise_in_block_on_shutdown [Exception, nil] Exception to {::Thread.raise} or {::Fiber.raise} if a block is
503
+ # present and still running on shutdown. If nil, `raise` is not used.
504
+ # @param wait_block_complete [Boolean] If block given and shutdown caused by something else (e.g. cancellation
505
+ # canceled), whether to wait on the block to complete before returning.
506
+ # @yield Optional block. This will be run in a new background thread or fiber. Worker will shut down upon completion
507
+ # of this and, assuming no other failures, return/bubble success/exception of the block.
508
+ # @return [Object] Return value of the block or nil of no block given.
509
+ def run(
510
+ cancellation: Cancellation.new,
511
+ shutdown_signals: [],
512
+ raise_in_block_on_shutdown: Error::CanceledError.new('Workers finished'),
513
+ wait_block_complete: true,
514
+ &block
515
+ )
516
+ Worker.run_all(self, cancellation:, shutdown_signals:, raise_in_block_on_shutdown:, wait_block_complete:, &block)
517
+ end
136
518
 
137
- @started = true
138
- end
519
+ # @!visibility private
520
+ def _worker_shutdown_cancellation
521
+ @worker_shutdown_cancellation
522
+ end
139
523
 
140
- @runner = runner
141
- runtime.ensure_callback_loop
524
+ # @!visibility private
525
+ def _initiate_shutdown
526
+ _bridge_worker.initiate_shutdown
527
+ _, cancel_proc = _worker_shutdown_cancellation
528
+ cancel_proc.call
529
+ end
142
530
 
143
- runtime.reactor.async do |task|
144
- if activity_worker
145
- task.async do |task|
146
- activity_worker.run(task)
147
- rescue StandardError => e
148
- shutdown(e) # initiate shutdown because of a fatal error
149
- end
150
- end
151
- end
531
+ # @!visibility private
532
+ def _wait_all_complete
533
+ @activity_worker&.wait_all_complete
152
534
  end
153
535
 
154
- # Initiate a worker shutdown and wait until complete.
155
- #
156
- # This can be called before the worker has even started and is safe for repeated invocations.
157
- # This method will not return until the worker has completed shutting down.
158
- #
159
- # @param exception [Exception] An exception to be raised from {#run} or {.run} methods after a
160
- # shutdown procedure has completed.
161
- def shutdown(exception = Temporalio::Error::WorkerShutdown.new('Manual shutdown'))
162
- mutex.synchronize do
163
- return unless running?
164
-
165
- # Let the runner know we're shutting down, so it can stop other workers.
166
- # This will cause a reentrant call to this method, but the mutex above will block that call.
167
- runner&.shutdown(exception)
168
-
169
- # Initiate Core shutdown, which will start dropping poll requests
170
- core_worker.initiate_shutdown
171
- # Start the graceful activity shutdown timer, which will cancel activities after the timeout
172
- activity_worker&.setup_graceful_shutdown_timer(runtime.reactor)
173
- # Wait for workers to drain any outstanding tasks
174
- activity_worker&.drain
175
- activity_executor.shutdown
176
- # Finalize the shutdown by stopping the Core
177
- core_worker.finalize_shutdown
178
-
179
- @shutdown = true
180
- end
536
+ # @!visibility private
537
+ def _bridge_worker
538
+ @bridge_worker
181
539
  end
182
540
 
183
- # Whether the worker has been started.
184
- #
185
- # @return [Boolean]
186
- def started?
187
- @started
541
+ # @!visibility private
542
+ def _activity_interceptors
543
+ @activity_interceptors
188
544
  end
189
545
 
190
- # Whether the worker is running.
191
- #
192
- # This is only `true` if the worker has been started and not yet shut down.
193
- #
194
- # @return [Boolean]
195
- def running?
196
- @started && !@shutdown
546
+ # @!visibility private
547
+ def _workflow_interceptors
548
+ @workflow_interceptors
549
+ end
550
+
551
+ # @!visibility private
552
+ def _on_poll_bytes(runner, worker_type, bytes)
553
+ case worker_type
554
+ when :activity
555
+ @activity_worker.handle_task(Internal::Bridge::Api::ActivityTask::ActivityTask.decode(bytes))
556
+ when :workflow
557
+ @workflow_worker.handle_activation(
558
+ runner:,
559
+ activation: Internal::Bridge::Api::WorkflowActivation::WorkflowActivation.decode(bytes),
560
+ decoded: false
561
+ )
562
+ else
563
+ raise "Unrecognized worker type #{worker_type}"
564
+ end
565
+ end
566
+
567
+ # @!visibility private
568
+ def _on_shutdown_complete
569
+ @workflow_worker&.on_shutdown_complete
570
+ @workflow_worker = nil
197
571
  end
198
572
 
199
573
  private
200
574
 
201
- attr_reader :mutex, :runtime, :activity_executor, :core_worker, :activity_worker,
202
- :runner
575
+ def to_bridge_slot_supplier_options(slot_supplier)
576
+ if slot_supplier.is_a?(Tuner::SlotSupplier::Fixed)
577
+ Internal::Bridge::Worker::TunerSlotSupplierOptions.new(
578
+ fixed_size: slot_supplier.slots,
579
+ resource_based: nil
580
+ )
581
+ elsif slot_supplier.is_a?(Tuner::SlotSupplier::ResourceBased)
582
+ Internal::Bridge::Worker::TunerSlotSupplierOptions.new(
583
+ fixed_size: nil,
584
+ resource_based: Internal::Bridge::Worker::TunerResourceBasedSlotSupplierOptions.new(
585
+ target_mem_usage: slot_supplier.tuner_options.target_memory_usage,
586
+ target_cpu_usage: slot_supplier.tuner_options.target_cpu_usage,
587
+ min_slots: slot_supplier.slot_options.min_slots,
588
+ max_slots: slot_supplier.slot_options.max_slots,
589
+ ramp_throttle: slot_supplier.slot_options.ramp_throttle
590
+ )
591
+ )
592
+ else
593
+ raise ArgumentError, 'Tuner slot suppliers must be instances of Fixed or ResourceBased'
594
+ end
595
+ end
203
596
  end
204
597
  end