temporalio 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (310) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +180 -7
  3. data/bridge/Cargo.lock +208 -76
  4. data/bridge/Cargo.toml +5 -2
  5. data/bridge/sdk-core/Cargo.toml +1 -1
  6. data/bridge/sdk-core/README.md +20 -10
  7. data/bridge/sdk-core/client/Cargo.toml +1 -1
  8. data/bridge/sdk-core/client/src/lib.rs +227 -59
  9. data/bridge/sdk-core/client/src/metrics.rs +17 -8
  10. data/bridge/sdk-core/client/src/raw.rs +13 -12
  11. data/bridge/sdk-core/client/src/retry.rs +132 -43
  12. data/bridge/sdk-core/core/Cargo.toml +28 -15
  13. data/bridge/sdk-core/core/benches/workflow_replay.rs +13 -10
  14. data/bridge/sdk-core/core/src/abstractions.rs +225 -36
  15. data/bridge/sdk-core/core/src/core_tests/activity_tasks.rs +217 -79
  16. data/bridge/sdk-core/core/src/core_tests/determinism.rs +165 -2
  17. data/bridge/sdk-core/core/src/core_tests/local_activities.rs +565 -34
  18. data/bridge/sdk-core/core/src/core_tests/queries.rs +247 -90
  19. data/bridge/sdk-core/core/src/core_tests/workers.rs +3 -5
  20. data/bridge/sdk-core/core/src/core_tests/workflow_cancels.rs +1 -1
  21. data/bridge/sdk-core/core/src/core_tests/workflow_tasks.rs +430 -67
  22. data/bridge/sdk-core/core/src/ephemeral_server/mod.rs +106 -12
  23. data/bridge/sdk-core/core/src/internal_flags.rs +136 -0
  24. data/bridge/sdk-core/core/src/lib.rs +148 -34
  25. data/bridge/sdk-core/core/src/protosext/mod.rs +1 -1
  26. data/bridge/sdk-core/core/src/replay/mod.rs +185 -41
  27. data/bridge/sdk-core/core/src/telemetry/log_export.rs +190 -0
  28. data/bridge/sdk-core/core/src/telemetry/metrics.rs +219 -140
  29. data/bridge/sdk-core/core/src/telemetry/mod.rs +326 -315
  30. data/bridge/sdk-core/core/src/telemetry/prometheus_server.rs +20 -14
  31. data/bridge/sdk-core/core/src/test_help/mod.rs +85 -21
  32. data/bridge/sdk-core/core/src/worker/activities/activity_heartbeat_manager.rs +112 -156
  33. data/bridge/sdk-core/core/src/worker/activities/activity_task_poller_stream.rs +89 -0
  34. data/bridge/sdk-core/core/src/worker/activities/local_activities.rs +364 -128
  35. data/bridge/sdk-core/core/src/worker/activities.rs +263 -170
  36. data/bridge/sdk-core/core/src/worker/client/mocks.rs +23 -3
  37. data/bridge/sdk-core/core/src/worker/client.rs +48 -6
  38. data/bridge/sdk-core/core/src/worker/mod.rs +186 -75
  39. data/bridge/sdk-core/core/src/worker/workflow/bridge.rs +1 -3
  40. data/bridge/sdk-core/core/src/worker/workflow/driven_workflow.rs +13 -24
  41. data/bridge/sdk-core/core/src/worker/workflow/history_update.rs +879 -226
  42. data/bridge/sdk-core/core/src/worker/workflow/machines/activity_state_machine.rs +101 -48
  43. data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_external_state_machine.rs +8 -12
  44. data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +6 -9
  45. data/bridge/sdk-core/core/src/worker/workflow/machines/child_workflow_state_machine.rs +90 -32
  46. data/bridge/sdk-core/core/src/worker/workflow/machines/complete_workflow_state_machine.rs +6 -9
  47. data/bridge/sdk-core/core/src/worker/workflow/machines/continue_as_new_workflow_state_machine.rs +7 -10
  48. data/bridge/sdk-core/core/src/worker/workflow/machines/fail_workflow_state_machine.rs +6 -9
  49. data/bridge/sdk-core/core/src/worker/workflow/machines/local_activity_state_machine.rs +160 -83
  50. data/bridge/sdk-core/core/src/worker/workflow/machines/mod.rs +36 -54
  51. data/bridge/sdk-core/core/src/worker/workflow/machines/modify_workflow_properties_state_machine.rs +179 -0
  52. data/bridge/sdk-core/core/src/worker/workflow/machines/patch_state_machine.rs +104 -157
  53. data/bridge/sdk-core/core/src/worker/workflow/machines/signal_external_state_machine.rs +8 -12
  54. data/bridge/sdk-core/core/src/worker/workflow/machines/timer_state_machine.rs +9 -13
  55. data/bridge/sdk-core/core/src/worker/workflow/machines/transition_coverage.rs +10 -4
  56. data/bridge/sdk-core/core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +14 -11
  57. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines/local_acts.rs +6 -17
  58. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines.rs +395 -299
  59. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_task_state_machine.rs +12 -20
  60. data/bridge/sdk-core/core/src/worker/workflow/managed_run/managed_wf_test.rs +33 -18
  61. data/bridge/sdk-core/core/src/worker/workflow/managed_run.rs +1032 -374
  62. data/bridge/sdk-core/core/src/worker/workflow/mod.rs +525 -392
  63. data/bridge/sdk-core/core/src/worker/workflow/run_cache.rs +40 -57
  64. data/bridge/sdk-core/core/src/worker/workflow/wft_extraction.rs +125 -0
  65. data/bridge/sdk-core/core/src/worker/workflow/wft_poller.rs +3 -6
  66. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream/saved_wf_inputs.rs +117 -0
  67. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream/tonic_status_serde.rs +24 -0
  68. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream.rs +456 -681
  69. data/bridge/sdk-core/core-api/Cargo.toml +6 -4
  70. data/bridge/sdk-core/core-api/src/errors.rs +1 -34
  71. data/bridge/sdk-core/core-api/src/lib.rs +7 -45
  72. data/bridge/sdk-core/core-api/src/telemetry.rs +141 -0
  73. data/bridge/sdk-core/core-api/src/worker.rs +27 -1
  74. data/bridge/sdk-core/etc/deps.svg +115 -140
  75. data/bridge/sdk-core/etc/regen-depgraph.sh +5 -0
  76. data/bridge/sdk-core/fsm/rustfsm_procmacro/src/lib.rs +18 -15
  77. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.stderr +1 -1
  78. data/bridge/sdk-core/fsm/rustfsm_trait/src/lib.rs +8 -3
  79. data/bridge/sdk-core/histories/evict_while_la_running_no_interference-16_history.bin +0 -0
  80. data/bridge/sdk-core/histories/evict_while_la_running_no_interference-23_history.bin +0 -0
  81. data/bridge/sdk-core/histories/evict_while_la_running_no_interference-85_history.bin +0 -0
  82. data/bridge/sdk-core/protos/api_upstream/buf.yaml +0 -3
  83. data/bridge/sdk-core/protos/api_upstream/build/go.mod +7 -0
  84. data/bridge/sdk-core/protos/api_upstream/build/go.sum +5 -0
  85. data/bridge/sdk-core/protos/api_upstream/{temporal/api/enums/v1/cluster.proto → build/tools.go} +7 -18
  86. data/bridge/sdk-core/protos/api_upstream/go.mod +6 -0
  87. data/bridge/sdk-core/protos/api_upstream/temporal/api/batch/v1/message.proto +12 -9
  88. data/bridge/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +15 -26
  89. data/bridge/sdk-core/protos/api_upstream/temporal/api/common/v1/message.proto +13 -2
  90. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/batch_operation.proto +3 -2
  91. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/command_type.proto +4 -9
  92. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/common.proto +3 -2
  93. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/event_type.proto +10 -8
  94. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +28 -2
  95. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/namespace.proto +2 -2
  96. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/query.proto +2 -2
  97. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/reset.proto +2 -2
  98. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/schedule.proto +2 -2
  99. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +2 -2
  100. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/update.proto +24 -19
  101. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/workflow.proto +2 -2
  102. data/bridge/sdk-core/protos/api_upstream/temporal/api/errordetails/v1/message.proto +2 -2
  103. data/bridge/sdk-core/protos/api_upstream/temporal/api/failure/v1/message.proto +2 -2
  104. data/bridge/sdk-core/protos/api_upstream/temporal/api/filter/v1/message.proto +2 -2
  105. data/bridge/sdk-core/protos/api_upstream/temporal/api/history/v1/message.proto +62 -26
  106. data/bridge/sdk-core/protos/api_upstream/temporal/api/namespace/v1/message.proto +4 -2
  107. data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +24 -61
  108. data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/service.proto +2 -21
  109. data/bridge/sdk-core/protos/api_upstream/temporal/api/protocol/v1/message.proto +57 -0
  110. data/bridge/sdk-core/protos/api_upstream/temporal/api/query/v1/message.proto +2 -2
  111. data/bridge/sdk-core/protos/api_upstream/temporal/api/replication/v1/message.proto +2 -2
  112. data/bridge/sdk-core/protos/api_upstream/temporal/api/schedule/v1/message.proto +110 -31
  113. data/bridge/sdk-core/protos/api_upstream/temporal/api/sdk/v1/task_complete_metadata.proto +63 -0
  114. data/bridge/sdk-core/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +4 -4
  115. data/bridge/sdk-core/protos/api_upstream/temporal/api/update/v1/message.proto +71 -6
  116. data/bridge/sdk-core/protos/api_upstream/temporal/api/version/v1/message.proto +2 -2
  117. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflow/v1/message.proto +3 -2
  118. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +111 -36
  119. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +19 -5
  120. data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_result/activity_result.proto +1 -0
  121. data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_task/activity_task.proto +1 -0
  122. data/bridge/sdk-core/protos/local/temporal/sdk/core/child_workflow/child_workflow.proto +1 -0
  123. data/bridge/sdk-core/protos/local/temporal/sdk/core/common/common.proto +1 -0
  124. data/bridge/sdk-core/protos/local/temporal/sdk/core/core_interface.proto +1 -0
  125. data/bridge/sdk-core/protos/local/temporal/sdk/core/external_data/external_data.proto +1 -0
  126. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +9 -0
  127. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +9 -1
  128. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_completion/workflow_completion.proto +6 -0
  129. data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/request_response.proto +2 -2
  130. data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/service.proto +2 -2
  131. data/bridge/sdk-core/sdk/Cargo.toml +4 -3
  132. data/bridge/sdk-core/sdk/src/interceptors.rs +36 -3
  133. data/bridge/sdk-core/sdk/src/lib.rs +94 -25
  134. data/bridge/sdk-core/sdk/src/workflow_context.rs +13 -2
  135. data/bridge/sdk-core/sdk/src/workflow_future.rs +10 -13
  136. data/bridge/sdk-core/sdk-core-protos/Cargo.toml +5 -2
  137. data/bridge/sdk-core/sdk-core-protos/build.rs +36 -2
  138. data/bridge/sdk-core/sdk-core-protos/src/history_builder.rs +164 -104
  139. data/bridge/sdk-core/sdk-core-protos/src/history_info.rs +27 -23
  140. data/bridge/sdk-core/sdk-core-protos/src/lib.rs +252 -74
  141. data/bridge/sdk-core/sdk-core-protos/src/task_token.rs +12 -2
  142. data/bridge/sdk-core/test-utils/Cargo.toml +4 -1
  143. data/bridge/sdk-core/test-utils/src/canned_histories.rs +106 -296
  144. data/bridge/sdk-core/test-utils/src/histfetch.rs +1 -1
  145. data/bridge/sdk-core/test-utils/src/lib.rs +161 -50
  146. data/bridge/sdk-core/test-utils/src/wf_input_saver.rs +50 -0
  147. data/bridge/sdk-core/test-utils/src/workflows.rs +29 -0
  148. data/bridge/sdk-core/tests/fuzzy_workflow.rs +130 -0
  149. data/bridge/sdk-core/tests/{load_tests.rs → heavy_tests.rs} +125 -51
  150. data/bridge/sdk-core/tests/integ_tests/ephemeral_server_tests.rs +25 -3
  151. data/bridge/sdk-core/tests/integ_tests/heartbeat_tests.rs +10 -5
  152. data/bridge/sdk-core/tests/integ_tests/metrics_tests.rs +239 -0
  153. data/bridge/sdk-core/tests/integ_tests/polling_tests.rs +4 -60
  154. data/bridge/sdk-core/tests/integ_tests/queries_tests.rs +5 -128
  155. data/bridge/sdk-core/tests/integ_tests/visibility_tests.rs +83 -25
  156. data/bridge/sdk-core/tests/integ_tests/workflow_tests/activities.rs +93 -69
  157. data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +1 -0
  158. data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +6 -13
  159. data/bridge/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +1 -0
  160. data/bridge/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +6 -2
  161. data/bridge/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +3 -10
  162. data/bridge/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +151 -116
  163. data/bridge/sdk-core/tests/integ_tests/workflow_tests/modify_wf_properties.rs +54 -0
  164. data/bridge/sdk-core/tests/integ_tests/workflow_tests/patches.rs +7 -28
  165. data/bridge/sdk-core/tests/integ_tests/workflow_tests/replay.rs +115 -24
  166. data/bridge/sdk-core/tests/integ_tests/workflow_tests/resets.rs +1 -0
  167. data/bridge/sdk-core/tests/integ_tests/workflow_tests/signals.rs +18 -14
  168. data/bridge/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +6 -20
  169. data/bridge/sdk-core/tests/integ_tests/workflow_tests/timers.rs +10 -21
  170. data/bridge/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +6 -4
  171. data/bridge/sdk-core/tests/integ_tests/workflow_tests.rs +27 -18
  172. data/bridge/sdk-core/tests/main.rs +8 -16
  173. data/bridge/sdk-core/tests/runner.rs +75 -36
  174. data/bridge/sdk-core/tests/wf_input_replay.rs +32 -0
  175. data/bridge/src/connection.rs +117 -82
  176. data/bridge/src/lib.rs +356 -42
  177. data/bridge/src/runtime.rs +10 -3
  178. data/bridge/src/test_server.rs +153 -0
  179. data/bridge/src/worker.rs +133 -9
  180. data/lib/gen/temporal/api/batch/v1/message_pb.rb +8 -6
  181. data/lib/gen/temporal/api/command/v1/message_pb.rb +10 -16
  182. data/lib/gen/temporal/api/common/v1/message_pb.rb +5 -1
  183. data/lib/gen/temporal/api/enums/v1/batch_operation_pb.rb +2 -1
  184. data/lib/gen/temporal/api/enums/v1/command_type_pb.rb +3 -3
  185. data/lib/gen/temporal/api/enums/v1/common_pb.rb +2 -1
  186. data/lib/gen/temporal/api/enums/v1/event_type_pb.rb +5 -4
  187. data/lib/gen/temporal/api/enums/v1/failed_cause_pb.rb +9 -1
  188. data/lib/gen/temporal/api/enums/v1/namespace_pb.rb +1 -1
  189. data/lib/gen/temporal/api/enums/v1/query_pb.rb +1 -1
  190. data/lib/gen/temporal/api/enums/v1/reset_pb.rb +1 -1
  191. data/lib/gen/temporal/api/enums/v1/schedule_pb.rb +1 -1
  192. data/lib/gen/temporal/api/enums/v1/task_queue_pb.rb +1 -1
  193. data/lib/gen/temporal/api/enums/v1/update_pb.rb +7 -10
  194. data/lib/gen/temporal/api/enums/v1/workflow_pb.rb +1 -1
  195. data/lib/gen/temporal/api/errordetails/v1/message_pb.rb +1 -1
  196. data/lib/gen/temporal/api/failure/v1/message_pb.rb +1 -1
  197. data/lib/gen/temporal/api/filter/v1/message_pb.rb +1 -1
  198. data/lib/gen/temporal/api/history/v1/message_pb.rb +34 -25
  199. data/lib/gen/temporal/api/namespace/v1/message_pb.rb +2 -1
  200. data/lib/gen/temporal/api/operatorservice/v1/request_response_pb.rb +14 -51
  201. data/lib/gen/temporal/api/operatorservice/v1/service_pb.rb +1 -1
  202. data/lib/gen/temporal/api/protocol/v1/message_pb.rb +30 -0
  203. data/lib/gen/temporal/api/query/v1/message_pb.rb +1 -1
  204. data/lib/gen/temporal/api/replication/v1/message_pb.rb +1 -1
  205. data/lib/gen/temporal/api/schedule/v1/message_pb.rb +22 -1
  206. data/lib/gen/temporal/api/sdk/v1/task_complete_metadata_pb.rb +23 -0
  207. data/lib/gen/temporal/api/taskqueue/v1/message_pb.rb +2 -2
  208. data/lib/gen/temporal/api/testservice/v1/request_response_pb.rb +49 -0
  209. data/lib/gen/temporal/api/testservice/v1/service_pb.rb +21 -0
  210. data/lib/gen/temporal/api/update/v1/message_pb.rb +49 -3
  211. data/lib/gen/temporal/api/version/v1/message_pb.rb +1 -1
  212. data/lib/gen/temporal/api/workflow/v1/message_pb.rb +2 -1
  213. data/lib/gen/temporal/api/workflowservice/v1/request_response_pb.rb +47 -20
  214. data/lib/gen/temporal/api/workflowservice/v1/service_pb.rb +1 -1
  215. data/lib/gen/temporal/sdk/core/activity_result/activity_result_pb.rb +13 -9
  216. data/lib/gen/temporal/sdk/core/activity_task/activity_task_pb.rb +10 -6
  217. data/lib/gen/temporal/sdk/core/child_workflow/child_workflow_pb.rb +13 -9
  218. data/lib/gen/temporal/sdk/core/common/common_pb.rb +7 -3
  219. data/lib/gen/temporal/sdk/core/core_interface_pb.rb +9 -3
  220. data/lib/gen/temporal/sdk/core/external_data/external_data_pb.rb +7 -3
  221. data/lib/gen/temporal/sdk/core/workflow_activation/workflow_activation_pb.rb +28 -21
  222. data/lib/gen/temporal/sdk/core/workflow_commands/workflow_commands_pb.rb +32 -24
  223. data/lib/gen/temporal/sdk/core/workflow_completion/workflow_completion_pb.rb +12 -5
  224. data/lib/temporalio/activity/context.rb +102 -0
  225. data/lib/temporalio/activity/info.rb +67 -0
  226. data/lib/temporalio/activity.rb +85 -0
  227. data/lib/temporalio/bridge/connect_options.rb +15 -0
  228. data/lib/temporalio/bridge/error.rb +8 -0
  229. data/lib/temporalio/bridge/retry_config.rb +24 -0
  230. data/lib/temporalio/bridge/tls_options.rb +19 -0
  231. data/lib/temporalio/bridge.rb +14 -0
  232. data/lib/{temporal → temporalio}/client/implementation.rb +57 -56
  233. data/lib/{temporal → temporalio}/client/workflow_handle.rb +35 -35
  234. data/lib/{temporal → temporalio}/client.rb +19 -32
  235. data/lib/temporalio/connection/retry_config.rb +44 -0
  236. data/lib/temporalio/connection/service.rb +20 -0
  237. data/lib/temporalio/connection/test_service.rb +92 -0
  238. data/lib/temporalio/connection/tls_options.rb +51 -0
  239. data/lib/temporalio/connection/workflow_service.rb +731 -0
  240. data/lib/temporalio/connection.rb +86 -0
  241. data/lib/{temporal → temporalio}/data_converter.rb +76 -35
  242. data/lib/{temporal → temporalio}/error/failure.rb +6 -6
  243. data/lib/{temporal → temporalio}/error/workflow_failure.rb +4 -2
  244. data/lib/{temporal → temporalio}/errors.rb +19 -1
  245. data/lib/{temporal → temporalio}/failure_converter/base.rb +5 -5
  246. data/lib/{temporal → temporalio}/failure_converter/basic.rb +58 -52
  247. data/lib/temporalio/failure_converter.rb +7 -0
  248. data/lib/temporalio/interceptor/activity_inbound.rb +22 -0
  249. data/lib/temporalio/interceptor/activity_outbound.rb +24 -0
  250. data/lib/{temporal → temporalio}/interceptor/chain.rb +7 -6
  251. data/lib/{temporal → temporalio}/interceptor/client.rb +27 -2
  252. data/lib/temporalio/interceptor.rb +22 -0
  253. data/lib/{temporal → temporalio}/payload_codec/base.rb +5 -5
  254. data/lib/{temporal → temporalio}/payload_converter/base.rb +3 -3
  255. data/lib/{temporal → temporalio}/payload_converter/bytes.rb +4 -3
  256. data/lib/{temporal → temporalio}/payload_converter/composite.rb +7 -5
  257. data/lib/{temporal → temporalio}/payload_converter/encoding_base.rb +4 -4
  258. data/lib/{temporal → temporalio}/payload_converter/json.rb +4 -3
  259. data/lib/{temporal → temporalio}/payload_converter/nil.rb +4 -3
  260. data/lib/temporalio/payload_converter.rb +14 -0
  261. data/lib/{temporal → temporalio}/retry_policy.rb +17 -7
  262. data/lib/{temporal → temporalio}/retry_state.rb +1 -1
  263. data/lib/temporalio/runtime.rb +25 -0
  264. data/lib/temporalio/testing/time_skipping_handle.rb +32 -0
  265. data/lib/temporalio/testing/time_skipping_interceptor.rb +23 -0
  266. data/lib/temporalio/testing/workflow_environment.rb +112 -0
  267. data/lib/temporalio/testing.rb +175 -0
  268. data/lib/{temporal → temporalio}/timeout_type.rb +2 -2
  269. data/lib/temporalio/version.rb +3 -0
  270. data/lib/temporalio/worker/activity_runner.rb +114 -0
  271. data/lib/temporalio/worker/activity_worker.rb +164 -0
  272. data/lib/temporalio/worker/reactor.rb +46 -0
  273. data/lib/temporalio/worker/runner.rb +63 -0
  274. data/lib/temporalio/worker/sync_worker.rb +124 -0
  275. data/lib/temporalio/worker/thread_pool_executor.rb +51 -0
  276. data/lib/temporalio/worker.rb +204 -0
  277. data/lib/temporalio/workflow/async.rb +46 -0
  278. data/lib/{temporal → temporalio}/workflow/execution_info.rb +4 -4
  279. data/lib/{temporal → temporalio}/workflow/execution_status.rb +1 -1
  280. data/lib/temporalio/workflow/future.rb +138 -0
  281. data/lib/{temporal → temporalio}/workflow/id_reuse_policy.rb +6 -6
  282. data/lib/temporalio/workflow/info.rb +76 -0
  283. data/lib/{temporal → temporalio}/workflow/query_reject_condition.rb +5 -5
  284. data/lib/temporalio.rb +12 -3
  285. data/temporalio.gemspec +11 -6
  286. metadata +137 -64
  287. data/bridge/sdk-core/Cargo.lock +0 -2606
  288. data/bridge/sdk-core/bridge-ffi/Cargo.toml +0 -24
  289. data/bridge/sdk-core/bridge-ffi/LICENSE.txt +0 -23
  290. data/bridge/sdk-core/bridge-ffi/build.rs +0 -25
  291. data/bridge/sdk-core/bridge-ffi/include/sdk-core-bridge.h +0 -249
  292. data/bridge/sdk-core/bridge-ffi/src/lib.rs +0 -825
  293. data/bridge/sdk-core/bridge-ffi/src/wrappers.rs +0 -211
  294. data/bridge/sdk-core/core/src/log_export.rs +0 -62
  295. data/bridge/sdk-core/core/src/worker/workflow/machines/mutable_side_effect_state_machine.rs +0 -127
  296. data/bridge/sdk-core/core/src/worker/workflow/machines/side_effect_state_machine.rs +0 -71
  297. data/bridge/sdk-core/protos/api_upstream/temporal/api/cluster/v1/message.proto +0 -83
  298. data/bridge/sdk-core/protos/local/temporal/sdk/core/bridge/bridge.proto +0 -210
  299. data/bridge/sdk-core/sdk/src/conversions.rs +0 -8
  300. data/lib/bridge.so +0 -0
  301. data/lib/gen/temporal/api/cluster/v1/message_pb.rb +0 -67
  302. data/lib/gen/temporal/api/enums/v1/cluster_pb.rb +0 -26
  303. data/lib/gen/temporal/sdk/core/bridge/bridge_pb.rb +0 -222
  304. data/lib/temporal/bridge.rb +0 -14
  305. data/lib/temporal/connection.rb +0 -736
  306. data/lib/temporal/failure_converter.rb +0 -8
  307. data/lib/temporal/payload_converter.rb +0 -14
  308. data/lib/temporal/runtime.rb +0 -22
  309. data/lib/temporal/version.rb +0 -3
  310. data/lib/temporal.rb +0 -8
@@ -0,0 +1,124 @@
1
+ require 'temporal/sdk/core/activity_task/activity_task_pb'
2
+ require 'temporal/sdk/core/core_interface_pb'
3
+ require 'temporal/sdk/core/workflow_activation/workflow_activation_pb'
4
+ require 'temporal/sdk/core/workflow_completion/workflow_completion_pb'
5
+
6
+ module Temporalio
7
+ class Worker
8
+ # This is a wrapper class for the Core Worker (provided via the Bridge) to abstract
9
+ # away its async nature allowing other modules/classes to interact with it without
10
+ # any callbacks (simplifying the code).
11
+ #
12
+ # CAUTION: This class will block the thread its running in unless it is used from
13
+ # within an Async reactor.
14
+ #
15
+ # @api private
16
+ class SyncWorker
17
+ def initialize(core_worker)
18
+ @core_worker = core_worker
19
+ end
20
+
21
+ def poll_activity_task
22
+ with_queue do |done|
23
+ core_worker.poll_activity_task do |task, error|
24
+ done.call(task && Temporalio::Bridge::Api::ActivityTask::ActivityTask.decode(task), error)
25
+ end
26
+ end
27
+ end
28
+
29
+ def complete_activity_task_with_success(task_token, payload)
30
+ result = Temporalio::Bridge::Api::ActivityResult::ActivityExecutionResult.new(
31
+ completed: Temporalio::Bridge::Api::ActivityResult::Success.new(result: payload),
32
+ )
33
+
34
+ complete_activity_task(task_token, result)
35
+ end
36
+
37
+ def complete_activity_task_with_failure(task_token, failure)
38
+ result = Temporalio::Bridge::Api::ActivityResult::ActivityExecutionResult.new(
39
+ failed: Temporalio::Bridge::Api::ActivityResult::Failure.new(failure: failure),
40
+ )
41
+
42
+ complete_activity_task(task_token, result)
43
+ end
44
+
45
+ def complete_activity_task_with_cancellation(task_token, failure)
46
+ result = Temporalio::Bridge::Api::ActivityResult::ActivityExecutionResult.new(
47
+ cancelled: Temporalio::Bridge::Api::ActivityResult::Cancellation.new(failure: failure),
48
+ )
49
+
50
+ complete_activity_task(task_token, result)
51
+ end
52
+
53
+ def record_activity_heartbeat(task_token, payloads)
54
+ proto = Temporalio::Bridge::Api::CoreInterface::ActivityHeartbeat.new(
55
+ task_token: task_token,
56
+ details: payloads,
57
+ )
58
+ encoded_proto = Temporalio::Bridge::Api::CoreInterface::ActivityHeartbeat.encode(proto)
59
+
60
+ core_worker.record_activity_heartbeat(encoded_proto)
61
+ end
62
+
63
+ def poll_workflow_activation
64
+ with_queue do |done|
65
+ core_worker.poll_workflow_activation do |task, error|
66
+ done.call(task && Temporalio::Bridge::Api::WorkflowActivation::WorkflowActivation.decode(task), error)
67
+ end
68
+ end
69
+ end
70
+
71
+ def complete_workflow_activation_with_success(run_id, commands)
72
+ proto = Temporalio::Bridge::Api::WorkflowCompletion::WorkflowActivationCompletion.new(
73
+ run_id: run_id,
74
+ successful: Temporalio::Bridge::Api::WorkflowCompletion::Success.new(commands: commands),
75
+ )
76
+
77
+ complete_workflow_activation(proto)
78
+ end
79
+
80
+ def complete_workflow_activation_with_failure(run_id, failure)
81
+ proto = Temporalio::Bridge::Api::WorkflowCompletion::WorkflowActivationCompletion.new(
82
+ run_id: run_id,
83
+ failed: Temporalio::Bridge::Api::WorkflowCompletion::Failure.new(failure: failure),
84
+ )
85
+
86
+ complete_workflow_activation(proto)
87
+ end
88
+
89
+ private
90
+
91
+ attr_reader :core_worker
92
+
93
+ def with_queue(&block)
94
+ queue = Queue.new
95
+ done = ->(result, error = nil) { queue << [result, error] }
96
+ block.call(done)
97
+ (result, exception) = queue.pop
98
+ raise exception if exception
99
+
100
+ result
101
+ end
102
+
103
+ def complete_activity_task(task_token, result)
104
+ proto = Temporalio::Bridge::Api::CoreInterface::ActivityTaskCompletion.new(
105
+ task_token: task_token,
106
+ result: result,
107
+ )
108
+ encoded_proto = Temporalio::Bridge::Api::CoreInterface::ActivityTaskCompletion.encode(proto)
109
+
110
+ with_queue do |done|
111
+ core_worker.complete_activity_task(encoded_proto, &done)
112
+ end
113
+ end
114
+
115
+ def complete_workflow_activation(proto)
116
+ encoded_proto = Temporalio::Bridge::Api::WorkflowCompletion::WorkflowActivationCompletion.encode(proto)
117
+
118
+ with_queue do |done|
119
+ core_worker.complete_workflow_activation(encoded_proto, &done)
120
+ end
121
+ end
122
+ end
123
+ end
124
+ end
@@ -0,0 +1,51 @@
1
+ module Temporalio
2
+ class Worker
3
+ # A generic fixed thread pool.
4
+ #
5
+ # This is used to execute multiple activities concurrently and independenty of each other.
6
+ #
7
+ # @note This is a fixed thread pool that allocated threads eagerly and has an infinite buffer.
8
+ class ThreadPoolExecutor
9
+ # Generate new thread pool executor.
10
+ #
11
+ # @param size [Integer] Number of concurrently executing threads.
12
+ def initialize(size)
13
+ @queue = Queue.new
14
+ @pool = Array.new(size) do
15
+ Thread.new { poll }
16
+ end
17
+ end
18
+
19
+ # Execute a block of code inside of the threads.
20
+ #
21
+ # @yield Block of code to be executed.
22
+ def schedule(&block)
23
+ queue << block
24
+ end
25
+
26
+ # Stop the thread pool and wait for all threads to finish work.
27
+ def shutdown
28
+ pool.size.times do
29
+ schedule { throw EXIT_SYMBOL }
30
+ end
31
+
32
+ pool.each(&:join)
33
+ end
34
+
35
+ private
36
+
37
+ attr_reader :queue, :pool
38
+
39
+ EXIT_SYMBOL = :exit
40
+
41
+ def poll
42
+ catch(EXIT_SYMBOL) do
43
+ loop do
44
+ job = queue.pop
45
+ job.call
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,204 @@
1
+ require 'async'
2
+ require 'temporalio/bridge'
3
+ require 'temporalio/data_converter'
4
+ require 'temporalio/runtime'
5
+ require 'temporalio/worker/activity_worker'
6
+ require 'temporalio/worker/runner'
7
+ require 'temporalio/worker/sync_worker'
8
+ require 'temporalio/worker/thread_pool_executor'
9
+
10
+ module Temporalio
11
+ # Worker to process activities.
12
+ #
13
+ # Once created, workers can be run and shutdown explicitly via {#run} and {#shutdown}.
14
+ class Worker
15
+ # Run multiple workers and wait for them to be shut down.
16
+ #
17
+ # This will not return until shutdown is complete (and all running activities in all workers
18
+ # finished) and will raise if any of the workers raises a fatal error.
19
+ #
20
+ # @param workers [Array<Temporalio::Worker>] A list of the workers to be run.
21
+ # @param shutdown_signals [Array<String>] A list of process signals for the worker to stop on.
22
+ # This argument can not be used with a custom block.
23
+ #
24
+ # @yield Optionally you can provide a block by the end of which all the workers will be shut
25
+ # down. Any errors raised from this block will be re-raised by this method.
26
+ def self.run(*workers, shutdown_signals: [], &block)
27
+ unless shutdown_signals.empty?
28
+ if block
29
+ raise ArgumentError, 'Temporalio::Worker.run accepts :shutdown_signals or a block, but not both'
30
+ end
31
+
32
+ signal_queue = Queue.new
33
+
34
+ shutdown_signals.each do |signal|
35
+ Signal.trap(signal) { signal_queue.close }
36
+ end
37
+
38
+ block = -> { signal_queue.pop }
39
+ end
40
+
41
+ Runner.new(*workers).run(&block)
42
+ end
43
+
44
+ # Create a worker to process activities.
45
+ #
46
+ # @param connection [Temporalio::Connection] A connection to be used for this worker.
47
+ # @param namespace [String] A namespace.
48
+ # @param task_queue [String] A task queue.
49
+ # @param activities [Array<Class>] A list of activities (subclasses of {Temporalio::Activity}).
50
+ # @param data_converter [Temporalio::DataConverter] Data converter to use for all data conversions
51
+ # to/from payloads.
52
+ # @param activity_executor [ThreadPoolExecutor] Concurrent executor for all activities. Defaults
53
+ # to a {ThreadPoolExecutor} with `:max_concurrent_activities` available threads.
54
+ # @param interceptors [Array<Temporalio::Interceptor::ActivityInbound, Temporalio::Interceptor::ActivityOutbound>]
55
+ # Collection of interceptors for this worker.
56
+ # @param max_concurrent_activities [Integer] Number of concurrently running activities.
57
+ # @param graceful_shutdown_timeout [Integer] Amount of time (in seconds) activities are given
58
+ # after a shutdown to complete before they are cancelled. A default value of `nil` means that
59
+ # activities are never cancelled when handling a shutdown.
60
+ #
61
+ # @raise [ArgumentError] When no activities have been provided.
62
+ def initialize(
63
+ connection,
64
+ namespace,
65
+ task_queue,
66
+ activities: [],
67
+ data_converter: Temporalio::DataConverter.new,
68
+ activity_executor: nil,
69
+ interceptors: [],
70
+ max_concurrent_activities: 100,
71
+ graceful_shutdown_timeout: nil
72
+ )
73
+ @started = false
74
+ @shutdown = false
75
+ @mutex = Mutex.new
76
+ @runtime = Temporalio::Runtime.instance
77
+ @activity_executor = activity_executor || ThreadPoolExecutor.new(max_concurrent_activities)
78
+ @core_worker = Temporalio::Bridge::Worker.create(
79
+ @runtime.core_runtime,
80
+ connection.core_connection,
81
+ namespace,
82
+ task_queue,
83
+ 0, # maxCachedWorkflows disabled temporarily
84
+ # FIXME: expose enable_non_local_activities
85
+ activities.empty?,
86
+ )
87
+ sync_worker = Worker::SyncWorker.new(@core_worker)
88
+ @activity_worker =
89
+ unless activities.empty?
90
+ Worker::ActivityWorker.new(
91
+ task_queue,
92
+ sync_worker,
93
+ activities,
94
+ data_converter,
95
+ interceptors,
96
+ @activity_executor,
97
+ graceful_shutdown_timeout,
98
+ )
99
+ end
100
+
101
+ unless @activity_worker
102
+ raise ArgumentError, 'At least one activity must be specified'
103
+ end
104
+ end
105
+
106
+ # Run the worker and wait on it to be shut down.
107
+ #
108
+ # This will not return until shutdown is complete (and all running activities finished) and will
109
+ # raise if there is a worker fatal error. To run multiple workers use the class method {.run}.
110
+ #
111
+ # @note A worker is only intended to be started once. Initialize a new worker should you need to
112
+ # run it again.
113
+ #
114
+ # @yield Optionally you can provide a block by the end of which the worker will shut itself
115
+ # down. You can use this to stop a worker after some time has passed or any other arbitrary
116
+ # implementation has completed. Any errors raised from this block will be re-raised by this
117
+ # method.
118
+ def run(&block)
119
+ Runner.new(self).run(&block)
120
+ end
121
+
122
+ # Start the worker asynchronously in a shared runtime.
123
+ #
124
+ # This is an internal method for advanced use-cases for those intended to implement their own
125
+ # worker runner.
126
+ #
127
+ # @note A worker is only intended to be started once. Initialize a new worker should you need to
128
+ # start it again.
129
+ #
130
+ # @api private
131
+ #
132
+ # @param runner [Temporalio::Worker::Runner] A runner to notify when the worker is shutting down.
133
+ def start(runner = nil)
134
+ mutex.synchronize do
135
+ raise 'Worker is already started' if started?
136
+
137
+ @started = true
138
+ end
139
+
140
+ @runner = runner
141
+ runtime.ensure_callback_loop
142
+
143
+ runtime.reactor.async do |task|
144
+ if activity_worker
145
+ task.async do |task|
146
+ activity_worker.run(task)
147
+ rescue StandardError => e
148
+ shutdown(e) # initiate shutdown because of a fatal error
149
+ end
150
+ end
151
+ end
152
+ end
153
+
154
+ # Initiate a worker shutdown and wait until complete.
155
+ #
156
+ # This can be called before the worker has even started and is safe for repeated invocations.
157
+ # This method will not return until the worker has completed shutting down.
158
+ #
159
+ # @param exception [Exception] An exception to be raised from {#run} or {.run} methods after a
160
+ # shutdown procedure has completed.
161
+ def shutdown(exception = Temporalio::Error::WorkerShutdown.new('Manual shutdown'))
162
+ mutex.synchronize do
163
+ return unless running?
164
+
165
+ # Let the runner know we're shutting down, so it can stop other workers.
166
+ # This will cause a reentrant call to this method, but the mutex above will block that call.
167
+ runner&.shutdown(exception)
168
+
169
+ # Initiate Core shutdown, which will start dropping poll requests
170
+ core_worker.initiate_shutdown
171
+ # Start the graceful activity shutdown timer, which will cancel activities after the timeout
172
+ activity_worker&.setup_graceful_shutdown_timer(runtime.reactor)
173
+ # Wait for workers to drain any outstanding tasks
174
+ activity_worker&.drain
175
+ activity_executor.shutdown
176
+ # Finalize the shutdown by stopping the Core
177
+ core_worker.finalize_shutdown
178
+
179
+ @shutdown = true
180
+ end
181
+ end
182
+
183
+ # Whether the worker has been started.
184
+ #
185
+ # @return [Boolean]
186
+ def started?
187
+ @started
188
+ end
189
+
190
+ # Whether the worker is running.
191
+ #
192
+ # This is only `true` if the worker has been started and not yet shut down.
193
+ #
194
+ # @return [Boolean]
195
+ def running?
196
+ @started && !@shutdown
197
+ end
198
+
199
+ private
200
+
201
+ attr_reader :mutex, :runtime, :activity_executor, :core_worker, :activity_worker,
202
+ :runner
203
+ end
204
+ end
@@ -0,0 +1,46 @@
1
+ require 'temporalio/workflow/future'
2
+
3
+ module Temporalio
4
+ class Workflow
5
+ module Async
6
+ def self.run(&block)
7
+ Future.new do |future, resolve, reject|
8
+ Fiber.new do
9
+ Future.current = future
10
+ result = block.call
11
+ resolve.call(result)
12
+ rescue StandardError => e
13
+ reject.call(e)
14
+ end.resume
15
+ end
16
+ end
17
+
18
+ def self.all(*futures)
19
+ Future.new do |future, resolve, _reject|
20
+ future.on_cancel { futures.each(&:cancel) }
21
+
22
+ futures.each do |f|
23
+ f.then do
24
+ # Resolve the aggregate once all futures have been fulfilled (resolved or rejected)
25
+ resolve.call(nil) if futures.none?(&:pending?)
26
+ end
27
+ end
28
+ end
29
+ end
30
+
31
+ def self.any(*futures)
32
+ # This future is never rejected
33
+ Future.new do |future, resolve, _reject|
34
+ future.on_cancel { futures.each(&:cancel) }
35
+
36
+ futures.each do |f|
37
+ # Resolve the aggregate once the first future fulfills (resolved or rejected)
38
+ # NOTE: The the first completed future will be the resolved value and all subsequent
39
+ # calls to `resolve` will have no effect.
40
+ f.then { resolve.call(f) }
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -1,8 +1,8 @@
1
- require 'temporal/errors'
2
- require 'temporal/workflow/execution_status'
1
+ require 'temporalio/errors'
2
+ require 'temporalio/workflow/execution_status'
3
3
  require 'google/protobuf/well_known_types'
4
4
 
5
- module Temporal
5
+ module Temporalio
6
6
  class Workflow
7
7
  class ExecutionInfo < Struct.new(
8
8
  :raw,
@@ -23,7 +23,7 @@ module Temporal
23
23
  )
24
24
  def self.from_raw(response, converter)
25
25
  raw_info = response.workflow_execution_info
26
- raise Temporal::Error::UnexpectedResponse, 'missing workflow_execution_info' unless raw_info
26
+ raise Temporalio::Error::UnexpectedResponse, 'missing workflow_execution_info' unless raw_info
27
27
 
28
28
  new(
29
29
  raw: response,
@@ -1,4 +1,4 @@
1
- module Temporal
1
+ module Temporalio
2
2
  class Workflow
3
3
  module ExecutionStatus
4
4
  STATUSES = [
@@ -0,0 +1,138 @@
1
+ module Temporalio
2
+ class Workflow
3
+ class Future
4
+ THREAD_KEY = :temporalio_workflow_future
5
+
6
+ class Rejected < StandardError; end
7
+
8
+ def self.current
9
+ Thread.current[THREAD_KEY]
10
+ end
11
+
12
+ def self.current=(future)
13
+ Thread.current[THREAD_KEY] = future
14
+ end
15
+
16
+ # Revist the reason for combining futures and cancellation scopes, maybe they are separate?
17
+ def initialize(&block)
18
+ @resolved = false
19
+ @value = nil
20
+ @rejected = false
21
+ @error = Rejected.new('Future rejected')
22
+ @cancel_requested = false
23
+ @blocked_fibers = []
24
+ @callbacks = []
25
+ @cancel_callbacks = []
26
+
27
+ # Chain cancellation into parent future if one exists
28
+ Future.current&.on_cancel { cancel }
29
+
30
+ # NOTE: resolve and reject methods are accessible via procs to avoid exposing
31
+ # them via the public interface.
32
+ block.call(
33
+ self,
34
+ ->(value) { resolve(value) },
35
+ ->(error) { reject(error) },
36
+ )
37
+ end
38
+
39
+ def then(&block)
40
+ Future.new do |future, resolve, reject|
41
+ # @type var wrapped_block: ^() -> void
42
+ wrapped_block = -> do # rubocop:disable Style/Lambda
43
+ Fiber.new do
44
+ Future.current = future
45
+ # The block is provided the Future on which #then was called
46
+ result = block.call(self)
47
+ resolve.call(result)
48
+ rescue StandardError => e
49
+ reject.call(e)
50
+ end.resume
51
+ end
52
+
53
+ if pending?
54
+ callbacks << wrapped_block
55
+ else
56
+ wrapped_block.call
57
+ end
58
+ end
59
+ end
60
+
61
+ def on_cancel(&block)
62
+ if pending? && !cancel_requested?
63
+ cancel_callbacks << block
64
+ else
65
+ block.call
66
+ end
67
+ end
68
+
69
+ def pending?
70
+ !resolved? && !rejected?
71
+ end
72
+
73
+ def resolved?
74
+ @resolved
75
+ end
76
+
77
+ def rejected?
78
+ @rejected
79
+ end
80
+
81
+ def await
82
+ if pending?
83
+ blocked_fibers << Fiber.current
84
+ # yield into the parent fiber
85
+ Fiber.yield while pending?
86
+ end
87
+
88
+ raise error if rejected?
89
+
90
+ value
91
+ end
92
+
93
+ def cancel
94
+ return unless pending?
95
+ return if cancel_requested?
96
+
97
+ @cancel_requested = true
98
+ cancel_callbacks.each(&:call)
99
+ end
100
+
101
+ private
102
+
103
+ attr_reader :value, :error, :blocked_fibers, :callbacks, :cancel_callbacks
104
+
105
+ def cancel_requested?
106
+ @cancel_requested
107
+ end
108
+
109
+ # TODO: Run callbacks in a Fiber to allow blocking calls
110
+ def run_callbacks
111
+ callbacks.each(&:call)
112
+ end
113
+
114
+ # Unblock every fiber that this future is awaited on
115
+ def resume_fibers
116
+ blocked_fibers.each(&:resume)
117
+ end
118
+
119
+ def resolve(value)
120
+ return unless pending?
121
+
122
+ @value = value
123
+ @resolved = true
124
+ run_callbacks
125
+ resume_fibers
126
+ end
127
+
128
+ def reject(error)
129
+ return unless pending?
130
+
131
+ @error = error
132
+ @rejected = true
133
+ run_callbacks
134
+ resume_fibers
135
+ end
136
+ end
137
+ end
138
+ end
@@ -1,10 +1,10 @@
1
1
  require 'temporal/api/enums/v1/workflow_pb'
2
2
 
3
- module Temporal
3
+ module Temporalio
4
4
  class Workflow
5
5
  # How already-in-use workflow IDs are handled on start.
6
6
  #
7
- # @see Temporal::Api::Enums::V1::WorkflowIdReusePolicy
7
+ # @see Temporalio::Api::Enums::V1::WorkflowIdReusePolicy
8
8
  class IDReusePolicy
9
9
  POLICIES = [
10
10
  ALLOW_DUPLICATE = :ALLOW_DUPLICATE,
@@ -14,13 +14,13 @@ module Temporal
14
14
  ].freeze
15
15
 
16
16
  API_MAP = {
17
- Temporal::Api::Enums::V1::WorkflowIdReusePolicy::WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE =>
17
+ Temporalio::Api::Enums::V1::WorkflowIdReusePolicy::WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE =>
18
18
  ALLOW_DUPLICATE,
19
- Temporal::Api::Enums::V1::WorkflowIdReusePolicy::WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE_FAILED_ONLY =>
19
+ Temporalio::Api::Enums::V1::WorkflowIdReusePolicy::WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE_FAILED_ONLY =>
20
20
  ALLOW_DUPLICATE_FAILED_ONLY,
21
- Temporal::Api::Enums::V1::WorkflowIdReusePolicy::WORKFLOW_ID_REUSE_POLICY_REJECT_DUPLICATE =>
21
+ Temporalio::Api::Enums::V1::WorkflowIdReusePolicy::WORKFLOW_ID_REUSE_POLICY_REJECT_DUPLICATE =>
22
22
  REJECT_DUPLICATE,
23
- Temporal::Api::Enums::V1::WorkflowIdReusePolicy::WORKFLOW_ID_REUSE_POLICY_TERMINATE_IF_RUNNING =>
23
+ Temporalio::Api::Enums::V1::WorkflowIdReusePolicy::WORKFLOW_ID_REUSE_POLICY_TERMINATE_IF_RUNNING =>
24
24
  TERMINATE_IF_RUNNING,
25
25
  }.freeze
26
26
 
@@ -0,0 +1,76 @@
1
+ module Temporalio
2
+ class Workflow
3
+ # Class containing information about a workflow's parent.
4
+ class ParentInfo < Struct.new(
5
+ :namespace,
6
+ :run_id,
7
+ :workflow_id,
8
+ keyword_init: true,
9
+ )
10
+ # @!attribute [r] namespace
11
+ # @return [String] Namespace of the parent workflow.
12
+ # @!attribute [r] run_id
13
+ # @return [String] Run ID of the parent workflow.
14
+ # @!attribute [r] workflow_id
15
+ # @return [String] ID of the parent workflow.
16
+ end
17
+
18
+ # Class containing information about a workflow.
19
+ class Info < Struct.new(
20
+ :attempt,
21
+ :continued_run_id,
22
+ :cron_schedule,
23
+ :execution_timeout,
24
+ :headers,
25
+ :namespace,
26
+ :parent,
27
+ :raw_memo,
28
+ :retry_policy,
29
+ :run_id,
30
+ :run_timeout,
31
+ :search_attributes,
32
+ :start_time,
33
+ :task_queue,
34
+ :task_timeout,
35
+ :workflow_id,
36
+ :workflow_type,
37
+ keyword_init: true,
38
+ )
39
+ # @!attribute [r] attempt
40
+ # @return [Integer] Attempt of executing the workflow.
41
+ # @!attribute [r] continued_run_id
42
+ # @return [String] Run id of the previous workflow which continued-as-new or retired or cron
43
+ # executed into this workflow, if any.
44
+ # @!attribute [r] cron_schedule
45
+ # @return [String] Cron schedule of the workflow.
46
+ # @!attribute [r] execution_timeout
47
+ # @return [Float] Execution timeout of the workflow (in seconds).
48
+ # @!attribute [r] headers
49
+ # @return [Hash<String, any>] Headers for the workflow.
50
+ # @!attribute [r] namespace
51
+ # @return [String] Namespace of the workflow.
52
+ # @!attribute [r] parent
53
+ # @return [Temporalio::Workflow::ParentInfo] Info of the parent workflow.
54
+ # @!attribute [r] raw_memo
55
+ # @return [Hash<String, any>] Memo for the workflow.
56
+ # @!attribute [r] retry_policy
57
+ # @return [Temporalio::RetryPolicy] RetryPolicy of the workflow.
58
+ # @!attribute [r] run_id
59
+ # @return [String] Run ID of the workflow.
60
+ # @!attribute [r] run_timeout
61
+ # @return [Float] Run timeout of the workflow (in seconds).
62
+ # @!attribute [r] search_attributes
63
+ # @return [Hash<String, String>] Search attributes of the workflow.
64
+ # @!attribute [r] start_time
65
+ # @return [Time] Start time of the workflow.
66
+ # @!attribute [r] task_queue
67
+ # @return [String] Task queue of the workflow.
68
+ # @!attribute [r] task_timeout
69
+ # @return [Float] Task timeout of the workflow (in seconds).
70
+ # @!attribute [r] workflow_id
71
+ # @return [String] ID of the workflow.
72
+ # @!attribute [r] workflow_type
73
+ # @return [String] Type of the workflow.
74
+ end
75
+ end
76
+ end