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,342 @@
1
+ mod workflow_machines;
2
+
3
+ mod activity_state_machine;
4
+ mod cancel_external_state_machine;
5
+ mod cancel_workflow_state_machine;
6
+ mod child_workflow_state_machine;
7
+ mod complete_workflow_state_machine;
8
+ mod continue_as_new_workflow_state_machine;
9
+ mod fail_workflow_state_machine;
10
+ mod local_activity_state_machine;
11
+ #[allow(unused)]
12
+ mod mutable_side_effect_state_machine;
13
+ mod patch_state_machine;
14
+ #[allow(unused)]
15
+ mod side_effect_state_machine;
16
+ mod signal_external_state_machine;
17
+ mod timer_state_machine;
18
+ mod upsert_search_attributes_state_machine;
19
+ mod workflow_task_state_machine;
20
+
21
+ #[cfg(test)]
22
+ mod transition_coverage;
23
+
24
+ pub(crate) use workflow_machines::{WFMachinesError, WorkflowMachines};
25
+
26
+ use crate::telemetry::VecDisplayer;
27
+ use activity_state_machine::ActivityMachine;
28
+ use cancel_external_state_machine::CancelExternalMachine;
29
+ use cancel_workflow_state_machine::CancelWorkflowMachine;
30
+ use child_workflow_state_machine::ChildWorkflowMachine;
31
+ use complete_workflow_state_machine::CompleteWorkflowMachine;
32
+ use continue_as_new_workflow_state_machine::ContinueAsNewWorkflowMachine;
33
+ use fail_workflow_state_machine::FailWorkflowMachine;
34
+ use local_activity_state_machine::LocalActivityMachine;
35
+ use patch_state_machine::PatchMachine;
36
+ use prost::alloc::fmt::Formatter;
37
+ use rustfsm::{MachineError, StateMachine};
38
+ use signal_external_state_machine::SignalExternalMachine;
39
+ use std::{
40
+ convert::{TryFrom, TryInto},
41
+ fmt::{Debug, Display},
42
+ };
43
+ use temporal_sdk_core_protos::temporal::api::{
44
+ command::v1::Command as ProtoCommand,
45
+ enums::v1::{CommandType, EventType},
46
+ history::v1::HistoryEvent,
47
+ };
48
+ use timer_state_machine::TimerMachine;
49
+ use upsert_search_attributes_state_machine::UpsertSearchAttributesMachine;
50
+ use workflow_machines::MachineResponse;
51
+ use workflow_task_state_machine::WorkflowTaskMachine;
52
+
53
+ #[cfg(test)]
54
+ use transition_coverage::add_coverage;
55
+
56
+ #[derive(Copy, Clone, Debug, derive_more::Display, Eq, PartialEq)]
57
+ enum MachineKind {
58
+ Activity,
59
+ CancelWorkflow,
60
+ ChildWorkflow,
61
+ CompleteWorkflow,
62
+ ContinueAsNewWorkflow,
63
+ FailWorkflow,
64
+ Timer,
65
+ Patch,
66
+ WorkflowTask,
67
+ SignalExternalWorkflow,
68
+ CancelExternalWorkflow,
69
+ LocalActivity,
70
+ UpsertSearchAttributes,
71
+ }
72
+
73
+ #[enum_dispatch::enum_dispatch]
74
+ #[allow(clippy::enum_variant_names, clippy::large_enum_variant)]
75
+ enum Machines {
76
+ ActivityMachine,
77
+ CancelExternalMachine,
78
+ CancelWorkflowMachine,
79
+ ChildWorkflowMachine,
80
+ CompleteWorkflowMachine,
81
+ ContinueAsNewWorkflowMachine,
82
+ FailWorkflowMachine,
83
+ LocalActivityMachine,
84
+ PatchMachine,
85
+ SignalExternalMachine,
86
+ TimerMachine,
87
+ WorkflowTaskMachine,
88
+ UpsertSearchAttributesMachine,
89
+ }
90
+
91
+ /// Extends [rustfsm::StateMachine] with some functionality specific to the temporal SDK.
92
+ ///
93
+ /// Formerly known as `EntityStateMachine` in Java.
94
+ #[enum_dispatch::enum_dispatch(Machines)]
95
+ trait TemporalStateMachine: Send {
96
+ fn kind(&self) -> MachineKind;
97
+ fn handle_command(
98
+ &mut self,
99
+ command_type: CommandType,
100
+ ) -> Result<Vec<MachineResponse>, WFMachinesError>;
101
+
102
+ /// Returns true if this machine is compatible with the provided event. Provides a way to know
103
+ /// ahead of time if it's worth trying to call [TemporalStateMachine::handle_event] without
104
+ /// requiring mutable access.
105
+ fn matches_event(&self, event: &HistoryEvent) -> bool;
106
+
107
+ /// Tell the state machine to handle some event. Returns a list of responses that can be used
108
+ /// to update the overall state of the workflow. EX: To issue outgoing WF activations.
109
+ fn handle_event(
110
+ &mut self,
111
+ event: HistoryEvent,
112
+ has_next_event: bool,
113
+ ) -> Result<Vec<MachineResponse>, WFMachinesError>;
114
+
115
+ /// Attempt to cancel the command associated with this state machine, if it is cancellable
116
+ fn cancel(&mut self) -> Result<Vec<MachineResponse>, WFMachinesError>;
117
+
118
+ /// Should return true if the command was cancelled before we sent it to the server. Always
119
+ /// returns false for non-cancellable machines
120
+ fn was_cancelled_before_sent_to_server(&self) -> bool;
121
+
122
+ /// Returns true if the state machine is in a final state
123
+ fn is_final_state(&self) -> bool;
124
+ }
125
+
126
+ impl<SM> TemporalStateMachine for SM
127
+ where
128
+ SM: StateMachine + WFMachinesAdapter + Cancellable + OnEventWrapper + Clone + Send + 'static,
129
+ <SM as StateMachine>::Event: TryFrom<HistoryEvent> + TryFrom<CommandType> + Display,
130
+ WFMachinesError: From<<<SM as StateMachine>::Event as TryFrom<HistoryEvent>>::Error>,
131
+ <SM as StateMachine>::Command: Debug + Display,
132
+ <SM as StateMachine>::State: Display,
133
+ <SM as StateMachine>::Error: Into<WFMachinesError> + 'static + Send + Sync,
134
+ {
135
+ fn kind(&self) -> MachineKind {
136
+ self.kind()
137
+ }
138
+
139
+ fn handle_command(
140
+ &mut self,
141
+ command_type: CommandType,
142
+ ) -> Result<Vec<MachineResponse>, WFMachinesError> {
143
+ debug!(
144
+ command_type = ?command_type,
145
+ machine_name = %self.name(),
146
+ state = %self.state(),
147
+ "handling command"
148
+ );
149
+ if let Ok(converted_command) = command_type.try_into() {
150
+ match OnEventWrapper::on_event_mut(self, converted_command) {
151
+ Ok(c) => process_machine_commands(self, c, None),
152
+ Err(MachineError::InvalidTransition) => {
153
+ Err(WFMachinesError::Nondeterminism(format!(
154
+ "Unexpected command producing an invalid transition {:?} in state {}",
155
+ command_type,
156
+ self.state()
157
+ )))
158
+ }
159
+ Err(MachineError::Underlying(e)) => Err(e.into()),
160
+ }
161
+ } else {
162
+ Err(WFMachinesError::Nondeterminism(format!(
163
+ "Unexpected command {:?} generated by a {:?} machine",
164
+ command_type,
165
+ self.kind()
166
+ )))
167
+ }
168
+ }
169
+
170
+ fn matches_event(&self, event: &HistoryEvent) -> bool {
171
+ self.matches_event(event)
172
+ }
173
+
174
+ fn handle_event(
175
+ &mut self,
176
+ event: HistoryEvent,
177
+ has_next_event: bool,
178
+ ) -> Result<Vec<MachineResponse>, WFMachinesError> {
179
+ trace!(
180
+ event = %event,
181
+ machine_name = %self.name(),
182
+ state = %self.state(),
183
+ "handling event"
184
+ );
185
+ let event_info = EventInfo {
186
+ event_id: event.event_id,
187
+ event_type: event.event_type(),
188
+ has_next_event,
189
+ };
190
+ let converted_event: <Self as StateMachine>::Event = event.try_into()?;
191
+
192
+ match OnEventWrapper::on_event_mut(self, converted_event) {
193
+ Ok(c) => process_machine_commands(self, c, Some(event_info)),
194
+ Err(MachineError::InvalidTransition) => Err(WFMachinesError::Fatal(format!(
195
+ "{} in state {} says the transition is invalid during event {:?}",
196
+ self.name(),
197
+ self.state(),
198
+ event_info
199
+ ))),
200
+ Err(MachineError::Underlying(e)) => Err(e.into()),
201
+ }
202
+ }
203
+
204
+ fn cancel(&mut self) -> Result<Vec<MachineResponse>, WFMachinesError> {
205
+ let res = self.cancel();
206
+ res.map_err(|e| match e {
207
+ MachineError::InvalidTransition => WFMachinesError::Fatal(format!(
208
+ "Invalid transition while attempting to cancel {} in {}",
209
+ self.name(),
210
+ self.state(),
211
+ )),
212
+ MachineError::Underlying(e) => e.into(),
213
+ })
214
+ }
215
+
216
+ fn was_cancelled_before_sent_to_server(&self) -> bool {
217
+ self.was_cancelled_before_sent_to_server()
218
+ }
219
+
220
+ fn is_final_state(&self) -> bool {
221
+ self.has_reached_final_state()
222
+ }
223
+ }
224
+
225
+ fn process_machine_commands<SM>(
226
+ machine: &mut SM,
227
+ commands: Vec<SM::Command>,
228
+ event_info: Option<EventInfo>,
229
+ ) -> Result<Vec<MachineResponse>, WFMachinesError>
230
+ where
231
+ SM: TemporalStateMachine + StateMachine + WFMachinesAdapter,
232
+ <SM as StateMachine>::Event: Display,
233
+ <SM as StateMachine>::Command: Debug + Display,
234
+ <SM as StateMachine>::State: Display,
235
+ {
236
+ if !commands.is_empty() {
237
+ debug!(commands=%commands.display(), state=%machine.state(),
238
+ machine_name=%TemporalStateMachine::kind(machine), "Machine produced commands");
239
+ }
240
+ let mut machine_responses = vec![];
241
+ for cmd in commands {
242
+ machine_responses.extend(machine.adapt_response(cmd, event_info)?);
243
+ }
244
+ Ok(machine_responses)
245
+ }
246
+
247
+ /// This trait exists to bridge [StateMachine]s and the [WorkflowMachines] instance. It has access
248
+ /// to the machine's concrete types while hiding those details from [WorkflowMachines]
249
+ trait WFMachinesAdapter: StateMachine {
250
+ /// A command that this [StateMachine] instance just produced, and maybe the event being
251
+ /// processed, perform any handling that needs inform the [WorkflowMachines] instance of some
252
+ /// action to be taken in response to that command.
253
+ fn adapt_response(
254
+ &self,
255
+ my_command: Self::Command,
256
+ event_info: Option<EventInfo>,
257
+ ) -> Result<Vec<MachineResponse>, WFMachinesError>;
258
+
259
+ /// Returns true if this machine is compatible with the provided event. Provides a way to know
260
+ /// ahead of time if it's worth trying to call [TemporalStateMachine::handle_event] without
261
+ /// requiring mutable access.
262
+ fn matches_event(&self, event: &HistoryEvent) -> bool;
263
+
264
+ /// Allows robust identification of the type of machine
265
+ fn kind(&self) -> MachineKind;
266
+ }
267
+
268
+ #[derive(Debug, Copy, Clone)]
269
+ struct EventInfo {
270
+ event_id: i64,
271
+ event_type: EventType,
272
+ has_next_event: bool,
273
+ }
274
+
275
+ trait Cancellable: StateMachine {
276
+ /// Cancel the machine / the command represented by the machine.
277
+ ///
278
+ /// # Panics
279
+ /// * If the machine is not cancellable. It's a logic error on our part to call it on such
280
+ /// machines.
281
+ fn cancel(&mut self) -> Result<Vec<MachineResponse>, MachineError<Self::Error>> {
282
+ // It's a logic error on our part if this is ever called on a machine that can't actually
283
+ // be cancelled
284
+ panic!("Machine {} cannot be cancelled", self.name())
285
+ }
286
+
287
+ /// Should return true if the command was cancelled before we sent it to the server
288
+ fn was_cancelled_before_sent_to_server(&self) -> bool {
289
+ false
290
+ }
291
+ }
292
+
293
+ /// We need to wrap calls to [StateMachine::on_event_mut] to track coverage, or anything else
294
+ /// we'd like to do on every call.
295
+ pub(crate) trait OnEventWrapper: StateMachine
296
+ where
297
+ <Self as StateMachine>::State: Display,
298
+ <Self as StateMachine>::Event: Display,
299
+ Self: Clone,
300
+ {
301
+ fn on_event_mut(
302
+ &mut self,
303
+ event: Self::Event,
304
+ ) -> Result<Vec<Self::Command>, MachineError<Self::Error>> {
305
+ #[cfg(test)]
306
+ let from_state = self.state().to_string();
307
+ #[cfg(test)]
308
+ let converted_event_str = event.to_string();
309
+
310
+ let res = StateMachine::on_event_mut(self, event);
311
+ if res.is_ok() {
312
+ #[cfg(test)]
313
+ add_coverage(
314
+ self.name().to_owned(),
315
+ from_state,
316
+ self.state().to_string(),
317
+ converted_event_str,
318
+ );
319
+ }
320
+ res
321
+ }
322
+ }
323
+
324
+ impl<SM> OnEventWrapper for SM
325
+ where
326
+ SM: StateMachine,
327
+ <Self as StateMachine>::State: Display,
328
+ <Self as StateMachine>::Event: Display,
329
+ Self: Clone,
330
+ {
331
+ }
332
+
333
+ struct NewMachineWithCommand {
334
+ command: ProtoCommand,
335
+ machine: Machines,
336
+ }
337
+
338
+ impl Debug for dyn TemporalStateMachine {
339
+ fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
340
+ std::fmt::Display::fmt(&self.kind(), f)
341
+ }
342
+ }
@@ -0,0 +1,127 @@
1
+ use rustfsm::{fsm, TransitionResult};
2
+
3
+ fsm! {
4
+ pub(super) name MutableSideEffectMachine; command MutableSideEffectCommand; error MutableSideEffectMachineError;
5
+
6
+ Created --(CheckExecutionState, on_check_execution_state) --> Replaying;
7
+ Created --(CheckExecutionState, on_check_execution_state) --> Executing;
8
+
9
+ Executing --(Schedule, on_schedule) --> MarkerCommandCreated;
10
+ Executing --(Schedule, on_schedule) --> Skipped;
11
+
12
+ MarkerCommandCreated --(CommandRecordMarker, on_command_record_marker) --> ResultNotified;
13
+
14
+ MarkerCommandCreatedReplaying --(CommandRecordMarker) --> ResultNotifiedReplaying;
15
+
16
+ Replaying --(Schedule, on_schedule) --> MarkerCommandCreatedReplaying;
17
+
18
+ ResultNotified --(MarkerRecorded, on_marker_recorded) --> MarkerCommandRecorded;
19
+
20
+ ResultNotifiedReplaying --(NonMatchingEvent, on_non_matching_event) --> SkippedNotified;
21
+ ResultNotifiedReplaying --(MarkerRecorded, on_marker_recorded) --> MarkerCommandRecorded;
22
+ ResultNotifiedReplaying --(MarkerRecorded, on_marker_recorded) --> SkippedNotified;
23
+
24
+ Skipped --(CommandRecordMarker, on_command_record_marker) --> SkippedNotified;
25
+ }
26
+
27
+ #[derive(thiserror::Error, Debug)]
28
+ pub(super) enum MutableSideEffectMachineError {}
29
+
30
+ pub(super) enum MutableSideEffectCommand {}
31
+
32
+ #[derive(Default, Clone)]
33
+ pub(super) struct Created {}
34
+
35
+ impl Created {
36
+ pub(super) fn on_check_execution_state(
37
+ self,
38
+ ) -> MutableSideEffectMachineTransition<ReplayingOrExecuting> {
39
+ unimplemented!()
40
+ }
41
+ }
42
+
43
+ #[derive(Default, Clone)]
44
+ pub(super) struct Executing {}
45
+
46
+ impl Executing {
47
+ pub(super) fn on_schedule(
48
+ self,
49
+ ) -> MutableSideEffectMachineTransition<MarkerCommandCreatedOrSkipped> {
50
+ unimplemented!()
51
+ }
52
+ }
53
+
54
+ #[derive(Default, Clone)]
55
+ pub(super) struct MarkerCommandCreated {}
56
+
57
+ impl MarkerCommandCreated {
58
+ pub(super) fn on_command_record_marker(
59
+ self,
60
+ ) -> MutableSideEffectMachineTransition<ResultNotified> {
61
+ unimplemented!()
62
+ }
63
+ }
64
+
65
+ #[derive(Default, Clone)]
66
+ pub(super) struct MarkerCommandCreatedReplaying {}
67
+
68
+ #[derive(Default, Clone)]
69
+ pub(super) struct MarkerCommandRecorded {}
70
+
71
+ #[derive(Default, Clone)]
72
+ pub(super) struct Replaying {}
73
+
74
+ impl Replaying {
75
+ pub(super) fn on_schedule(
76
+ self,
77
+ ) -> MutableSideEffectMachineTransition<MarkerCommandCreatedReplaying> {
78
+ unimplemented!()
79
+ }
80
+ }
81
+
82
+ #[derive(Default, Clone)]
83
+ pub(super) struct ResultNotified {}
84
+
85
+ impl ResultNotified {
86
+ pub(super) fn on_marker_recorded(
87
+ self,
88
+ ) -> MutableSideEffectMachineTransition<MarkerCommandRecorded> {
89
+ unimplemented!()
90
+ }
91
+ }
92
+
93
+ #[derive(Default, Clone)]
94
+ pub(super) struct ResultNotifiedReplaying {}
95
+
96
+ impl ResultNotifiedReplaying {
97
+ pub(super) fn on_non_matching_event(
98
+ self,
99
+ ) -> MutableSideEffectMachineTransition<SkippedNotified> {
100
+ unimplemented!()
101
+ }
102
+ pub(super) fn on_marker_recorded(
103
+ self,
104
+ ) -> MutableSideEffectMachineTransition<MarkerCommandRecordedOrSkippedNotified> {
105
+ unimplemented!()
106
+ }
107
+ }
108
+
109
+ impl From<MarkerCommandCreatedReplaying> for ResultNotifiedReplaying {
110
+ fn from(_: MarkerCommandCreatedReplaying) -> Self {
111
+ Self::default()
112
+ }
113
+ }
114
+
115
+ #[derive(Default, Clone)]
116
+ pub(super) struct Skipped {}
117
+
118
+ impl Skipped {
119
+ pub(super) fn on_command_record_marker(
120
+ self,
121
+ ) -> MutableSideEffectMachineTransition<SkippedNotified> {
122
+ unimplemented!()
123
+ }
124
+ }
125
+
126
+ #[derive(Default, Clone)]
127
+ pub(super) struct SkippedNotified {}