temporalio 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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