temporalio 0.0.0 → 0.0.2

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