temporalio 0.0.1

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 (317) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +3 -0
  3. data/LICENSE +20 -0
  4. data/README.md +130 -0
  5. data/bridge/Cargo.lock +2865 -0
  6. data/bridge/Cargo.toml +26 -0
  7. data/bridge/sdk-core/ARCHITECTURE.md +76 -0
  8. data/bridge/sdk-core/Cargo.lock +2606 -0
  9. data/bridge/sdk-core/Cargo.toml +2 -0
  10. data/bridge/sdk-core/LICENSE.txt +23 -0
  11. data/bridge/sdk-core/README.md +107 -0
  12. data/bridge/sdk-core/arch_docs/diagrams/README.md +10 -0
  13. data/bridge/sdk-core/arch_docs/diagrams/sticky_queues.puml +40 -0
  14. data/bridge/sdk-core/arch_docs/diagrams/workflow_internals.svg +1 -0
  15. data/bridge/sdk-core/arch_docs/sticky_queues.md +51 -0
  16. data/bridge/sdk-core/bridge-ffi/Cargo.toml +24 -0
  17. data/bridge/sdk-core/bridge-ffi/LICENSE.txt +23 -0
  18. data/bridge/sdk-core/bridge-ffi/build.rs +25 -0
  19. data/bridge/sdk-core/bridge-ffi/include/sdk-core-bridge.h +249 -0
  20. data/bridge/sdk-core/bridge-ffi/src/lib.rs +825 -0
  21. data/bridge/sdk-core/bridge-ffi/src/wrappers.rs +211 -0
  22. data/bridge/sdk-core/client/Cargo.toml +40 -0
  23. data/bridge/sdk-core/client/LICENSE.txt +23 -0
  24. data/bridge/sdk-core/client/src/lib.rs +1294 -0
  25. data/bridge/sdk-core/client/src/metrics.rs +165 -0
  26. data/bridge/sdk-core/client/src/raw.rs +931 -0
  27. data/bridge/sdk-core/client/src/retry.rs +674 -0
  28. data/bridge/sdk-core/client/src/workflow_handle/mod.rs +185 -0
  29. data/bridge/sdk-core/core/Cargo.toml +116 -0
  30. data/bridge/sdk-core/core/LICENSE.txt +23 -0
  31. data/bridge/sdk-core/core/benches/workflow_replay.rs +73 -0
  32. data/bridge/sdk-core/core/src/abstractions.rs +166 -0
  33. data/bridge/sdk-core/core/src/core_tests/activity_tasks.rs +911 -0
  34. data/bridge/sdk-core/core/src/core_tests/child_workflows.rs +221 -0
  35. data/bridge/sdk-core/core/src/core_tests/determinism.rs +107 -0
  36. data/bridge/sdk-core/core/src/core_tests/local_activities.rs +515 -0
  37. data/bridge/sdk-core/core/src/core_tests/mod.rs +100 -0
  38. data/bridge/sdk-core/core/src/core_tests/queries.rs +736 -0
  39. data/bridge/sdk-core/core/src/core_tests/replay_flag.rs +65 -0
  40. data/bridge/sdk-core/core/src/core_tests/workers.rs +259 -0
  41. data/bridge/sdk-core/core/src/core_tests/workflow_cancels.rs +124 -0
  42. data/bridge/sdk-core/core/src/core_tests/workflow_tasks.rs +2070 -0
  43. data/bridge/sdk-core/core/src/ephemeral_server/mod.rs +515 -0
  44. data/bridge/sdk-core/core/src/lib.rs +175 -0
  45. data/bridge/sdk-core/core/src/log_export.rs +62 -0
  46. data/bridge/sdk-core/core/src/pollers/mod.rs +54 -0
  47. data/bridge/sdk-core/core/src/pollers/poll_buffer.rs +297 -0
  48. data/bridge/sdk-core/core/src/protosext/mod.rs +428 -0
  49. data/bridge/sdk-core/core/src/replay/mod.rs +71 -0
  50. data/bridge/sdk-core/core/src/retry_logic.rs +202 -0
  51. data/bridge/sdk-core/core/src/telemetry/metrics.rs +383 -0
  52. data/bridge/sdk-core/core/src/telemetry/mod.rs +412 -0
  53. data/bridge/sdk-core/core/src/telemetry/prometheus_server.rs +77 -0
  54. data/bridge/sdk-core/core/src/test_help/mod.rs +875 -0
  55. data/bridge/sdk-core/core/src/worker/activities/activity_heartbeat_manager.rs +580 -0
  56. data/bridge/sdk-core/core/src/worker/activities/local_activities.rs +1042 -0
  57. data/bridge/sdk-core/core/src/worker/activities.rs +464 -0
  58. data/bridge/sdk-core/core/src/worker/client/mocks.rs +87 -0
  59. data/bridge/sdk-core/core/src/worker/client.rs +347 -0
  60. data/bridge/sdk-core/core/src/worker/mod.rs +566 -0
  61. data/bridge/sdk-core/core/src/worker/workflow/bridge.rs +37 -0
  62. data/bridge/sdk-core/core/src/worker/workflow/driven_workflow.rs +110 -0
  63. data/bridge/sdk-core/core/src/worker/workflow/history_update.rs +458 -0
  64. data/bridge/sdk-core/core/src/worker/workflow/machines/activity_state_machine.rs +911 -0
  65. data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_external_state_machine.rs +298 -0
  66. data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +171 -0
  67. data/bridge/sdk-core/core/src/worker/workflow/machines/child_workflow_state_machine.rs +860 -0
  68. data/bridge/sdk-core/core/src/worker/workflow/machines/complete_workflow_state_machine.rs +140 -0
  69. data/bridge/sdk-core/core/src/worker/workflow/machines/continue_as_new_workflow_state_machine.rs +161 -0
  70. data/bridge/sdk-core/core/src/worker/workflow/machines/fail_workflow_state_machine.rs +133 -0
  71. data/bridge/sdk-core/core/src/worker/workflow/machines/local_activity_state_machine.rs +1448 -0
  72. data/bridge/sdk-core/core/src/worker/workflow/machines/mod.rs +342 -0
  73. data/bridge/sdk-core/core/src/worker/workflow/machines/mutable_side_effect_state_machine.rs +127 -0
  74. data/bridge/sdk-core/core/src/worker/workflow/machines/patch_state_machine.rs +712 -0
  75. data/bridge/sdk-core/core/src/worker/workflow/machines/side_effect_state_machine.rs +71 -0
  76. data/bridge/sdk-core/core/src/worker/workflow/machines/signal_external_state_machine.rs +443 -0
  77. data/bridge/sdk-core/core/src/worker/workflow/machines/timer_state_machine.rs +439 -0
  78. data/bridge/sdk-core/core/src/worker/workflow/machines/transition_coverage.rs +169 -0
  79. data/bridge/sdk-core/core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +246 -0
  80. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines/local_acts.rs +96 -0
  81. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines.rs +1184 -0
  82. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_task_state_machine.rs +277 -0
  83. data/bridge/sdk-core/core/src/worker/workflow/managed_run/managed_wf_test.rs +198 -0
  84. data/bridge/sdk-core/core/src/worker/workflow/managed_run.rs +647 -0
  85. data/bridge/sdk-core/core/src/worker/workflow/mod.rs +1143 -0
  86. data/bridge/sdk-core/core/src/worker/workflow/run_cache.rs +145 -0
  87. data/bridge/sdk-core/core/src/worker/workflow/wft_poller.rs +88 -0
  88. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream.rs +940 -0
  89. data/bridge/sdk-core/core-api/Cargo.toml +31 -0
  90. data/bridge/sdk-core/core-api/LICENSE.txt +23 -0
  91. data/bridge/sdk-core/core-api/src/errors.rs +95 -0
  92. data/bridge/sdk-core/core-api/src/lib.rs +151 -0
  93. data/bridge/sdk-core/core-api/src/worker.rs +135 -0
  94. data/bridge/sdk-core/etc/deps.svg +187 -0
  95. data/bridge/sdk-core/etc/dynamic-config.yaml +2 -0
  96. data/bridge/sdk-core/etc/otel-collector-config.yaml +36 -0
  97. data/bridge/sdk-core/etc/prometheus.yaml +6 -0
  98. data/bridge/sdk-core/fsm/Cargo.toml +18 -0
  99. data/bridge/sdk-core/fsm/LICENSE.txt +23 -0
  100. data/bridge/sdk-core/fsm/README.md +3 -0
  101. data/bridge/sdk-core/fsm/rustfsm_procmacro/Cargo.toml +27 -0
  102. data/bridge/sdk-core/fsm/rustfsm_procmacro/LICENSE.txt +23 -0
  103. data/bridge/sdk-core/fsm/rustfsm_procmacro/src/lib.rs +647 -0
  104. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/progress.rs +8 -0
  105. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dupe_transitions_fail.rs +18 -0
  106. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dupe_transitions_fail.stderr +12 -0
  107. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dynamic_dest_pass.rs +41 -0
  108. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/forgot_name_fail.rs +14 -0
  109. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/forgot_name_fail.stderr +11 -0
  110. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/handler_arg_pass.rs +32 -0
  111. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/handler_pass.rs +31 -0
  112. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/medium_complex_pass.rs +46 -0
  113. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.rs +29 -0
  114. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.stderr +12 -0
  115. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/simple_pass.rs +32 -0
  116. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/struct_event_variant_fail.rs +18 -0
  117. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/struct_event_variant_fail.stderr +5 -0
  118. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_more_item_event_variant_fail.rs +11 -0
  119. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_more_item_event_variant_fail.stderr +5 -0
  120. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_zero_item_event_variant_fail.rs +11 -0
  121. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_zero_item_event_variant_fail.stderr +5 -0
  122. data/bridge/sdk-core/fsm/rustfsm_trait/Cargo.toml +14 -0
  123. data/bridge/sdk-core/fsm/rustfsm_trait/LICENSE.txt +23 -0
  124. data/bridge/sdk-core/fsm/rustfsm_trait/src/lib.rs +249 -0
  125. data/bridge/sdk-core/fsm/src/lib.rs +2 -0
  126. data/bridge/sdk-core/histories/fail_wf_task.bin +0 -0
  127. data/bridge/sdk-core/histories/timer_workflow_history.bin +0 -0
  128. data/bridge/sdk-core/integ-with-otel.sh +7 -0
  129. data/bridge/sdk-core/protos/api_upstream/README.md +9 -0
  130. data/bridge/sdk-core/protos/api_upstream/api-linter.yaml +40 -0
  131. data/bridge/sdk-core/protos/api_upstream/buf.yaml +12 -0
  132. data/bridge/sdk-core/protos/api_upstream/dependencies/gogoproto/gogo.proto +141 -0
  133. data/bridge/sdk-core/protos/api_upstream/temporal/api/batch/v1/message.proto +86 -0
  134. data/bridge/sdk-core/protos/api_upstream/temporal/api/cluster/v1/message.proto +83 -0
  135. data/bridge/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +259 -0
  136. data/bridge/sdk-core/protos/api_upstream/temporal/api/common/v1/message.proto +112 -0
  137. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/batch_operation.proto +46 -0
  138. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/cluster.proto +40 -0
  139. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/command_type.proto +57 -0
  140. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/common.proto +55 -0
  141. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/event_type.proto +168 -0
  142. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +97 -0
  143. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/namespace.proto +51 -0
  144. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/query.proto +50 -0
  145. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/reset.proto +41 -0
  146. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/schedule.proto +60 -0
  147. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +59 -0
  148. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/update.proto +51 -0
  149. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/workflow.proto +122 -0
  150. data/bridge/sdk-core/protos/api_upstream/temporal/api/errordetails/v1/message.proto +108 -0
  151. data/bridge/sdk-core/protos/api_upstream/temporal/api/failure/v1/message.proto +114 -0
  152. data/bridge/sdk-core/protos/api_upstream/temporal/api/filter/v1/message.proto +56 -0
  153. data/bridge/sdk-core/protos/api_upstream/temporal/api/history/v1/message.proto +751 -0
  154. data/bridge/sdk-core/protos/api_upstream/temporal/api/namespace/v1/message.proto +97 -0
  155. data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +161 -0
  156. data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/service.proto +99 -0
  157. data/bridge/sdk-core/protos/api_upstream/temporal/api/query/v1/message.proto +61 -0
  158. data/bridge/sdk-core/protos/api_upstream/temporal/api/replication/v1/message.proto +55 -0
  159. data/bridge/sdk-core/protos/api_upstream/temporal/api/schedule/v1/message.proto +300 -0
  160. data/bridge/sdk-core/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +108 -0
  161. data/bridge/sdk-core/protos/api_upstream/temporal/api/update/v1/message.proto +46 -0
  162. data/bridge/sdk-core/protos/api_upstream/temporal/api/version/v1/message.proto +59 -0
  163. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflow/v1/message.proto +145 -0
  164. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +1124 -0
  165. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +401 -0
  166. data/bridge/sdk-core/protos/grpc/health/v1/health.proto +63 -0
  167. data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_result/activity_result.proto +78 -0
  168. data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_task/activity_task.proto +79 -0
  169. data/bridge/sdk-core/protos/local/temporal/sdk/core/bridge/bridge.proto +210 -0
  170. data/bridge/sdk-core/protos/local/temporal/sdk/core/child_workflow/child_workflow.proto +77 -0
  171. data/bridge/sdk-core/protos/local/temporal/sdk/core/common/common.proto +15 -0
  172. data/bridge/sdk-core/protos/local/temporal/sdk/core/core_interface.proto +30 -0
  173. data/bridge/sdk-core/protos/local/temporal/sdk/core/external_data/external_data.proto +30 -0
  174. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +261 -0
  175. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +297 -0
  176. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_completion/workflow_completion.proto +29 -0
  177. data/bridge/sdk-core/protos/testsrv_upstream/api-linter.yaml +38 -0
  178. data/bridge/sdk-core/protos/testsrv_upstream/buf.yaml +13 -0
  179. data/bridge/sdk-core/protos/testsrv_upstream/dependencies/gogoproto/gogo.proto +141 -0
  180. data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/request_response.proto +63 -0
  181. data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/service.proto +90 -0
  182. data/bridge/sdk-core/rustfmt.toml +1 -0
  183. data/bridge/sdk-core/sdk/Cargo.toml +47 -0
  184. data/bridge/sdk-core/sdk/LICENSE.txt +23 -0
  185. data/bridge/sdk-core/sdk/src/activity_context.rs +230 -0
  186. data/bridge/sdk-core/sdk/src/app_data.rs +37 -0
  187. data/bridge/sdk-core/sdk/src/conversions.rs +8 -0
  188. data/bridge/sdk-core/sdk/src/interceptors.rs +17 -0
  189. data/bridge/sdk-core/sdk/src/lib.rs +792 -0
  190. data/bridge/sdk-core/sdk/src/payload_converter.rs +11 -0
  191. data/bridge/sdk-core/sdk/src/workflow_context/options.rs +295 -0
  192. data/bridge/sdk-core/sdk/src/workflow_context.rs +683 -0
  193. data/bridge/sdk-core/sdk/src/workflow_future.rs +503 -0
  194. data/bridge/sdk-core/sdk-core-protos/Cargo.toml +30 -0
  195. data/bridge/sdk-core/sdk-core-protos/LICENSE.txt +23 -0
  196. data/bridge/sdk-core/sdk-core-protos/build.rs +108 -0
  197. data/bridge/sdk-core/sdk-core-protos/src/constants.rs +7 -0
  198. data/bridge/sdk-core/sdk-core-protos/src/history_builder.rs +497 -0
  199. data/bridge/sdk-core/sdk-core-protos/src/history_info.rs +230 -0
  200. data/bridge/sdk-core/sdk-core-protos/src/lib.rs +1910 -0
  201. data/bridge/sdk-core/sdk-core-protos/src/task_token.rs +38 -0
  202. data/bridge/sdk-core/sdk-core-protos/src/utilities.rs +14 -0
  203. data/bridge/sdk-core/test-utils/Cargo.toml +35 -0
  204. data/bridge/sdk-core/test-utils/src/canned_histories.rs +1579 -0
  205. data/bridge/sdk-core/test-utils/src/histfetch.rs +28 -0
  206. data/bridge/sdk-core/test-utils/src/lib.rs +598 -0
  207. data/bridge/sdk-core/tests/integ_tests/client_tests.rs +36 -0
  208. data/bridge/sdk-core/tests/integ_tests/ephemeral_server_tests.rs +128 -0
  209. data/bridge/sdk-core/tests/integ_tests/heartbeat_tests.rs +218 -0
  210. data/bridge/sdk-core/tests/integ_tests/polling_tests.rs +146 -0
  211. data/bridge/sdk-core/tests/integ_tests/queries_tests.rs +437 -0
  212. data/bridge/sdk-core/tests/integ_tests/visibility_tests.rs +93 -0
  213. data/bridge/sdk-core/tests/integ_tests/workflow_tests/activities.rs +878 -0
  214. data/bridge/sdk-core/tests/integ_tests/workflow_tests/appdata_propagation.rs +61 -0
  215. data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +59 -0
  216. data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +58 -0
  217. data/bridge/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +50 -0
  218. data/bridge/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +60 -0
  219. data/bridge/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +54 -0
  220. data/bridge/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +634 -0
  221. data/bridge/sdk-core/tests/integ_tests/workflow_tests/patches.rs +113 -0
  222. data/bridge/sdk-core/tests/integ_tests/workflow_tests/replay.rs +137 -0
  223. data/bridge/sdk-core/tests/integ_tests/workflow_tests/resets.rs +93 -0
  224. data/bridge/sdk-core/tests/integ_tests/workflow_tests/signals.rs +167 -0
  225. data/bridge/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +99 -0
  226. data/bridge/sdk-core/tests/integ_tests/workflow_tests/timers.rs +131 -0
  227. data/bridge/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +75 -0
  228. data/bridge/sdk-core/tests/integ_tests/workflow_tests.rs +587 -0
  229. data/bridge/sdk-core/tests/load_tests.rs +191 -0
  230. data/bridge/sdk-core/tests/main.rs +111 -0
  231. data/bridge/sdk-core/tests/runner.rs +93 -0
  232. data/bridge/src/connection.rs +167 -0
  233. data/bridge/src/lib.rs +180 -0
  234. data/bridge/src/runtime.rs +47 -0
  235. data/bridge/src/worker.rs +73 -0
  236. data/ext/Rakefile +9 -0
  237. data/lib/bridge.so +0 -0
  238. data/lib/gen/dependencies/gogoproto/gogo_pb.rb +14 -0
  239. data/lib/gen/temporal/api/batch/v1/message_pb.rb +48 -0
  240. data/lib/gen/temporal/api/cluster/v1/message_pb.rb +67 -0
  241. data/lib/gen/temporal/api/command/v1/message_pb.rb +166 -0
  242. data/lib/gen/temporal/api/common/v1/message_pb.rb +69 -0
  243. data/lib/gen/temporal/api/enums/v1/batch_operation_pb.rb +32 -0
  244. data/lib/gen/temporal/api/enums/v1/cluster_pb.rb +26 -0
  245. data/lib/gen/temporal/api/enums/v1/command_type_pb.rb +37 -0
  246. data/lib/gen/temporal/api/enums/v1/common_pb.rb +41 -0
  247. data/lib/gen/temporal/api/enums/v1/event_type_pb.rb +67 -0
  248. data/lib/gen/temporal/api/enums/v1/failed_cause_pb.rb +71 -0
  249. data/lib/gen/temporal/api/enums/v1/namespace_pb.rb +37 -0
  250. data/lib/gen/temporal/api/enums/v1/query_pb.rb +31 -0
  251. data/lib/gen/temporal/api/enums/v1/reset_pb.rb +24 -0
  252. data/lib/gen/temporal/api/enums/v1/schedule_pb.rb +28 -0
  253. data/lib/gen/temporal/api/enums/v1/task_queue_pb.rb +30 -0
  254. data/lib/gen/temporal/api/enums/v1/update_pb.rb +28 -0
  255. data/lib/gen/temporal/api/enums/v1/workflow_pb.rb +89 -0
  256. data/lib/gen/temporal/api/errordetails/v1/message_pb.rb +84 -0
  257. data/lib/gen/temporal/api/failure/v1/message_pb.rb +83 -0
  258. data/lib/gen/temporal/api/filter/v1/message_pb.rb +40 -0
  259. data/lib/gen/temporal/api/history/v1/message_pb.rb +489 -0
  260. data/lib/gen/temporal/api/namespace/v1/message_pb.rb +63 -0
  261. data/lib/gen/temporal/api/operatorservice/v1/request_response_pb.rb +125 -0
  262. data/lib/gen/temporal/api/operatorservice/v1/service_pb.rb +20 -0
  263. data/lib/gen/temporal/api/query/v1/message_pb.rb +38 -0
  264. data/lib/gen/temporal/api/replication/v1/message_pb.rb +37 -0
  265. data/lib/gen/temporal/api/schedule/v1/message_pb.rb +128 -0
  266. data/lib/gen/temporal/api/taskqueue/v1/message_pb.rb +73 -0
  267. data/lib/gen/temporal/api/update/v1/message_pb.rb +26 -0
  268. data/lib/gen/temporal/api/version/v1/message_pb.rb +41 -0
  269. data/lib/gen/temporal/api/workflow/v1/message_pb.rb +110 -0
  270. data/lib/gen/temporal/api/workflowservice/v1/request_response_pb.rb +771 -0
  271. data/lib/gen/temporal/api/workflowservice/v1/service_pb.rb +20 -0
  272. data/lib/gen/temporal/sdk/core/activity_result/activity_result_pb.rb +58 -0
  273. data/lib/gen/temporal/sdk/core/activity_task/activity_task_pb.rb +57 -0
  274. data/lib/gen/temporal/sdk/core/bridge/bridge_pb.rb +222 -0
  275. data/lib/gen/temporal/sdk/core/child_workflow/child_workflow_pb.rb +57 -0
  276. data/lib/gen/temporal/sdk/core/common/common_pb.rb +22 -0
  277. data/lib/gen/temporal/sdk/core/core_interface_pb.rb +34 -0
  278. data/lib/gen/temporal/sdk/core/external_data/external_data_pb.rb +27 -0
  279. data/lib/gen/temporal/sdk/core/workflow_activation/workflow_activation_pb.rb +164 -0
  280. data/lib/gen/temporal/sdk/core/workflow_commands/workflow_commands_pb.rb +192 -0
  281. data/lib/gen/temporal/sdk/core/workflow_completion/workflow_completion_pb.rb +34 -0
  282. data/lib/temporal/bridge.rb +14 -0
  283. data/lib/temporal/client/implementation.rb +339 -0
  284. data/lib/temporal/client/workflow_handle.rb +243 -0
  285. data/lib/temporal/client.rb +144 -0
  286. data/lib/temporal/connection.rb +736 -0
  287. data/lib/temporal/data_converter.rb +150 -0
  288. data/lib/temporal/error/failure.rb +194 -0
  289. data/lib/temporal/error/workflow_failure.rb +17 -0
  290. data/lib/temporal/errors.rb +22 -0
  291. data/lib/temporal/failure_converter/base.rb +26 -0
  292. data/lib/temporal/failure_converter/basic.rb +313 -0
  293. data/lib/temporal/failure_converter.rb +8 -0
  294. data/lib/temporal/interceptor/chain.rb +27 -0
  295. data/lib/temporal/interceptor/client.rb +102 -0
  296. data/lib/temporal/payload_codec/base.rb +32 -0
  297. data/lib/temporal/payload_converter/base.rb +24 -0
  298. data/lib/temporal/payload_converter/bytes.rb +26 -0
  299. data/lib/temporal/payload_converter/composite.rb +47 -0
  300. data/lib/temporal/payload_converter/encoding_base.rb +35 -0
  301. data/lib/temporal/payload_converter/json.rb +25 -0
  302. data/lib/temporal/payload_converter/nil.rb +25 -0
  303. data/lib/temporal/payload_converter.rb +14 -0
  304. data/lib/temporal/retry_policy.rb +82 -0
  305. data/lib/temporal/retry_state.rb +35 -0
  306. data/lib/temporal/runtime.rb +22 -0
  307. data/lib/temporal/timeout_type.rb +29 -0
  308. data/lib/temporal/version.rb +3 -0
  309. data/lib/temporal/workflow/execution_info.rb +54 -0
  310. data/lib/temporal/workflow/execution_status.rb +36 -0
  311. data/lib/temporal/workflow/id_reuse_policy.rb +36 -0
  312. data/lib/temporal/workflow/query_reject_condition.rb +33 -0
  313. data/lib/temporal.rb +8 -0
  314. data/lib/temporalio.rb +3 -0
  315. data/lib/thermite_patch.rb +23 -0
  316. data/temporalio.gemspec +41 -0
  317. metadata +583 -0
@@ -0,0 +1,339 @@
1
+ require 'socket'
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
14
+ class Client
15
+ class Implementation
16
+ def initialize(connection, namespace, converter, interceptors)
17
+ @connection = connection
18
+ @namespace = namespace
19
+ @converter = converter
20
+ @interceptor_chain = Interceptor::Chain.new(interceptors)
21
+ @identity = "#{Process.pid}@#{Socket.gethostname} (Ruby SDK v#{VERSION})"
22
+ end
23
+
24
+ def start_workflow(input)
25
+ interceptor_chain.invoke(:start_workflow, input) do |i|
26
+ handle_start_workflow(i)
27
+ end
28
+ end
29
+
30
+ def describe_workflow(input)
31
+ interceptor_chain.invoke(:describe_workflow, input) do |i|
32
+ handle_describe_workflow(i)
33
+ end
34
+ end
35
+
36
+ def query_workflow(input)
37
+ interceptor_chain.invoke(:query_workflow, input) do |i|
38
+ handle_query_workflow(i)
39
+ end
40
+ end
41
+
42
+ def signal_workflow(input)
43
+ interceptor_chain.invoke(:signal_workflow, input) do |i|
44
+ handle_signal_workflow(i)
45
+ end
46
+ end
47
+
48
+ def cancel_workflow(input)
49
+ interceptor_chain.invoke(:cancel_workflow, input) do |i|
50
+ handle_cancel_workflow(i)
51
+ end
52
+ end
53
+
54
+ def terminate_workflow(input)
55
+ interceptor_chain.invoke(:terminate_workflow, input) do |i|
56
+ handle_terminate_workflow(i)
57
+ end
58
+ end
59
+
60
+ def await_workflow_result(id, run_id, follow_runs, rpc_metadata, rpc_timeout)
61
+ rpc_params = { metadata: rpc_metadata, timeout: rpc_timeout }
62
+ request = Temporal::Api::WorkflowService::V1::GetWorkflowExecutionHistoryRequest.new(
63
+ namespace: namespace.to_s,
64
+ execution: Temporal::Api::Common::V1::WorkflowExecution.new(
65
+ workflow_id: id,
66
+ run_id: run_id || '',
67
+ ),
68
+ history_event_filter_type:
69
+ Temporal::Api::Enums::V1::HistoryEventFilterType::HISTORY_EVENT_FILTER_TYPE_CLOSE_EVENT,
70
+ wait_new_event: true,
71
+ skip_archival: true,
72
+ )
73
+
74
+ loop do
75
+ response = connection.get_workflow_execution_history(request, **rpc_params)
76
+ next_run_id = catch(:next) do
77
+ # this will return out of the loop only if :next wasn't thrown
78
+ return process_workflow_result_from(response, follow_runs)
79
+ end
80
+ request.execution&.run_id = next_run_id if next_run_id
81
+ end
82
+ end
83
+
84
+ private
85
+
86
+ attr_reader :connection, :namespace, :converter, :interceptor_chain, :identity
87
+
88
+ def convert_headers(headers)
89
+ return if headers.empty?
90
+
91
+ Temporal::Api::Common::V1::Header.new(
92
+ fields: converter.to_payload_map(headers),
93
+ )
94
+ end
95
+
96
+ def handle_start_workflow(input)
97
+ input.retry_policy&.validate!
98
+
99
+ if input.memo
100
+ memo = Temporal::Api::Common::V1::Memo.new(fields: converter.to_payload_map(input.memo))
101
+ end
102
+
103
+ if input.search_attributes
104
+ search_attributes = Temporal::Api::Common::V1::SearchAttributes.new(
105
+ indexed_fields: converter.to_payload_map(input.search_attributes),
106
+ )
107
+ end
108
+
109
+ rpc_params = { metadata: input.rpc_metadata, timeout: input.rpc_timeout }
110
+ params = {
111
+ identity: identity,
112
+ request_id: SecureRandom.uuid,
113
+ namespace: namespace,
114
+ workflow_type: Temporal::Api::Common::V1::WorkflowType.new(name: input.workflow.to_s),
115
+ workflow_id: input.id,
116
+ task_queue: Temporal::Api::TaskQueue::V1::TaskQueue.new(name: input.task_queue.to_s),
117
+ input: converter.to_payloads(input.args),
118
+ workflow_execution_timeout: input.execution_timeout,
119
+ workflow_run_timeout: input.run_timeout,
120
+ workflow_task_timeout: input.task_timeout,
121
+ workflow_id_reuse_policy: Workflow::IDReusePolicy.to_raw(input.id_reuse_policy),
122
+ retry_policy: input.retry_policy&.to_proto,
123
+ cron_schedule: input.cron_schedule,
124
+ memo: memo,
125
+ search_attributes: search_attributes,
126
+ header: convert_headers(input.headers),
127
+ }
128
+
129
+ first_execution_run_id = nil
130
+ if input.start_signal
131
+ params.merge!(
132
+ signal_name: input.start_signal,
133
+ signal_input: converter.to_payloads(input.start_signal_args),
134
+ )
135
+
136
+ klass = Temporal::Api::WorkflowService::V1::SignalWithStartWorkflowExecutionRequest
137
+ request = klass.new(**params)
138
+
139
+ response = connection.signal_with_start_workflow_execution(request, **rpc_params)
140
+ else
141
+ klass = Temporal::Api::WorkflowService::V1::StartWorkflowExecutionRequest
142
+ request = klass.new(**params)
143
+
144
+ response = connection.start_workflow_execution(request, **rpc_params)
145
+ first_execution_run_id = response.run_id
146
+ end
147
+
148
+ Client::WorkflowHandle.new(
149
+ self,
150
+ input.id,
151
+ result_run_id: response.run_id,
152
+ first_execution_run_id: first_execution_run_id,
153
+ )
154
+ rescue Temporal::Bridge::Error => e
155
+ # TODO: Raise a better error from the bridge
156
+ if e.message.include?('AlreadyExists')
157
+ raise Temporal::Error::WorkflowExecutionAlreadyStarted, 'Workflow execution already started'
158
+ else
159
+ raise # re-raise
160
+ end
161
+ end
162
+
163
+ def handle_describe_workflow(input)
164
+ rpc_params = { metadata: input.rpc_metadata, timeout: input.rpc_timeout }
165
+ request = Temporal::Api::WorkflowService::V1::DescribeWorkflowExecutionRequest.new(
166
+ namespace: namespace.to_s,
167
+ execution: Temporal::Api::Common::V1::WorkflowExecution.new(
168
+ workflow_id: input.id,
169
+ run_id: input.run_id || '',
170
+ ),
171
+ )
172
+
173
+ response = connection.describe_workflow_execution(request, **rpc_params)
174
+
175
+ Workflow::ExecutionInfo.from_raw(response, converter)
176
+ end
177
+
178
+ def handle_query_workflow(input)
179
+ rpc_params = { metadata: input.rpc_metadata, timeout: input.rpc_timeout }
180
+ request = Temporal::Api::WorkflowService::V1::QueryWorkflowRequest.new(
181
+ namespace: namespace.to_s,
182
+ execution: Temporal::Api::Common::V1::WorkflowExecution.new(
183
+ workflow_id: input.id,
184
+ run_id: input.run_id,
185
+ ),
186
+ query: Temporal::Api::Query::V1::WorkflowQuery.new(
187
+ query_type: input.query.to_s,
188
+ query_args: converter.to_payloads(input.args),
189
+ header: convert_headers(input.headers),
190
+ ),
191
+ query_reject_condition: Workflow::QueryRejectCondition.to_raw(input.reject_condition),
192
+ )
193
+
194
+ response = connection.query_workflow(request, **rpc_params)
195
+
196
+ if response.query_rejected
197
+ status = Workflow::ExecutionStatus.from_raw(response.query_rejected.status)
198
+ raise Temporal::Error::QueryRejected, status
199
+ end
200
+
201
+ converter.from_payloads(response.query_result)&.first
202
+ rescue Temporal::Bridge::Error => e
203
+ # TODO: Raise a better error from the bridge
204
+ raise Temporal::Error::QueryFailed, e.message
205
+ end
206
+
207
+ def handle_signal_workflow(input)
208
+ rpc_params = { metadata: input.rpc_metadata, timeout: input.rpc_timeout }
209
+ request = Temporal::Api::WorkflowService::V1::SignalWorkflowExecutionRequest.new(
210
+ identity: identity,
211
+ request_id: SecureRandom.uuid,
212
+ namespace: namespace.to_s,
213
+ workflow_execution: Temporal::Api::Common::V1::WorkflowExecution.new(
214
+ workflow_id: input.id,
215
+ run_id: input.run_id || '',
216
+ ),
217
+ signal_name: input.signal.to_s,
218
+ input: converter.to_payloads(input.args),
219
+ header: convert_headers(input.headers),
220
+ )
221
+
222
+ connection.signal_workflow_execution(request, **rpc_params)
223
+
224
+ return
225
+ end
226
+
227
+ def handle_cancel_workflow(input)
228
+ rpc_params = { metadata: input.rpc_metadata, timeout: input.rpc_timeout }
229
+ request = Temporal::Api::WorkflowService::V1::RequestCancelWorkflowExecutionRequest.new(
230
+ identity: identity,
231
+ request_id: SecureRandom.uuid,
232
+ namespace: namespace.to_s,
233
+ workflow_execution: Temporal::Api::Common::V1::WorkflowExecution.new(
234
+ workflow_id: input.id,
235
+ run_id: input.run_id || '',
236
+ ),
237
+ first_execution_run_id: input.first_execution_run_id || '',
238
+ reason: input.reason,
239
+ )
240
+
241
+ connection.request_cancel_workflow_execution(request, **rpc_params)
242
+
243
+ return
244
+ end
245
+
246
+ def handle_terminate_workflow(input)
247
+ rpc_params = { metadata: input.rpc_metadata, timeout: input.rpc_timeout }
248
+ request = Temporal::Api::WorkflowService::V1::TerminateWorkflowExecutionRequest.new(
249
+ identity: identity,
250
+ namespace: namespace.to_s,
251
+ workflow_execution: Temporal::Api::Common::V1::WorkflowExecution.new(
252
+ workflow_id: input.id,
253
+ run_id: input.run_id || '',
254
+ ),
255
+ first_execution_run_id: input.first_execution_run_id || '',
256
+ reason: input.reason,
257
+ details: converter.to_payloads(input.args),
258
+ )
259
+
260
+ connection.terminate_workflow_execution(request, **rpc_params)
261
+
262
+ return
263
+ end
264
+
265
+ def process_workflow_result_from(response, follow_runs)
266
+ events = response.history&.events
267
+
268
+ if !events || events.empty?
269
+ throw(:next, nil) # next loop, same run_id
270
+ elsif events.length != 1
271
+ raise Temporal::Error, "Expected single close event, got #{events.length}"
272
+ end
273
+
274
+ event = events.first
275
+ raise Temporal::Error::UnexpectedResponse, 'Missing final history event' unless event
276
+
277
+ case event.event_type
278
+ when :EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED
279
+ attributes = event.workflow_execution_completed_event_attributes
280
+ follow(attributes&.new_execution_run_id) if follow_runs
281
+
282
+ # TODO: Handle incorrect payloads object
283
+ return converter.from_payloads(attributes&.result)&.first
284
+
285
+ when :EVENT_TYPE_WORKFLOW_EXECUTION_FAILED
286
+ attributes = event.workflow_execution_failed_event_attributes
287
+ follow(attributes&.new_execution_run_id) if follow_runs
288
+
289
+ raise Temporal::Error::WorkflowFailure.new(
290
+ cause: converter.from_failure(attributes&.failure),
291
+ )
292
+
293
+ when :EVENT_TYPE_WORKFLOW_EXECUTION_CANCELED
294
+ attributes = event.workflow_execution_canceled_event_attributes
295
+
296
+ raise Temporal::Error::WorkflowFailure.new(
297
+ cause: Temporal::Error::CancelledError.new(
298
+ 'Workflow execution cancelled',
299
+ details: converter.from_payloads(attributes&.details),
300
+ ),
301
+ )
302
+
303
+ when :EVENT_TYPE_WORKFLOW_EXECUTION_TERMINATED
304
+ attributes = event.workflow_execution_terminated_event_attributes
305
+
306
+ raise Temporal::Error::WorkflowFailure.new(
307
+ cause: Temporal::Error::TerminatedError.new(
308
+ attributes&.reason || 'Workflow execution terminated',
309
+ ),
310
+ )
311
+
312
+ when :EVENT_TYPE_WORKFLOW_EXECUTION_TIMED_OUT
313
+ attributes = event.workflow_execution_timed_out_event_attributes
314
+ follow(attributes&.new_execution_run_id) if follow_runs
315
+
316
+ raise Temporal::Error::WorkflowFailure.new(
317
+ cause: Temporal::Error::TimeoutError.new(
318
+ 'Workflow execution timed out',
319
+ type: Temporal::TimeoutType::START_TO_CLOSE,
320
+ ),
321
+ )
322
+
323
+ when :EVENT_TYPE_WORKFLOW_EXECUTION_CONTINUED_AS_NEW
324
+ attributes = event.workflow_execution_continued_as_new_event_attributes
325
+ follow(attributes&.new_execution_run_id) if follow_runs
326
+
327
+ # TODO: Use more specific error and decode failure
328
+ raise Temporal::Error, 'Workflow execution continued as new'
329
+ end
330
+ end
331
+
332
+ def follow(new_run_id)
333
+ return if !new_run_id || new_run_id.empty?
334
+
335
+ throw(:next, new_run_id) # next loop with a new run_id
336
+ end
337
+ end
338
+ end
339
+ end
@@ -0,0 +1,243 @@
1
+ require 'temporal/interceptor/client'
2
+ require 'temporal/workflow/query_reject_condition'
3
+
4
+ module Temporal
5
+ class Client
6
+ # Handle for interacting with a workflow.
7
+ #
8
+ # This is usually created via {Temporal::Client#workflow_handle} or returned
9
+ # from {Temporal::Client#start_workflow}.
10
+ class WorkflowHandle
11
+ # @return [String] ID for the workflow.
12
+ attr_reader :id
13
+
14
+ # Run ID used for {#signal} and {#query} calls if present to ensure the query or signal happen
15
+ # on this exact run.
16
+ #
17
+ # This is only set on handles created via {Temporal::Client#workflow_handle} with a `run_id`
18
+ # parameter. {Temporal::Client#start_workflow} does not set this value.
19
+ #
20
+ # This cannot be mutated. If a different run ID is needed, {Temporal::Client#workflow_handle}
21
+ # must be used instead.
22
+ #
23
+ # @return [String]
24
+ attr_reader :run_id
25
+
26
+ # Run ID used for {#result} calls if present to ensure result is for a workflow starting from
27
+ # this run.
28
+ #
29
+ # When this handle is created via {Temporal::Client#workflow_handle}, this is the same as
30
+ # `:run_id`. When this handle is created via {Temporal::Client#start_workflow}, this value
31
+ # will be the resulting run ID.
32
+ #
33
+ # This cannot be mutated. If a different run ID is needed, {Temporal::Client#workflow_handle}
34
+ # must be used instead.
35
+ #
36
+ # @return [String]
37
+ attr_reader :result_run_id
38
+
39
+ # Run ID used for {#cancel} and {#terminate} calls if present to ensure the cancel and
40
+ # terminate happen for a workflow ID started with this run ID.
41
+ #
42
+ # This can be set when using {Temporal::Client#workflow_handle}. When
43
+ # {Temporal::Client#start_workflow} is called without a start signal, this is set to the
44
+ # resulting run.
45
+ #
46
+ # This cannot be mutated. If a different first execution run ID is needed,
47
+ # {Temporal::Client#workflow_handle} must be used instead.
48
+ #
49
+ # @return [String]
50
+ attr_reader :first_execution_run_id
51
+
52
+ def initialize(client_impl, id, run_id: nil, result_run_id: nil, first_execution_run_id: nil)
53
+ @client_impl = client_impl
54
+ @id = id
55
+ @run_id = run_id
56
+ @result_run_id = result_run_id
57
+ @first_execution_run_id = first_execution_run_id
58
+ end
59
+
60
+ # Wait for result of the workflow.
61
+ #
62
+ # This will use {#result_run_id} if present to base the result on. To use another run ID,
63
+ # a new handle must be created via {Temporal::Client#workflow_handle}.
64
+ #
65
+ # @param follow_runs [Bool] If true (default), workflow runs will be continually fetched,
66
+ # until the most recent one is found. If false, the first result is used.
67
+ # @param rpc_metadata [Hash<String, String>] Headers used on the RPC call.
68
+ # Keys here override client-level RPC metadata keys.
69
+ # @param rpc_timeout [Integer] Optional RPC deadline to set for each RPC call. Note, this is
70
+ # the timeout for each history RPC call not this overall function.
71
+ #
72
+ # @return [any] Result of the workflow after being converted by the data converter.
73
+ #
74
+ # @raise [Temporal::Error::WorkflowFailure] Workflow failed, was cancelled, was terminated, or
75
+ # timed out. Use the {Temporal::Error::WorkflowFailure#cause} to see the underlying reason.
76
+ # @raise [StandardError] Other possible failures during result fetching.
77
+ def result(follow_runs: true, rpc_metadata: {}, rpc_timeout: nil)
78
+ client_impl.await_workflow_result(id, result_run_id, follow_runs, rpc_metadata, rpc_timeout)
79
+ end
80
+
81
+ # Get workflow details.
82
+ #
83
+ # This will get details for {#run_id} if present. To use a different run ID, create a new
84
+ # handle with via {Temporal::Client#workflow_handle}.
85
+ #
86
+ # @note Handles created as a result of {Temporal::Client#start_workflow} will describe the
87
+ # latest workflow with the same workflow ID even if it is unrelated to the started workflow.
88
+ #
89
+ # @param rpc_metadata [Hash<String, String>] Headers used on the RPC call.
90
+ # Keys here override client-level RPC metadata keys.
91
+ # @param rpc_timeout [Integer] Optional RPC deadline to set for each RPC call. Note, this is
92
+ # the timeout for each history RPC call not this overall function.
93
+ #
94
+ # @return [Temporal::Workflow::ExecutionInfo] Workflow details.
95
+ #
96
+ # @raise [Temporal::Error::RPCError] Workflow details could not be fetched.
97
+ def describe(rpc_metadata: {}, rpc_timeout: nil)
98
+ input = Interceptor::Client::DescribeWorkflowInput.new(
99
+ id: id,
100
+ run_id: run_id,
101
+ rpc_metadata: rpc_metadata,
102
+ rpc_timeout: rpc_timeout,
103
+ )
104
+
105
+ client_impl.describe_workflow(input)
106
+ end
107
+
108
+ # Cancel the workflow.
109
+ #
110
+ # This will issue a cancellation for {#run_id} if present. This call will make sure to use the
111
+ # run chain starting from {#first_execution_run_id} if present. To create handles with these
112
+ # values, use {Temporal::Client#workflow_handle}.
113
+ #
114
+ # @note Handles created as a result of {Temporal::Client#start_workflow} with a start signal
115
+ # will cancel the latest workflow with the same workflow ID even if it is unrelated to the
116
+ # started workflow.
117
+ #
118
+ # @param reason [String] A reason for workflow cancellation.
119
+ # @param rpc_metadata [Hash<String, String>] Headers used on the RPC call.
120
+ # Keys here override client-level RPC metadata keys.
121
+ # @param rpc_timeout [Integer] Optional RPC deadline to set for each RPC call.
122
+ #
123
+ # @raise [Temporal::Error::RPCError] Workflow could not be cancelled.
124
+ def cancel(reason = nil, rpc_metadata: {}, rpc_timeout: nil)
125
+ input = Interceptor::Client::CancelWorkflowInput.new(
126
+ id: id,
127
+ run_id: run_id,
128
+ first_execution_run_id: first_execution_run_id,
129
+ reason: reason,
130
+ rpc_metadata: rpc_metadata,
131
+ rpc_timeout: rpc_timeout,
132
+ )
133
+
134
+ client_impl.cancel_workflow(input)
135
+ end
136
+
137
+ # Query the workflow.
138
+ #
139
+ # This will query for {#run_id} if present. To use a different run ID, create a new handle
140
+ # with via {Temporal::Client#workflow_handle}.
141
+ #
142
+ # @note Handles created as a result of {Temporal::Client#start_workflow} will query the latest
143
+ # workflow with the same workflow ID even if it is unrelated to the started workflow.
144
+ #
145
+ # @param query [String, Symbol] Query function or name on the workflow.
146
+ # @param args [any] Arguments to the query.
147
+ # @param reject_condition [Symbol] Condition for rejecting the query. Refer to
148
+ # {Temporal::Workflow::QueryRejectCondition} for the list of allowed values.
149
+ # @param rpc_metadata [Hash<String, String>] Headers used on the RPC call.
150
+ # Keys here override client-level RPC metadata keys.
151
+ # @param rpc_timeout [Integer] Optional RPC deadline to set for each RPC call.
152
+ #
153
+ # @return [any] Result of the query.
154
+ #
155
+ # @raise [Temporal::Error] A query reject condition was satisfied.
156
+ # @raise [Temporal::Error::RPCError] Workflow details could not be fetched.
157
+ def query(
158
+ query,
159
+ *args,
160
+ reject_condition: Workflow::QueryRejectCondition::NONE,
161
+ rpc_metadata: {},
162
+ rpc_timeout: nil
163
+ )
164
+ input = Interceptor::Client::QueryWorkflowInput.new(
165
+ id: id,
166
+ run_id: run_id,
167
+ query: query,
168
+ args: args,
169
+ reject_condition: reject_condition,
170
+ headers: {},
171
+ rpc_metadata: rpc_metadata,
172
+ rpc_timeout: rpc_timeout,
173
+ )
174
+
175
+ client_impl.query_workflow(input)
176
+ end
177
+
178
+ # Send a signal to the workflow.
179
+ #
180
+ # This will signal for {#run_id} if present. To use a different run ID, create a new handle
181
+ # with via {Temporal::Client#workflow_handle}.
182
+ #
183
+ # @note Handles created as a result of {Temporal::Client#start_workflow} will signal the
184
+ # latest workflow with the same workflow ID even if it is unrelated to the started workflow.
185
+ #
186
+ # @param signal [String, Symbol] Signal function or name on the workflow.
187
+ # @param args [any] Arguments to the signal.
188
+ # @param rpc_metadata [Hash<String, String>] Headers used on the RPC call.
189
+ # Keys here override client-level RPC metadata keys.
190
+ # @param rpc_timeout [Integer] Optional RPC deadline to set for each RPC call.
191
+ #
192
+ # @return [Temporal::Error::RPCError] Workflow could not be signalled.
193
+ def signal(signal, *args, rpc_metadata: {}, rpc_timeout: nil)
194
+ input = Interceptor::Client::SignalWorkflowInput.new(
195
+ id: id,
196
+ run_id: run_id,
197
+ signal: signal,
198
+ args: args,
199
+ headers: {},
200
+ rpc_metadata: rpc_metadata,
201
+ rpc_timeout: rpc_timeout,
202
+ )
203
+
204
+ client_impl.signal_workflow(input)
205
+ end
206
+
207
+ # Terminate the workflow.
208
+ #
209
+ # This will issue a termination for {#run_id} if present. This call will make sure to use the
210
+ # run chain starting from {#first_execution_run_id} if present. To create handles with these
211
+ # values, use {Temporal::Client#workflow_handle}.
212
+
213
+ # @note Handles created as a result of {Temporal::Client#start_workflow} with a start signal
214
+ # will terminate the latest workflow with the same workflow ID even if it is unrelated to
215
+ # the started workflow.
216
+ #
217
+ # @param reason [String] A reason for workflow termination.
218
+ # @param args [any] Details to store on the termination.
219
+ # @param rpc_metadata [Hash<String, String>] Headers used on the RPC call.
220
+ # Keys here override client-level RPC metadata keys.
221
+ # @param rpc_timeout [Integer] Optional RPC deadline to set for each RPC call.
222
+ #
223
+ # @raise [Temporal::Error::RPCError] Workflow could not be terminated.
224
+ def terminate(reason = nil, args = nil, rpc_metadata: {}, rpc_timeout: nil)
225
+ input = Interceptor::Client::TerminateWorkflowInput.new(
226
+ id: id,
227
+ run_id: run_id,
228
+ first_execution_run_id: first_execution_run_id,
229
+ reason: reason,
230
+ args: args,
231
+ rpc_metadata: rpc_metadata,
232
+ rpc_timeout: rpc_timeout,
233
+ )
234
+
235
+ client_impl.terminate_workflow(input)
236
+ end
237
+
238
+ private
239
+
240
+ attr_reader :client_impl
241
+ end
242
+ end
243
+ end