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,246 @@
1
+ use super::{
2
+ workflow_machines::{MachineResponse, WFMachinesError},
3
+ NewMachineWithCommand,
4
+ };
5
+ use crate::worker::workflow::machines::{Cancellable, EventInfo, MachineKind, WFMachinesAdapter};
6
+ use rustfsm::{fsm, TransitionResult};
7
+ use temporal_sdk_core_protos::{
8
+ coresdk::workflow_commands::UpsertWorkflowSearchAttributes,
9
+ temporal::api::{
10
+ command::v1::Command,
11
+ enums::v1::{CommandType, EventType},
12
+ history::v1::HistoryEvent,
13
+ },
14
+ };
15
+
16
+ fsm! {
17
+ pub(super) name UpsertSearchAttributesMachine;
18
+ command UpsertSearchAttributesMachineCommand;
19
+ error WFMachinesError;
20
+ shared_state SharedState;
21
+
22
+ // Machine is instantiated into the Created state and then transitions into the CommandIssued
23
+ // state when it receives the CommandScheduled event that is a result of looping back the
24
+ // Command initially packaged with NewMachineWithCommand (see upsert_search_attrs)
25
+ Created --(CommandScheduled) --> CommandIssued;
26
+
27
+ // Having sent the command to the server, the machine transitions into a terminal state (Done)
28
+ // upon observing a history event indicating that the command has been recorded. Note that this
29
+ // does not imply that the command has been _executed_, only that it _will be_ executed at some
30
+ // point in the future.
31
+ CommandIssued --(CommandRecorded) --> Done;
32
+ }
33
+
34
+ /// Instantiates an UpsertSearchAttributesMachine and packs it together with an initial command
35
+ /// to apply the provided search attribute update.
36
+ pub(super) fn upsert_search_attrs(
37
+ attribs: UpsertWorkflowSearchAttributes,
38
+ ) -> NewMachineWithCommand {
39
+ let sm = UpsertSearchAttributesMachine::new();
40
+ let cmd = Command {
41
+ command_type: CommandType::UpsertWorkflowSearchAttributes as i32,
42
+ attributes: Some(attribs.into()),
43
+ };
44
+ NewMachineWithCommand {
45
+ command: cmd,
46
+ machine: sm.into(),
47
+ }
48
+ }
49
+
50
+ /// Unused but must exist
51
+ type SharedState = ();
52
+
53
+ /// The state-machine-specific set of commands that are the results of state transition in the
54
+ /// UpsertSearchAttributesMachine. There are none of these because this state machine emits the
55
+ /// UpsertSearchAttributes API command during construction and then does not emit any subsequent
56
+ /// state-machine specific commands.
57
+ #[derive(Debug, derive_more::Display)]
58
+ pub(super) enum UpsertSearchAttributesMachineCommand {}
59
+
60
+ /// The state of the UpsertSearchAttributesMachine at time zero (i.e. at instantiation)
61
+ #[derive(Debug, Default, Clone, derive_more::Display)]
62
+ pub(super) struct Created {}
63
+
64
+ /// Once the UpsertSearchAttributesMachine has been known to have issued the upsert command to
65
+ /// higher-level machinery, it transitions into this state.
66
+ #[derive(Debug, Default, Clone, derive_more::Display)]
67
+ pub(super) struct CommandIssued {}
68
+
69
+ /// Once the server has recorded its receipt of the search attribute update, the
70
+ /// UpsertSearchAttributesMachine transitions into this terminal state.
71
+ #[derive(Debug, Default, Clone, derive_more::Display)]
72
+ pub(super) struct Done {}
73
+
74
+ impl UpsertSearchAttributesMachine {
75
+ fn new() -> Self {
76
+ Self {
77
+ state: Created {}.into(),
78
+ shared_state: (),
79
+ }
80
+ }
81
+ }
82
+
83
+ impl WFMachinesAdapter for UpsertSearchAttributesMachine {
84
+ /// Transforms an UpsertSearchAttributesMachine-specific command (i.e. an instance of the type
85
+ /// UpsertSearchAttributesMachineCommand) to a more generic form supported by the abstract
86
+ /// StateMachine type.
87
+ fn adapt_response(
88
+ &self,
89
+ _my_command: Self::Command,
90
+ _event_info: Option<EventInfo>,
91
+ ) -> Result<Vec<MachineResponse>, Self::Error> {
92
+ // No implementation needed until this state machine emits state machine commands
93
+ Err(Self::Error::Nondeterminism(
94
+ "UpsertWorkflowSearchAttributesMachine does not use commands".to_string(),
95
+ ))
96
+ }
97
+
98
+ /// Filters for EventType::UpsertWorkflowSearchAttributes
99
+ fn matches_event(&self, event: &HistoryEvent) -> bool {
100
+ matches!(
101
+ event.event_type(),
102
+ EventType::UpsertWorkflowSearchAttributes
103
+ )
104
+ }
105
+
106
+ fn kind(&self) -> MachineKind {
107
+ MachineKind::UpsertSearchAttributes
108
+ }
109
+ }
110
+
111
+ impl Cancellable for UpsertSearchAttributesMachine {}
112
+
113
+ // Converts the generic history event with type EventType::UpsertWorkflowSearchAttributes into the
114
+ // UpsertSearchAttributesMachine-specific event type
115
+ // UpsertSearchAttributesMachineEvents::CommandRecorded.
116
+ impl TryFrom<HistoryEvent> for UpsertSearchAttributesMachineEvents {
117
+ type Error = WFMachinesError;
118
+
119
+ fn try_from(e: HistoryEvent) -> Result<Self, Self::Error> {
120
+ match e.event_type() {
121
+ EventType::UpsertWorkflowSearchAttributes => {
122
+ Ok(UpsertSearchAttributesMachineEvents::CommandRecorded)
123
+ }
124
+ _ => Err(Self::Error::Nondeterminism(format!(
125
+ "UpsertWorkflowSearchAttributesMachine does not handle {e}"
126
+ ))),
127
+ }
128
+ }
129
+ }
130
+
131
+ // Converts generic state machine command type CommandType::UpsertWorkflowSearchAttributes into
132
+ // the UpsertSearchAttributesMachine-specific event
133
+ impl TryFrom<CommandType> for UpsertSearchAttributesMachineEvents {
134
+ type Error = WFMachinesError;
135
+
136
+ fn try_from(c: CommandType) -> Result<Self, Self::Error> {
137
+ match c {
138
+ CommandType::UpsertWorkflowSearchAttributes => {
139
+ Ok(UpsertSearchAttributesMachineEvents::CommandScheduled)
140
+ }
141
+ _ => Err(Self::Error::Nondeterminism(format!(
142
+ "UpsertWorkflowSearchAttributesMachine does not handle command type {c:?}"
143
+ ))),
144
+ }
145
+ }
146
+ }
147
+
148
+ // There is no Command/Response associated with this transition
149
+ impl From<CommandIssued> for Done {
150
+ fn from(_: CommandIssued) -> Self {
151
+ Self {}
152
+ }
153
+ }
154
+
155
+ // There is no Command/Response associated with this transition
156
+ impl From<Created> for CommandIssued {
157
+ fn from(_: Created) -> Self {
158
+ Self {}
159
+ }
160
+ }
161
+
162
+ #[cfg(test)]
163
+ mod tests {
164
+ use super::{super::OnEventWrapper, *};
165
+ use crate::{replay::TestHistoryBuilder, worker::workflow::ManagedWFFunc};
166
+ use rustfsm::StateMachine;
167
+ use temporal_sdk::{WfContext, WorkflowFunction};
168
+ use temporal_sdk_core_protos::temporal::api::{
169
+ command::v1::command::Attributes, common::v1::Payload,
170
+ };
171
+
172
+ #[tokio::test]
173
+ async fn upsert_search_attrs_from_workflow() {
174
+ let mut t = TestHistoryBuilder::default();
175
+ t.add_by_type(EventType::WorkflowExecutionStarted);
176
+ t.add_full_wf_task();
177
+ t.add_workflow_execution_completed();
178
+
179
+ let (k1, k2) = ("foo", "bar");
180
+
181
+ let wff = WorkflowFunction::new(move |ctx: WfContext| async move {
182
+ ctx.upsert_search_attributes([
183
+ (
184
+ String::from(k1),
185
+ Payload {
186
+ data: vec![0x01],
187
+ ..Default::default()
188
+ },
189
+ ),
190
+ (
191
+ String::from(k2),
192
+ Payload {
193
+ data: vec![0x02],
194
+ ..Default::default()
195
+ },
196
+ ),
197
+ ]);
198
+ Ok(().into())
199
+ });
200
+ let mut wfm = ManagedWFFunc::new(t, wff, vec![]);
201
+
202
+ wfm.get_next_activation().await.unwrap();
203
+ let commands = wfm.get_server_commands().commands;
204
+ assert!(!commands.is_empty());
205
+ let cmd = commands[0].clone();
206
+ assert_eq!(
207
+ cmd.command_type,
208
+ CommandType::UpsertWorkflowSearchAttributes as i32
209
+ );
210
+ assert_matches!(
211
+ cmd.attributes.unwrap(),
212
+ Attributes::UpsertWorkflowSearchAttributesCommandAttributes(msg) => {
213
+ let fields = &msg.search_attributes.unwrap().indexed_fields;
214
+ let payload1 = fields.get(k1).unwrap();
215
+ let payload2 = fields.get(k2).unwrap();
216
+ assert_eq!(payload1.data[0], 0x01);
217
+ assert_eq!(payload2.data[0], 0x02);
218
+ assert_eq!(fields.len(), 2);
219
+ });
220
+ wfm.shutdown().await.unwrap();
221
+ }
222
+
223
+ #[tokio::test]
224
+ async fn upsert_search_attrs_sm() {
225
+ let mut sm = UpsertSearchAttributesMachine::new();
226
+ assert_eq!(Created {}.to_string(), sm.state().to_string());
227
+
228
+ let cmd_scheduled_sm_event = CommandType::UpsertWorkflowSearchAttributes
229
+ .try_into()
230
+ .unwrap();
231
+ let recorded_history_event = HistoryEvent {
232
+ event_type: EventType::UpsertWorkflowSearchAttributes as i32,
233
+ ..Default::default()
234
+ };
235
+ assert!(sm.matches_event(&recorded_history_event));
236
+ let cmd_recorded_sm_event = recorded_history_event.try_into().unwrap();
237
+
238
+ OnEventWrapper::on_event_mut(&mut sm, cmd_scheduled_sm_event)
239
+ .expect("CommandScheduled should transition Created -> CommandIssued");
240
+ assert_eq!(CommandIssued {}.to_string(), sm.state().to_string());
241
+
242
+ OnEventWrapper::on_event_mut(&mut sm, cmd_recorded_sm_event)
243
+ .expect("CommandRecorded should transition CommandIssued -> Done");
244
+ assert_eq!(Done {}.to_string(), sm.state().to_string());
245
+ }
246
+ }
@@ -0,0 +1,96 @@
1
+ use super::super::{local_activity_state_machine::ResolveDat, WFMachinesError};
2
+ use crate::{
3
+ protosext::{HistoryEventExt, ValidScheduleLA},
4
+ worker::{ExecutingLAId, LocalActRequest, NewLocalAct},
5
+ };
6
+ use std::{
7
+ collections::{HashMap, HashSet},
8
+ time::SystemTime,
9
+ };
10
+ use temporal_sdk_core_protos::temporal::api::{
11
+ common::v1::WorkflowExecution, history::v1::HistoryEvent,
12
+ };
13
+
14
+ #[derive(Default)]
15
+ pub(super) struct LocalActivityData {
16
+ /// Queued local activity requests which need to be executed
17
+ new_requests: Vec<ValidScheduleLA>,
18
+ /// Queued cancels that need to be dispatched
19
+ cancel_requests: Vec<ExecutingLAId>,
20
+ /// Seq #s of local activities which we have sent to be executed but have not yet resolved
21
+ executing: HashSet<u32>,
22
+ /// Maps local activity sequence numbers to their resolutions as found when looking ahead at
23
+ /// next WFT
24
+ preresolutions: HashMap<u32, ResolveDat>,
25
+ }
26
+
27
+ impl LocalActivityData {
28
+ pub(super) fn enqueue(&mut self, act: ValidScheduleLA) {
29
+ self.new_requests.push(act);
30
+ }
31
+
32
+ pub(super) fn enqueue_cancel(&mut self, cancel: ExecutingLAId) {
33
+ self.cancel_requests.push(cancel);
34
+ }
35
+
36
+ pub(super) fn done_executing(&mut self, seq: u32) {
37
+ // This seems nonsense, but can happen during abandonment
38
+ self.new_requests.retain(|req| req.seq != seq);
39
+ self.executing.remove(&seq);
40
+ }
41
+
42
+ /// Drain all requests to execute or cancel LAs. Additional info is passed in to be able to
43
+ /// augment the data this struct has to form complete request data.
44
+ pub(super) fn take_all_reqs(
45
+ &mut self,
46
+ wf_type: &str,
47
+ wf_id: &str,
48
+ run_id: &str,
49
+ ) -> Vec<LocalActRequest> {
50
+ self.cancel_requests
51
+ .drain(..)
52
+ .map(LocalActRequest::Cancel)
53
+ .chain(self.new_requests.drain(..).map(|sa| {
54
+ self.executing.insert(sa.seq);
55
+ LocalActRequest::New(NewLocalAct {
56
+ schedule_time: sa.original_schedule_time.unwrap_or_else(SystemTime::now),
57
+ schedule_cmd: sa,
58
+ workflow_type: wf_type.to_string(),
59
+ workflow_exec_info: WorkflowExecution {
60
+ workflow_id: wf_id.to_string(),
61
+ run_id: run_id.to_string(),
62
+ },
63
+ })
64
+ }))
65
+ .collect()
66
+ }
67
+
68
+ /// Returns all outstanding local activities, whether executing or requested and in the queue
69
+ pub(super) fn outstanding_la_count(&self) -> usize {
70
+ self.executing.len() + self.new_requests.len()
71
+ }
72
+
73
+ pub(super) fn process_peekahead_marker(&mut self, e: &HistoryEvent) -> super::Result<()> {
74
+ if let Some(la_dat) = e.clone().into_local_activity_marker_details() {
75
+ self.preresolutions
76
+ .insert(la_dat.marker_dat.seq, la_dat.into());
77
+ } else {
78
+ return Err(WFMachinesError::Fatal(format!(
79
+ "Local activity marker was unparsable: {:?}",
80
+ e
81
+ )));
82
+ }
83
+ Ok(())
84
+ }
85
+
86
+ pub(super) fn take_preresolution(&mut self, seq: u32) -> Option<ResolveDat> {
87
+ self.preresolutions.remove(&seq)
88
+ }
89
+
90
+ pub(super) fn remove_from_queue(&mut self, seq: u32) -> Option<ValidScheduleLA> {
91
+ self.new_requests
92
+ .iter()
93
+ .position(|req| req.seq == seq)
94
+ .map(|i| self.new_requests.remove(i))
95
+ }
96
+ }