temporalio 0.0.1 → 0.1.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 (310) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +180 -7
  3. data/bridge/Cargo.lock +208 -76
  4. data/bridge/Cargo.toml +5 -2
  5. data/bridge/sdk-core/Cargo.toml +1 -1
  6. data/bridge/sdk-core/README.md +20 -10
  7. data/bridge/sdk-core/client/Cargo.toml +1 -1
  8. data/bridge/sdk-core/client/src/lib.rs +227 -59
  9. data/bridge/sdk-core/client/src/metrics.rs +17 -8
  10. data/bridge/sdk-core/client/src/raw.rs +13 -12
  11. data/bridge/sdk-core/client/src/retry.rs +132 -43
  12. data/bridge/sdk-core/core/Cargo.toml +28 -15
  13. data/bridge/sdk-core/core/benches/workflow_replay.rs +13 -10
  14. data/bridge/sdk-core/core/src/abstractions.rs +225 -36
  15. data/bridge/sdk-core/core/src/core_tests/activity_tasks.rs +217 -79
  16. data/bridge/sdk-core/core/src/core_tests/determinism.rs +165 -2
  17. data/bridge/sdk-core/core/src/core_tests/local_activities.rs +565 -34
  18. data/bridge/sdk-core/core/src/core_tests/queries.rs +247 -90
  19. data/bridge/sdk-core/core/src/core_tests/workers.rs +3 -5
  20. data/bridge/sdk-core/core/src/core_tests/workflow_cancels.rs +1 -1
  21. data/bridge/sdk-core/core/src/core_tests/workflow_tasks.rs +430 -67
  22. data/bridge/sdk-core/core/src/ephemeral_server/mod.rs +106 -12
  23. data/bridge/sdk-core/core/src/internal_flags.rs +136 -0
  24. data/bridge/sdk-core/core/src/lib.rs +148 -34
  25. data/bridge/sdk-core/core/src/protosext/mod.rs +1 -1
  26. data/bridge/sdk-core/core/src/replay/mod.rs +185 -41
  27. data/bridge/sdk-core/core/src/telemetry/log_export.rs +190 -0
  28. data/bridge/sdk-core/core/src/telemetry/metrics.rs +219 -140
  29. data/bridge/sdk-core/core/src/telemetry/mod.rs +326 -315
  30. data/bridge/sdk-core/core/src/telemetry/prometheus_server.rs +20 -14
  31. data/bridge/sdk-core/core/src/test_help/mod.rs +85 -21
  32. data/bridge/sdk-core/core/src/worker/activities/activity_heartbeat_manager.rs +112 -156
  33. data/bridge/sdk-core/core/src/worker/activities/activity_task_poller_stream.rs +89 -0
  34. data/bridge/sdk-core/core/src/worker/activities/local_activities.rs +364 -128
  35. data/bridge/sdk-core/core/src/worker/activities.rs +263 -170
  36. data/bridge/sdk-core/core/src/worker/client/mocks.rs +23 -3
  37. data/bridge/sdk-core/core/src/worker/client.rs +48 -6
  38. data/bridge/sdk-core/core/src/worker/mod.rs +186 -75
  39. data/bridge/sdk-core/core/src/worker/workflow/bridge.rs +1 -3
  40. data/bridge/sdk-core/core/src/worker/workflow/driven_workflow.rs +13 -24
  41. data/bridge/sdk-core/core/src/worker/workflow/history_update.rs +879 -226
  42. data/bridge/sdk-core/core/src/worker/workflow/machines/activity_state_machine.rs +101 -48
  43. data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_external_state_machine.rs +8 -12
  44. data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +6 -9
  45. data/bridge/sdk-core/core/src/worker/workflow/machines/child_workflow_state_machine.rs +90 -32
  46. data/bridge/sdk-core/core/src/worker/workflow/machines/complete_workflow_state_machine.rs +6 -9
  47. data/bridge/sdk-core/core/src/worker/workflow/machines/continue_as_new_workflow_state_machine.rs +7 -10
  48. data/bridge/sdk-core/core/src/worker/workflow/machines/fail_workflow_state_machine.rs +6 -9
  49. data/bridge/sdk-core/core/src/worker/workflow/machines/local_activity_state_machine.rs +160 -83
  50. data/bridge/sdk-core/core/src/worker/workflow/machines/mod.rs +36 -54
  51. data/bridge/sdk-core/core/src/worker/workflow/machines/modify_workflow_properties_state_machine.rs +179 -0
  52. data/bridge/sdk-core/core/src/worker/workflow/machines/patch_state_machine.rs +104 -157
  53. data/bridge/sdk-core/core/src/worker/workflow/machines/signal_external_state_machine.rs +8 -12
  54. data/bridge/sdk-core/core/src/worker/workflow/machines/timer_state_machine.rs +9 -13
  55. data/bridge/sdk-core/core/src/worker/workflow/machines/transition_coverage.rs +10 -4
  56. data/bridge/sdk-core/core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +14 -11
  57. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines/local_acts.rs +6 -17
  58. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines.rs +395 -299
  59. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_task_state_machine.rs +12 -20
  60. data/bridge/sdk-core/core/src/worker/workflow/managed_run/managed_wf_test.rs +33 -18
  61. data/bridge/sdk-core/core/src/worker/workflow/managed_run.rs +1032 -374
  62. data/bridge/sdk-core/core/src/worker/workflow/mod.rs +525 -392
  63. data/bridge/sdk-core/core/src/worker/workflow/run_cache.rs +40 -57
  64. data/bridge/sdk-core/core/src/worker/workflow/wft_extraction.rs +125 -0
  65. data/bridge/sdk-core/core/src/worker/workflow/wft_poller.rs +3 -6
  66. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream/saved_wf_inputs.rs +117 -0
  67. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream/tonic_status_serde.rs +24 -0
  68. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream.rs +456 -681
  69. data/bridge/sdk-core/core-api/Cargo.toml +6 -4
  70. data/bridge/sdk-core/core-api/src/errors.rs +1 -34
  71. data/bridge/sdk-core/core-api/src/lib.rs +7 -45
  72. data/bridge/sdk-core/core-api/src/telemetry.rs +141 -0
  73. data/bridge/sdk-core/core-api/src/worker.rs +27 -1
  74. data/bridge/sdk-core/etc/deps.svg +115 -140
  75. data/bridge/sdk-core/etc/regen-depgraph.sh +5 -0
  76. data/bridge/sdk-core/fsm/rustfsm_procmacro/src/lib.rs +18 -15
  77. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.stderr +1 -1
  78. data/bridge/sdk-core/fsm/rustfsm_trait/src/lib.rs +8 -3
  79. data/bridge/sdk-core/histories/evict_while_la_running_no_interference-16_history.bin +0 -0
  80. data/bridge/sdk-core/histories/evict_while_la_running_no_interference-23_history.bin +0 -0
  81. data/bridge/sdk-core/histories/evict_while_la_running_no_interference-85_history.bin +0 -0
  82. data/bridge/sdk-core/protos/api_upstream/buf.yaml +0 -3
  83. data/bridge/sdk-core/protos/api_upstream/build/go.mod +7 -0
  84. data/bridge/sdk-core/protos/api_upstream/build/go.sum +5 -0
  85. data/bridge/sdk-core/protos/api_upstream/{temporal/api/enums/v1/cluster.proto → build/tools.go} +7 -18
  86. data/bridge/sdk-core/protos/api_upstream/go.mod +6 -0
  87. data/bridge/sdk-core/protos/api_upstream/temporal/api/batch/v1/message.proto +12 -9
  88. data/bridge/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +15 -26
  89. data/bridge/sdk-core/protos/api_upstream/temporal/api/common/v1/message.proto +13 -2
  90. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/batch_operation.proto +3 -2
  91. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/command_type.proto +4 -9
  92. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/common.proto +3 -2
  93. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/event_type.proto +10 -8
  94. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +28 -2
  95. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/namespace.proto +2 -2
  96. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/query.proto +2 -2
  97. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/reset.proto +2 -2
  98. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/schedule.proto +2 -2
  99. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +2 -2
  100. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/update.proto +24 -19
  101. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/workflow.proto +2 -2
  102. data/bridge/sdk-core/protos/api_upstream/temporal/api/errordetails/v1/message.proto +2 -2
  103. data/bridge/sdk-core/protos/api_upstream/temporal/api/failure/v1/message.proto +2 -2
  104. data/bridge/sdk-core/protos/api_upstream/temporal/api/filter/v1/message.proto +2 -2
  105. data/bridge/sdk-core/protos/api_upstream/temporal/api/history/v1/message.proto +62 -26
  106. data/bridge/sdk-core/protos/api_upstream/temporal/api/namespace/v1/message.proto +4 -2
  107. data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +24 -61
  108. data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/service.proto +2 -21
  109. data/bridge/sdk-core/protos/api_upstream/temporal/api/protocol/v1/message.proto +57 -0
  110. data/bridge/sdk-core/protos/api_upstream/temporal/api/query/v1/message.proto +2 -2
  111. data/bridge/sdk-core/protos/api_upstream/temporal/api/replication/v1/message.proto +2 -2
  112. data/bridge/sdk-core/protos/api_upstream/temporal/api/schedule/v1/message.proto +110 -31
  113. data/bridge/sdk-core/protos/api_upstream/temporal/api/sdk/v1/task_complete_metadata.proto +63 -0
  114. data/bridge/sdk-core/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +4 -4
  115. data/bridge/sdk-core/protos/api_upstream/temporal/api/update/v1/message.proto +71 -6
  116. data/bridge/sdk-core/protos/api_upstream/temporal/api/version/v1/message.proto +2 -2
  117. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflow/v1/message.proto +3 -2
  118. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +111 -36
  119. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +19 -5
  120. data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_result/activity_result.proto +1 -0
  121. data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_task/activity_task.proto +1 -0
  122. data/bridge/sdk-core/protos/local/temporal/sdk/core/child_workflow/child_workflow.proto +1 -0
  123. data/bridge/sdk-core/protos/local/temporal/sdk/core/common/common.proto +1 -0
  124. data/bridge/sdk-core/protos/local/temporal/sdk/core/core_interface.proto +1 -0
  125. data/bridge/sdk-core/protos/local/temporal/sdk/core/external_data/external_data.proto +1 -0
  126. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +9 -0
  127. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +9 -1
  128. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_completion/workflow_completion.proto +6 -0
  129. data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/request_response.proto +2 -2
  130. data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/service.proto +2 -2
  131. data/bridge/sdk-core/sdk/Cargo.toml +4 -3
  132. data/bridge/sdk-core/sdk/src/interceptors.rs +36 -3
  133. data/bridge/sdk-core/sdk/src/lib.rs +94 -25
  134. data/bridge/sdk-core/sdk/src/workflow_context.rs +13 -2
  135. data/bridge/sdk-core/sdk/src/workflow_future.rs +10 -13
  136. data/bridge/sdk-core/sdk-core-protos/Cargo.toml +5 -2
  137. data/bridge/sdk-core/sdk-core-protos/build.rs +36 -2
  138. data/bridge/sdk-core/sdk-core-protos/src/history_builder.rs +164 -104
  139. data/bridge/sdk-core/sdk-core-protos/src/history_info.rs +27 -23
  140. data/bridge/sdk-core/sdk-core-protos/src/lib.rs +252 -74
  141. data/bridge/sdk-core/sdk-core-protos/src/task_token.rs +12 -2
  142. data/bridge/sdk-core/test-utils/Cargo.toml +4 -1
  143. data/bridge/sdk-core/test-utils/src/canned_histories.rs +106 -296
  144. data/bridge/sdk-core/test-utils/src/histfetch.rs +1 -1
  145. data/bridge/sdk-core/test-utils/src/lib.rs +161 -50
  146. data/bridge/sdk-core/test-utils/src/wf_input_saver.rs +50 -0
  147. data/bridge/sdk-core/test-utils/src/workflows.rs +29 -0
  148. data/bridge/sdk-core/tests/fuzzy_workflow.rs +130 -0
  149. data/bridge/sdk-core/tests/{load_tests.rs → heavy_tests.rs} +125 -51
  150. data/bridge/sdk-core/tests/integ_tests/ephemeral_server_tests.rs +25 -3
  151. data/bridge/sdk-core/tests/integ_tests/heartbeat_tests.rs +10 -5
  152. data/bridge/sdk-core/tests/integ_tests/metrics_tests.rs +239 -0
  153. data/bridge/sdk-core/tests/integ_tests/polling_tests.rs +4 -60
  154. data/bridge/sdk-core/tests/integ_tests/queries_tests.rs +5 -128
  155. data/bridge/sdk-core/tests/integ_tests/visibility_tests.rs +83 -25
  156. data/bridge/sdk-core/tests/integ_tests/workflow_tests/activities.rs +93 -69
  157. data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +1 -0
  158. data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +6 -13
  159. data/bridge/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +1 -0
  160. data/bridge/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +6 -2
  161. data/bridge/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +3 -10
  162. data/bridge/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +151 -116
  163. data/bridge/sdk-core/tests/integ_tests/workflow_tests/modify_wf_properties.rs +54 -0
  164. data/bridge/sdk-core/tests/integ_tests/workflow_tests/patches.rs +7 -28
  165. data/bridge/sdk-core/tests/integ_tests/workflow_tests/replay.rs +115 -24
  166. data/bridge/sdk-core/tests/integ_tests/workflow_tests/resets.rs +1 -0
  167. data/bridge/sdk-core/tests/integ_tests/workflow_tests/signals.rs +18 -14
  168. data/bridge/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +6 -20
  169. data/bridge/sdk-core/tests/integ_tests/workflow_tests/timers.rs +10 -21
  170. data/bridge/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +6 -4
  171. data/bridge/sdk-core/tests/integ_tests/workflow_tests.rs +27 -18
  172. data/bridge/sdk-core/tests/main.rs +8 -16
  173. data/bridge/sdk-core/tests/runner.rs +75 -36
  174. data/bridge/sdk-core/tests/wf_input_replay.rs +32 -0
  175. data/bridge/src/connection.rs +117 -82
  176. data/bridge/src/lib.rs +356 -42
  177. data/bridge/src/runtime.rs +10 -3
  178. data/bridge/src/test_server.rs +153 -0
  179. data/bridge/src/worker.rs +133 -9
  180. data/lib/gen/temporal/api/batch/v1/message_pb.rb +8 -6
  181. data/lib/gen/temporal/api/command/v1/message_pb.rb +10 -16
  182. data/lib/gen/temporal/api/common/v1/message_pb.rb +5 -1
  183. data/lib/gen/temporal/api/enums/v1/batch_operation_pb.rb +2 -1
  184. data/lib/gen/temporal/api/enums/v1/command_type_pb.rb +3 -3
  185. data/lib/gen/temporal/api/enums/v1/common_pb.rb +2 -1
  186. data/lib/gen/temporal/api/enums/v1/event_type_pb.rb +5 -4
  187. data/lib/gen/temporal/api/enums/v1/failed_cause_pb.rb +9 -1
  188. data/lib/gen/temporal/api/enums/v1/namespace_pb.rb +1 -1
  189. data/lib/gen/temporal/api/enums/v1/query_pb.rb +1 -1
  190. data/lib/gen/temporal/api/enums/v1/reset_pb.rb +1 -1
  191. data/lib/gen/temporal/api/enums/v1/schedule_pb.rb +1 -1
  192. data/lib/gen/temporal/api/enums/v1/task_queue_pb.rb +1 -1
  193. data/lib/gen/temporal/api/enums/v1/update_pb.rb +7 -10
  194. data/lib/gen/temporal/api/enums/v1/workflow_pb.rb +1 -1
  195. data/lib/gen/temporal/api/errordetails/v1/message_pb.rb +1 -1
  196. data/lib/gen/temporal/api/failure/v1/message_pb.rb +1 -1
  197. data/lib/gen/temporal/api/filter/v1/message_pb.rb +1 -1
  198. data/lib/gen/temporal/api/history/v1/message_pb.rb +34 -25
  199. data/lib/gen/temporal/api/namespace/v1/message_pb.rb +2 -1
  200. data/lib/gen/temporal/api/operatorservice/v1/request_response_pb.rb +14 -51
  201. data/lib/gen/temporal/api/operatorservice/v1/service_pb.rb +1 -1
  202. data/lib/gen/temporal/api/protocol/v1/message_pb.rb +30 -0
  203. data/lib/gen/temporal/api/query/v1/message_pb.rb +1 -1
  204. data/lib/gen/temporal/api/replication/v1/message_pb.rb +1 -1
  205. data/lib/gen/temporal/api/schedule/v1/message_pb.rb +22 -1
  206. data/lib/gen/temporal/api/sdk/v1/task_complete_metadata_pb.rb +23 -0
  207. data/lib/gen/temporal/api/taskqueue/v1/message_pb.rb +2 -2
  208. data/lib/gen/temporal/api/testservice/v1/request_response_pb.rb +49 -0
  209. data/lib/gen/temporal/api/testservice/v1/service_pb.rb +21 -0
  210. data/lib/gen/temporal/api/update/v1/message_pb.rb +49 -3
  211. data/lib/gen/temporal/api/version/v1/message_pb.rb +1 -1
  212. data/lib/gen/temporal/api/workflow/v1/message_pb.rb +2 -1
  213. data/lib/gen/temporal/api/workflowservice/v1/request_response_pb.rb +47 -20
  214. data/lib/gen/temporal/api/workflowservice/v1/service_pb.rb +1 -1
  215. data/lib/gen/temporal/sdk/core/activity_result/activity_result_pb.rb +13 -9
  216. data/lib/gen/temporal/sdk/core/activity_task/activity_task_pb.rb +10 -6
  217. data/lib/gen/temporal/sdk/core/child_workflow/child_workflow_pb.rb +13 -9
  218. data/lib/gen/temporal/sdk/core/common/common_pb.rb +7 -3
  219. data/lib/gen/temporal/sdk/core/core_interface_pb.rb +9 -3
  220. data/lib/gen/temporal/sdk/core/external_data/external_data_pb.rb +7 -3
  221. data/lib/gen/temporal/sdk/core/workflow_activation/workflow_activation_pb.rb +28 -21
  222. data/lib/gen/temporal/sdk/core/workflow_commands/workflow_commands_pb.rb +32 -24
  223. data/lib/gen/temporal/sdk/core/workflow_completion/workflow_completion_pb.rb +12 -5
  224. data/lib/temporalio/activity/context.rb +102 -0
  225. data/lib/temporalio/activity/info.rb +67 -0
  226. data/lib/temporalio/activity.rb +85 -0
  227. data/lib/temporalio/bridge/connect_options.rb +15 -0
  228. data/lib/temporalio/bridge/error.rb +8 -0
  229. data/lib/temporalio/bridge/retry_config.rb +24 -0
  230. data/lib/temporalio/bridge/tls_options.rb +19 -0
  231. data/lib/temporalio/bridge.rb +14 -0
  232. data/lib/{temporal → temporalio}/client/implementation.rb +57 -56
  233. data/lib/{temporal → temporalio}/client/workflow_handle.rb +35 -35
  234. data/lib/{temporal → temporalio}/client.rb +19 -32
  235. data/lib/temporalio/connection/retry_config.rb +44 -0
  236. data/lib/temporalio/connection/service.rb +20 -0
  237. data/lib/temporalio/connection/test_service.rb +92 -0
  238. data/lib/temporalio/connection/tls_options.rb +51 -0
  239. data/lib/temporalio/connection/workflow_service.rb +731 -0
  240. data/lib/temporalio/connection.rb +86 -0
  241. data/lib/{temporal → temporalio}/data_converter.rb +76 -35
  242. data/lib/{temporal → temporalio}/error/failure.rb +6 -6
  243. data/lib/{temporal → temporalio}/error/workflow_failure.rb +4 -2
  244. data/lib/{temporal → temporalio}/errors.rb +19 -1
  245. data/lib/{temporal → temporalio}/failure_converter/base.rb +5 -5
  246. data/lib/{temporal → temporalio}/failure_converter/basic.rb +58 -52
  247. data/lib/temporalio/failure_converter.rb +7 -0
  248. data/lib/temporalio/interceptor/activity_inbound.rb +22 -0
  249. data/lib/temporalio/interceptor/activity_outbound.rb +24 -0
  250. data/lib/{temporal → temporalio}/interceptor/chain.rb +7 -6
  251. data/lib/{temporal → temporalio}/interceptor/client.rb +27 -2
  252. data/lib/temporalio/interceptor.rb +22 -0
  253. data/lib/{temporal → temporalio}/payload_codec/base.rb +5 -5
  254. data/lib/{temporal → temporalio}/payload_converter/base.rb +3 -3
  255. data/lib/{temporal → temporalio}/payload_converter/bytes.rb +4 -3
  256. data/lib/{temporal → temporalio}/payload_converter/composite.rb +7 -5
  257. data/lib/{temporal → temporalio}/payload_converter/encoding_base.rb +4 -4
  258. data/lib/{temporal → temporalio}/payload_converter/json.rb +4 -3
  259. data/lib/{temporal → temporalio}/payload_converter/nil.rb +4 -3
  260. data/lib/temporalio/payload_converter.rb +14 -0
  261. data/lib/{temporal → temporalio}/retry_policy.rb +17 -7
  262. data/lib/{temporal → temporalio}/retry_state.rb +1 -1
  263. data/lib/temporalio/runtime.rb +25 -0
  264. data/lib/temporalio/testing/time_skipping_handle.rb +32 -0
  265. data/lib/temporalio/testing/time_skipping_interceptor.rb +23 -0
  266. data/lib/temporalio/testing/workflow_environment.rb +112 -0
  267. data/lib/temporalio/testing.rb +175 -0
  268. data/lib/{temporal → temporalio}/timeout_type.rb +2 -2
  269. data/lib/temporalio/version.rb +3 -0
  270. data/lib/temporalio/worker/activity_runner.rb +114 -0
  271. data/lib/temporalio/worker/activity_worker.rb +164 -0
  272. data/lib/temporalio/worker/reactor.rb +46 -0
  273. data/lib/temporalio/worker/runner.rb +63 -0
  274. data/lib/temporalio/worker/sync_worker.rb +124 -0
  275. data/lib/temporalio/worker/thread_pool_executor.rb +51 -0
  276. data/lib/temporalio/worker.rb +204 -0
  277. data/lib/temporalio/workflow/async.rb +46 -0
  278. data/lib/{temporal → temporalio}/workflow/execution_info.rb +4 -4
  279. data/lib/{temporal → temporalio}/workflow/execution_status.rb +1 -1
  280. data/lib/temporalio/workflow/future.rb +138 -0
  281. data/lib/{temporal → temporalio}/workflow/id_reuse_policy.rb +6 -6
  282. data/lib/temporalio/workflow/info.rb +76 -0
  283. data/lib/{temporal → temporalio}/workflow/query_reject_condition.rb +5 -5
  284. data/lib/temporalio.rb +12 -3
  285. data/temporalio.gemspec +11 -6
  286. metadata +137 -64
  287. data/bridge/sdk-core/Cargo.lock +0 -2606
  288. data/bridge/sdk-core/bridge-ffi/Cargo.toml +0 -24
  289. data/bridge/sdk-core/bridge-ffi/LICENSE.txt +0 -23
  290. data/bridge/sdk-core/bridge-ffi/build.rs +0 -25
  291. data/bridge/sdk-core/bridge-ffi/include/sdk-core-bridge.h +0 -249
  292. data/bridge/sdk-core/bridge-ffi/src/lib.rs +0 -825
  293. data/bridge/sdk-core/bridge-ffi/src/wrappers.rs +0 -211
  294. data/bridge/sdk-core/core/src/log_export.rs +0 -62
  295. data/bridge/sdk-core/core/src/worker/workflow/machines/mutable_side_effect_state_machine.rs +0 -127
  296. data/bridge/sdk-core/core/src/worker/workflow/machines/side_effect_state_machine.rs +0 -71
  297. data/bridge/sdk-core/protos/api_upstream/temporal/api/cluster/v1/message.proto +0 -83
  298. data/bridge/sdk-core/protos/local/temporal/sdk/core/bridge/bridge.proto +0 -210
  299. data/bridge/sdk-core/sdk/src/conversions.rs +0 -8
  300. data/lib/bridge.so +0 -0
  301. data/lib/gen/temporal/api/cluster/v1/message_pb.rb +0 -67
  302. data/lib/gen/temporal/api/enums/v1/cluster_pb.rb +0 -26
  303. data/lib/gen/temporal/sdk/core/bridge/bridge_pb.rb +0 -222
  304. data/lib/temporal/bridge.rb +0 -14
  305. data/lib/temporal/connection.rb +0 -736
  306. data/lib/temporal/failure_converter.rb +0 -8
  307. data/lib/temporal/payload_converter.rb +0 -14
  308. data/lib/temporal/runtime.rb +0 -22
  309. data/lib/temporal/version.rb +0 -3
  310. data/lib/temporal.rb +0 -8
@@ -0,0 +1,102 @@
1
+ require 'temporalio/error/failure'
2
+ require 'temporalio/errors'
3
+
4
+ module Temporalio
5
+ class Activity
6
+ # This class provides methods that can be called from activity classes.
7
+ class Context
8
+ # @api private
9
+ def initialize(info, heartbeat_proc, interceptors, shielded: false)
10
+ @thread = Thread.current
11
+ @info = info
12
+ @heartbeat_proc = heartbeat_proc
13
+ @interceptors = interceptors
14
+ @pending_cancellation = nil
15
+ @shielded = shielded
16
+ @mutex = Mutex.new
17
+ end
18
+
19
+ # Information about the running activity.
20
+ #
21
+ # @return [Temporalio::Activity::Info]
22
+ def info
23
+ interceptors.invoke(:activity_info) { @info }
24
+ end
25
+
26
+ # Send a heartbeat for the current activity.
27
+ #
28
+ # @param details [Array<any>] Data to store with the heartbeat.
29
+ def heartbeat(*details)
30
+ interceptors.invoke(:heartbeat, *details) do |*d|
31
+ @heartbeat_proc.call(*d)
32
+ end
33
+ end
34
+
35
+ # Protect a part of activity's implementation from cancellations.
36
+ #
37
+ # Activity cancellations are implemented using the `Thread#raise`, which can unsafely
38
+ # terminate your implementation. To disable this behaviour make sure to wrap critical parts of
39
+ # your business logic in this method.
40
+ #
41
+ # For shielding a whole activity consider using {Temporalio::Activity.shielded!}.
42
+ #
43
+ # A cancellation that got requested while in a shielded block will not interrupt the execution
44
+ # and will raise a {Temporalio::Error::CancelledError} right after the block has finished.
45
+ #
46
+ # @yield Block to be protected from cancellations.
47
+ def shield(&block)
48
+ # The whole activity is shielded, called from a nested shield
49
+ # or while handling a CancelledError (in a rescue or ensure blocks)
50
+ return block.call if @shielded || cancelled?
51
+
52
+ if Thread.current != thread
53
+ # TODO: Use logger instead when implemented
54
+ warn "Activity shielding is not intended to be used outside of activity's thread."
55
+ return block.call
56
+ end
57
+
58
+ mutex.synchronize do
59
+ @shielded = true
60
+ result = block.call
61
+ # RBS: StandardError fallback is only needed to satisfy steep - https://github.com/soutaro/steep/issues/477
62
+ raise @pending_cancellation || StandardError if cancelled?
63
+
64
+ result
65
+ ensure # runs while still holding the lock
66
+ @shielded = false
67
+ end
68
+ end
69
+
70
+ # Whether a cancellation was ever requested on this activity.
71
+ #
72
+ # @return [Boolean] true if the activity has had a cancellation request, false otherwise.
73
+ def cancelled?
74
+ !!@pending_cancellation
75
+ end
76
+
77
+ # Cancel the running activity by raising a provided error.
78
+ #
79
+ # @param reason [String] Reason for cancellation.
80
+ # @param by_request [Boolean] Cancellation requested by the server or not.
81
+ #
82
+ # @api private
83
+ def cancel(reason, by_request: false)
84
+ error = Temporalio::Error::ActivityCancelled.new(reason, by_request)
85
+ @pending_cancellation = error
86
+
87
+ locked = mutex.try_lock
88
+ # @shielded inside the lock means the whole activity is shielded
89
+ if locked && !@shielded
90
+ thread.raise(error)
91
+ end
92
+ ensure
93
+ # only release the lock if we locked it
94
+ mutex.unlock if locked
95
+ end
96
+
97
+ private
98
+
99
+ attr_reader :thread, :interceptors, :mutex
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,67 @@
1
+ module Temporalio
2
+ class Activity
3
+ # Class containing information about an activity.
4
+ class Info < Struct.new(
5
+ :activity_id,
6
+ :activity_type,
7
+ :attempt,
8
+ :current_attempt_scheduled_time,
9
+ :heartbeat_details,
10
+ :heartbeat_timeout,
11
+ :local,
12
+ :schedule_to_close_timeout,
13
+ :scheduled_time,
14
+ :start_to_close_timeout,
15
+ :started_time,
16
+ :task_queue,
17
+ :task_token,
18
+ :workflow_id,
19
+ :workflow_namespace,
20
+ :workflow_run_id,
21
+ :workflow_type,
22
+ keyword_init: true,
23
+ )
24
+ # @!attribute [r] activity_id
25
+ # @return [String] Activity ID.
26
+ # @!attribute [r] activity_type
27
+ # @return [String] Name of the activity.
28
+ # @!attribute [r] attempt
29
+ # @return [Integer] Activity's execution attempt.
30
+ # @!attribute [r] current_attempt_scheduled_time
31
+ # @return [Time] Scheduled time of the current attempt.
32
+ # @!attribute [r] heartbeat_details
33
+ # @return [Array<any>] Details submitted with the last heartbeat.
34
+ # @!attribute [r] heartbeat_timeout
35
+ # @return [Float] Max time between heartbeats (in seconds).
36
+ # @!attribute [r] local
37
+ # @return [Boolean] Whether activity is local or not.
38
+ # @!attribute [r] schedule_to_close_timeout
39
+ # @return [Float] Max overall activity execution time (in seconds).
40
+ # @!attribute [r] scheduled_time
41
+ # @return [Time] Time when activity was first scheduled.
42
+ # @!attribute [r] start_to_close_timeout
43
+ # @return [Float] Max time of a single invocation (in seconds).
44
+ # @!attribute [r] started_time
45
+ # @return [Time] Time when activity was started.
46
+ # @!attribute [r] task_queue
47
+ # @return [String] Task queue on which the activity got scheduled.
48
+ # @!attribute [r] task_token
49
+ # @return [String] A token for completing the activity.
50
+ # @!attribute [r] workflow_id
51
+ # @return [String] Workflow ID.
52
+ # @!attribute [r] workflow_namespace
53
+ # @return [String] Workflow namespace.
54
+ # @!attribute [r] workflow_run_id
55
+ # @return [String] Workflow run ID.
56
+ # @!attribute [r] workflow_type
57
+ # @return [String] Name of the workflow.
58
+
59
+ # Whether activity is local or not
60
+ #
61
+ # @return [Boolean] True for local activities, falst otherwise.
62
+ def local?
63
+ local
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,85 @@
1
+ module Temporalio
2
+ # This is an abstract superclass for implementing activities.
3
+ #
4
+ # Temporal SDK users are expected to subclass it and implement the {#execute} method by adding
5
+ # their desired business logic.
6
+ #
7
+ # @abstract
8
+ #
9
+ # @example "Hello World" Activity
10
+ # class HelloWorld < Temporalio::Activity
11
+ # def execute(name)
12
+ # "Hello, #{name}!"
13
+ # end
14
+ # end
15
+ class Activity
16
+ # Specify a custom name to be used for this activity.
17
+ #
18
+ # By default a full class (with any namespace modules/classes) name will be used.
19
+ #
20
+ # @param new_name [String] Name to be used for this activity
21
+ #
22
+ # @example
23
+ # class Test < Temporalio::Activity
24
+ # activity_name 'custom-activity-name'
25
+ #
26
+ # def execute
27
+ # ...
28
+ # end
29
+ # end
30
+ def self.activity_name(new_name)
31
+ @activity_name = new_name
32
+ end
33
+
34
+ # Mark the activity as shielded from cancellations.
35
+ #
36
+ # Activity cancellations are implemented using the `Thread#raise`, which can unsafely terminate
37
+ # your implementation. To disable this behaviour make sure to mark critical activities as
38
+ # `shielded!`. For shielding a part of your activity consider using
39
+ # {Temporalio::Activity::Context#shield}.
40
+ #
41
+ # @example
42
+ # class Test < Temporalio::Activity
43
+ # shielded!
44
+ #
45
+ # def execute
46
+ # ...
47
+ # end
48
+ # end
49
+ def self.shielded!
50
+ @shielded = true
51
+ end
52
+
53
+ # @api private
54
+ def self._name
55
+ @activity_name || name || ''
56
+ end
57
+
58
+ # @api private
59
+ def self._shielded
60
+ @shielded || false
61
+ end
62
+
63
+ # @api private
64
+ def initialize(context)
65
+ @context = context
66
+ end
67
+
68
+ # This is the main body of your activity's implementation.
69
+ #
70
+ # When implementing this method, you can use as many positional arguments as needed, which will
71
+ # get converted based on the activity invocation in your workflow.
72
+ #
73
+ # Inside of this method you have access to activity's context using the `activity` method. Check
74
+ # out {Temporalio::Activity::Context} for more information on how to use it.
75
+ def execute(*_args)
76
+ raise NoMethodError, 'must implement #execute'
77
+ end
78
+
79
+ private
80
+
81
+ def activity
82
+ @context
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,15 @@
1
+ module Temporalio
2
+ module Bridge
3
+ class ConnectOptions
4
+ attr_reader :url, :tls, :client_version, :metadata, :retry_config
5
+
6
+ def initialize(url:, tls:, client_version:, metadata:, retry_config:)
7
+ @url = url
8
+ @tls = tls
9
+ @metadata = metadata
10
+ @retry_config = retry_config
11
+ @client_version = client_version
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,8 @@
1
+ module Temporalio
2
+ module Bridge
3
+ # @api private
4
+ class Error < StandardError
5
+ class WorkerShutdown < Error; end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,24 @@
1
+ module Temporalio
2
+ module Bridge
3
+ class RetryConfig
4
+ attr_reader :initial_interval_millis, :randomization_factor, :multiplier,
5
+ :max_interval_millis, :max_elapsed_time_millis, :max_retries
6
+
7
+ def initialize(
8
+ initial_interval_millis:,
9
+ randomization_factor:,
10
+ multiplier:,
11
+ max_interval_millis:,
12
+ max_retries:,
13
+ max_elapsed_time_millis:
14
+ )
15
+ @initial_interval_millis = initial_interval_millis
16
+ @randomization_factor = randomization_factor
17
+ @multiplier = multiplier
18
+ @max_interval_millis = max_interval_millis
19
+ @max_retries = max_retries
20
+ @max_elapsed_time_millis = max_elapsed_time_millis
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,19 @@
1
+ module Temporalio
2
+ module Bridge
3
+ class TlsOptions
4
+ attr_reader :server_root_ca_cert, :client_cert, :client_private_key, :server_name_override
5
+
6
+ def initialize(
7
+ server_root_ca_cert:,
8
+ client_cert:,
9
+ client_private_key:,
10
+ server_name_override:
11
+ )
12
+ @server_root_ca_cert = server_root_ca_cert
13
+ @client_cert = client_cert
14
+ @client_private_key = client_private_key
15
+ @server_name_override = server_name_override
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,14 @@
1
+ require 'rutie'
2
+ require 'temporalio/bridge/error'
3
+
4
+ # RBS: for some reason __dir__ has a type of (String | nil)
5
+ BRIDGE_DIR = File.expand_path('..', __dir__ || '.')
6
+
7
+ module Temporalio
8
+ # @api private
9
+ module Bridge
10
+ Rutie
11
+ .new(:bridge, lib_path: '', lib_suffix: 'so', lib_prefix: '')
12
+ .init('init_bridge', BRIDGE_DIR)
13
+ end
14
+ end
@@ -1,17 +1,18 @@
1
1
  require 'socket'
2
2
  require 'temporal/api/workflowservice/v1/request_response_pb'
3
- require 'temporal/client/workflow_handle'
4
- require 'temporal/error/failure'
5
- require 'temporal/error/workflow_failure'
6
- require 'temporal/interceptor/chain'
7
- require 'temporal/timeout_type'
8
- require 'temporal/version'
9
- require 'temporal/workflow/execution_info'
10
- require 'temporal/workflow/id_reuse_policy'
11
- require 'temporal/workflow/query_reject_condition'
12
-
13
- module Temporal
3
+ require 'temporalio/client/workflow_handle'
4
+ require 'temporalio/error/failure'
5
+ require 'temporalio/error/workflow_failure'
6
+ require 'temporalio/interceptor/chain'
7
+ require 'temporalio/timeout_type'
8
+ require 'temporalio/version'
9
+ require 'temporalio/workflow/execution_info'
10
+ require 'temporalio/workflow/id_reuse_policy'
11
+ require 'temporalio/workflow/query_reject_condition'
12
+
13
+ module Temporalio
14
14
  class Client
15
+ # @api private
15
16
  class Implementation
16
17
  def initialize(connection, namespace, converter, interceptors)
17
18
  @connection = connection
@@ -59,20 +60,20 @@ module Temporal
59
60
 
60
61
  def await_workflow_result(id, run_id, follow_runs, rpc_metadata, rpc_timeout)
61
62
  rpc_params = { metadata: rpc_metadata, timeout: rpc_timeout }
62
- request = Temporal::Api::WorkflowService::V1::GetWorkflowExecutionHistoryRequest.new(
63
+ request = Temporalio::Api::WorkflowService::V1::GetWorkflowExecutionHistoryRequest.new(
63
64
  namespace: namespace.to_s,
64
- execution: Temporal::Api::Common::V1::WorkflowExecution.new(
65
+ execution: Temporalio::Api::Common::V1::WorkflowExecution.new(
65
66
  workflow_id: id,
66
67
  run_id: run_id || '',
67
68
  ),
68
69
  history_event_filter_type:
69
- Temporal::Api::Enums::V1::HistoryEventFilterType::HISTORY_EVENT_FILTER_TYPE_CLOSE_EVENT,
70
+ Temporalio::Api::Enums::V1::HistoryEventFilterType::HISTORY_EVENT_FILTER_TYPE_CLOSE_EVENT,
70
71
  wait_new_event: true,
71
72
  skip_archival: true,
72
73
  )
73
74
 
74
75
  loop do
75
- response = connection.get_workflow_execution_history(request, **rpc_params)
76
+ response = connection.workflow_service.get_workflow_execution_history(request, **rpc_params)
76
77
  next_run_id = catch(:next) do
77
78
  # this will return out of the loop only if :next wasn't thrown
78
79
  return process_workflow_result_from(response, follow_runs)
@@ -88,7 +89,7 @@ module Temporal
88
89
  def convert_headers(headers)
89
90
  return if headers.empty?
90
91
 
91
- Temporal::Api::Common::V1::Header.new(
92
+ Temporalio::Api::Common::V1::Header.new(
92
93
  fields: converter.to_payload_map(headers),
93
94
  )
94
95
  end
@@ -97,11 +98,11 @@ module Temporal
97
98
  input.retry_policy&.validate!
98
99
 
99
100
  if input.memo
100
- memo = Temporal::Api::Common::V1::Memo.new(fields: converter.to_payload_map(input.memo))
101
+ memo = Temporalio::Api::Common::V1::Memo.new(fields: converter.to_payload_map(input.memo))
101
102
  end
102
103
 
103
104
  if input.search_attributes
104
- search_attributes = Temporal::Api::Common::V1::SearchAttributes.new(
105
+ search_attributes = Temporalio::Api::Common::V1::SearchAttributes.new(
105
106
  indexed_fields: converter.to_payload_map(input.search_attributes),
106
107
  )
107
108
  end
@@ -111,9 +112,9 @@ module Temporal
111
112
  identity: identity,
112
113
  request_id: SecureRandom.uuid,
113
114
  namespace: namespace,
114
- workflow_type: Temporal::Api::Common::V1::WorkflowType.new(name: input.workflow.to_s),
115
+ workflow_type: Temporalio::Api::Common::V1::WorkflowType.new(name: input.workflow.to_s),
115
116
  workflow_id: input.id,
116
- task_queue: Temporal::Api::TaskQueue::V1::TaskQueue.new(name: input.task_queue.to_s),
117
+ task_queue: Temporalio::Api::TaskQueue::V1::TaskQueue.new(name: input.task_queue.to_s),
117
118
  input: converter.to_payloads(input.args),
118
119
  workflow_execution_timeout: input.execution_timeout,
119
120
  workflow_run_timeout: input.run_timeout,
@@ -133,15 +134,15 @@ module Temporal
133
134
  signal_input: converter.to_payloads(input.start_signal_args),
134
135
  )
135
136
 
136
- klass = Temporal::Api::WorkflowService::V1::SignalWithStartWorkflowExecutionRequest
137
+ klass = Temporalio::Api::WorkflowService::V1::SignalWithStartWorkflowExecutionRequest
137
138
  request = klass.new(**params)
138
139
 
139
- response = connection.signal_with_start_workflow_execution(request, **rpc_params)
140
+ response = connection.workflow_service.signal_with_start_workflow_execution(request, **rpc_params)
140
141
  else
141
- klass = Temporal::Api::WorkflowService::V1::StartWorkflowExecutionRequest
142
+ klass = Temporalio::Api::WorkflowService::V1::StartWorkflowExecutionRequest
142
143
  request = klass.new(**params)
143
144
 
144
- response = connection.start_workflow_execution(request, **rpc_params)
145
+ response = connection.workflow_service.start_workflow_execution(request, **rpc_params)
145
146
  first_execution_run_id = response.run_id
146
147
  end
147
148
 
@@ -151,10 +152,10 @@ module Temporal
151
152
  result_run_id: response.run_id,
152
153
  first_execution_run_id: first_execution_run_id,
153
154
  )
154
- rescue Temporal::Bridge::Error => e
155
+ rescue Temporalio::Bridge::Error => e
155
156
  # TODO: Raise a better error from the bridge
156
157
  if e.message.include?('AlreadyExists')
157
- raise Temporal::Error::WorkflowExecutionAlreadyStarted, 'Workflow execution already started'
158
+ raise Temporalio::Error::WorkflowExecutionAlreadyStarted, 'Workflow execution already started'
158
159
  else
159
160
  raise # re-raise
160
161
  end
@@ -162,28 +163,28 @@ module Temporal
162
163
 
163
164
  def handle_describe_workflow(input)
164
165
  rpc_params = { metadata: input.rpc_metadata, timeout: input.rpc_timeout }
165
- request = Temporal::Api::WorkflowService::V1::DescribeWorkflowExecutionRequest.new(
166
+ request = Temporalio::Api::WorkflowService::V1::DescribeWorkflowExecutionRequest.new(
166
167
  namespace: namespace.to_s,
167
- execution: Temporal::Api::Common::V1::WorkflowExecution.new(
168
+ execution: Temporalio::Api::Common::V1::WorkflowExecution.new(
168
169
  workflow_id: input.id,
169
170
  run_id: input.run_id || '',
170
171
  ),
171
172
  )
172
173
 
173
- response = connection.describe_workflow_execution(request, **rpc_params)
174
+ response = connection.workflow_service.describe_workflow_execution(request, **rpc_params)
174
175
 
175
176
  Workflow::ExecutionInfo.from_raw(response, converter)
176
177
  end
177
178
 
178
179
  def handle_query_workflow(input)
179
180
  rpc_params = { metadata: input.rpc_metadata, timeout: input.rpc_timeout }
180
- request = Temporal::Api::WorkflowService::V1::QueryWorkflowRequest.new(
181
+ request = Temporalio::Api::WorkflowService::V1::QueryWorkflowRequest.new(
181
182
  namespace: namespace.to_s,
182
- execution: Temporal::Api::Common::V1::WorkflowExecution.new(
183
+ execution: Temporalio::Api::Common::V1::WorkflowExecution.new(
183
184
  workflow_id: input.id,
184
185
  run_id: input.run_id,
185
186
  ),
186
- query: Temporal::Api::Query::V1::WorkflowQuery.new(
187
+ query: Temporalio::Api::Query::V1::WorkflowQuery.new(
187
188
  query_type: input.query.to_s,
188
189
  query_args: converter.to_payloads(input.args),
189
190
  header: convert_headers(input.headers),
@@ -191,26 +192,26 @@ module Temporal
191
192
  query_reject_condition: Workflow::QueryRejectCondition.to_raw(input.reject_condition),
192
193
  )
193
194
 
194
- response = connection.query_workflow(request, **rpc_params)
195
+ response = connection.workflow_service.query_workflow(request, **rpc_params)
195
196
 
196
197
  if response.query_rejected
197
198
  status = Workflow::ExecutionStatus.from_raw(response.query_rejected.status)
198
- raise Temporal::Error::QueryRejected, status
199
+ raise Temporalio::Error::QueryRejected, status
199
200
  end
200
201
 
201
202
  converter.from_payloads(response.query_result)&.first
202
- rescue Temporal::Bridge::Error => e
203
+ rescue Temporalio::Bridge::Error => e
203
204
  # TODO: Raise a better error from the bridge
204
- raise Temporal::Error::QueryFailed, e.message
205
+ raise Temporalio::Error::QueryFailed, e.message
205
206
  end
206
207
 
207
208
  def handle_signal_workflow(input)
208
209
  rpc_params = { metadata: input.rpc_metadata, timeout: input.rpc_timeout }
209
- request = Temporal::Api::WorkflowService::V1::SignalWorkflowExecutionRequest.new(
210
+ request = Temporalio::Api::WorkflowService::V1::SignalWorkflowExecutionRequest.new(
210
211
  identity: identity,
211
212
  request_id: SecureRandom.uuid,
212
213
  namespace: namespace.to_s,
213
- workflow_execution: Temporal::Api::Common::V1::WorkflowExecution.new(
214
+ workflow_execution: Temporalio::Api::Common::V1::WorkflowExecution.new(
214
215
  workflow_id: input.id,
215
216
  run_id: input.run_id || '',
216
217
  ),
@@ -219,18 +220,18 @@ module Temporal
219
220
  header: convert_headers(input.headers),
220
221
  )
221
222
 
222
- connection.signal_workflow_execution(request, **rpc_params)
223
+ connection.workflow_service.signal_workflow_execution(request, **rpc_params)
223
224
 
224
225
  return
225
226
  end
226
227
 
227
228
  def handle_cancel_workflow(input)
228
229
  rpc_params = { metadata: input.rpc_metadata, timeout: input.rpc_timeout }
229
- request = Temporal::Api::WorkflowService::V1::RequestCancelWorkflowExecutionRequest.new(
230
+ request = Temporalio::Api::WorkflowService::V1::RequestCancelWorkflowExecutionRequest.new(
230
231
  identity: identity,
231
232
  request_id: SecureRandom.uuid,
232
233
  namespace: namespace.to_s,
233
- workflow_execution: Temporal::Api::Common::V1::WorkflowExecution.new(
234
+ workflow_execution: Temporalio::Api::Common::V1::WorkflowExecution.new(
234
235
  workflow_id: input.id,
235
236
  run_id: input.run_id || '',
236
237
  ),
@@ -238,17 +239,17 @@ module Temporal
238
239
  reason: input.reason,
239
240
  )
240
241
 
241
- connection.request_cancel_workflow_execution(request, **rpc_params)
242
+ connection.workflow_service.request_cancel_workflow_execution(request, **rpc_params)
242
243
 
243
244
  return
244
245
  end
245
246
 
246
247
  def handle_terminate_workflow(input)
247
248
  rpc_params = { metadata: input.rpc_metadata, timeout: input.rpc_timeout }
248
- request = Temporal::Api::WorkflowService::V1::TerminateWorkflowExecutionRequest.new(
249
+ request = Temporalio::Api::WorkflowService::V1::TerminateWorkflowExecutionRequest.new(
249
250
  identity: identity,
250
251
  namespace: namespace.to_s,
251
- workflow_execution: Temporal::Api::Common::V1::WorkflowExecution.new(
252
+ workflow_execution: Temporalio::Api::Common::V1::WorkflowExecution.new(
252
253
  workflow_id: input.id,
253
254
  run_id: input.run_id || '',
254
255
  ),
@@ -257,7 +258,7 @@ module Temporal
257
258
  details: converter.to_payloads(input.args),
258
259
  )
259
260
 
260
- connection.terminate_workflow_execution(request, **rpc_params)
261
+ connection.workflow_service.terminate_workflow_execution(request, **rpc_params)
261
262
 
262
263
  return
263
264
  end
@@ -268,11 +269,11 @@ module Temporal
268
269
  if !events || events.empty?
269
270
  throw(:next, nil) # next loop, same run_id
270
271
  elsif events.length != 1
271
- raise Temporal::Error, "Expected single close event, got #{events.length}"
272
+ raise Temporalio::Error, "Expected single close event, got #{events.length}"
272
273
  end
273
274
 
274
275
  event = events.first
275
- raise Temporal::Error::UnexpectedResponse, 'Missing final history event' unless event
276
+ raise Temporalio::Error::UnexpectedResponse, 'Missing final history event' unless event
276
277
 
277
278
  case event.event_type
278
279
  when :EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED
@@ -286,15 +287,15 @@ module Temporal
286
287
  attributes = event.workflow_execution_failed_event_attributes
287
288
  follow(attributes&.new_execution_run_id) if follow_runs
288
289
 
289
- raise Temporal::Error::WorkflowFailure.new(
290
+ raise Temporalio::Error::WorkflowFailure.new(
290
291
  cause: converter.from_failure(attributes&.failure),
291
292
  )
292
293
 
293
294
  when :EVENT_TYPE_WORKFLOW_EXECUTION_CANCELED
294
295
  attributes = event.workflow_execution_canceled_event_attributes
295
296
 
296
- raise Temporal::Error::WorkflowFailure.new(
297
- cause: Temporal::Error::CancelledError.new(
297
+ raise Temporalio::Error::WorkflowFailure.new(
298
+ cause: Temporalio::Error::CancelledError.new(
298
299
  'Workflow execution cancelled',
299
300
  details: converter.from_payloads(attributes&.details),
300
301
  ),
@@ -303,8 +304,8 @@ module Temporal
303
304
  when :EVENT_TYPE_WORKFLOW_EXECUTION_TERMINATED
304
305
  attributes = event.workflow_execution_terminated_event_attributes
305
306
 
306
- raise Temporal::Error::WorkflowFailure.new(
307
- cause: Temporal::Error::TerminatedError.new(
307
+ raise Temporalio::Error::WorkflowFailure.new(
308
+ cause: Temporalio::Error::TerminatedError.new(
308
309
  attributes&.reason || 'Workflow execution terminated',
309
310
  ),
310
311
  )
@@ -313,10 +314,10 @@ module Temporal
313
314
  attributes = event.workflow_execution_timed_out_event_attributes
314
315
  follow(attributes&.new_execution_run_id) if follow_runs
315
316
 
316
- raise Temporal::Error::WorkflowFailure.new(
317
- cause: Temporal::Error::TimeoutError.new(
317
+ raise Temporalio::Error::WorkflowFailure.new(
318
+ cause: Temporalio::Error::TimeoutError.new(
318
319
  'Workflow execution timed out',
319
- type: Temporal::TimeoutType::START_TO_CLOSE,
320
+ type: Temporalio::TimeoutType::START_TO_CLOSE,
320
321
  ),
321
322
  )
322
323
 
@@ -325,7 +326,7 @@ module Temporal
325
326
  follow(attributes&.new_execution_run_id) if follow_runs
326
327
 
327
328
  # TODO: Use more specific error and decode failure
328
- raise Temporal::Error, 'Workflow execution continued as new'
329
+ raise Temporalio::Error, 'Workflow execution continued as new'
329
330
  end
330
331
  end
331
332