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
@@ -18,10 +18,10 @@
18
18
  //! | replaying, no marker | deprecate_patch | Call allowed |
19
19
 
20
20
  use super::{
21
- workflow_machines::MachineResponse, Cancellable, EventInfo, MachineKind, NewMachineWithCommand,
21
+ workflow_machines::MachineResponse, Cancellable, EventInfo, NewMachineWithCommand,
22
22
  OnEventWrapper, WFMachinesAdapter, WFMachinesError,
23
23
  };
24
- use crate::protosext::HistoryEventExt;
24
+ use crate::{protosext::HistoryEventExt, worker::workflow::machines::HistEventData};
25
25
  use rustfsm::{fsm, TransitionResult};
26
26
  use std::convert::TryFrom;
27
27
  use temporal_sdk_core_protos::{
@@ -186,10 +186,6 @@ impl WFMachinesAdapter for PatchMachine {
186
186
  fn matches_event(&self, event: &HistoryEvent) -> bool {
187
187
  event.get_patch_marker_details().is_some()
188
188
  }
189
-
190
- fn kind(&self) -> MachineKind {
191
- MachineKind::Patch
192
- }
193
189
  }
194
190
 
195
191
  impl Cancellable for PatchMachine {}
@@ -205,15 +201,15 @@ impl TryFrom<CommandType> for PatchMachineEvents {
205
201
  }
206
202
  }
207
203
 
208
- impl TryFrom<HistoryEvent> for PatchMachineEvents {
204
+ impl TryFrom<HistEventData> for PatchMachineEvents {
209
205
  type Error = WFMachinesError;
210
206
 
211
- fn try_from(e: HistoryEvent) -> Result<Self, Self::Error> {
207
+ fn try_from(e: HistEventData) -> Result<Self, Self::Error> {
208
+ let e = e.event;
212
209
  match e.get_patch_marker_details() {
213
210
  Some((id, _)) => Ok(Self::MarkerRecorded(id)),
214
211
  _ => Err(WFMachinesError::Nondeterminism(format!(
215
- "Change machine cannot handle this event: {}",
216
- e
212
+ "Change machine cannot handle this event: {e}"
217
213
  ))),
218
214
  }
219
215
  }
@@ -242,15 +238,14 @@ mod tests {
242
238
  common::v1::ActivityType,
243
239
  enums::v1::{CommandType, EventType},
244
240
  history::v1::{
245
- history_event, ActivityTaskCompletedEventAttributes,
246
- ActivityTaskScheduledEventAttributes, ActivityTaskStartedEventAttributes,
247
- TimerFiredEventAttributes,
241
+ ActivityTaskCompletedEventAttributes, ActivityTaskScheduledEventAttributes,
242
+ ActivityTaskStartedEventAttributes, TimerFiredEventAttributes,
248
243
  },
249
244
  },
250
245
  };
251
246
 
252
247
  const MY_PATCH_ID: &str = "test_patch_id";
253
- #[derive(Eq, PartialEq, Copy, Clone)]
248
+ #[derive(Eq, PartialEq, Copy, Clone, Debug)]
254
249
  enum MarkerType {
255
250
  Deprecated,
256
251
  NotDeprecated,
@@ -271,7 +266,11 @@ mod tests {
271
266
  /// EVENT_TYPE_WORKFLOW_TASK_STARTED
272
267
  /// EVENT_TYPE_WORKFLOW_TASK_COMPLETED
273
268
  /// EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED
274
- fn patch_marker_single_activity(marker_type: MarkerType) -> TestHistoryBuilder {
269
+ fn patch_marker_single_activity(
270
+ marker_type: MarkerType,
271
+ version: usize,
272
+ replay: bool,
273
+ ) -> TestHistoryBuilder {
275
274
  let mut t = TestHistoryBuilder::default();
276
275
  t.add_by_type(EventType::WorkflowExecutionStarted);
277
276
  t.add_full_wf_task();
@@ -281,41 +280,41 @@ mod tests {
281
280
  MarkerType::NoMarker => {}
282
281
  };
283
282
 
284
- let scheduled_event_id = t.add_get_event_id(
285
- EventType::ActivityTaskScheduled,
286
- Some(
287
- history_event::Attributes::ActivityTaskScheduledEventAttributes(
288
- ActivityTaskScheduledEventAttributes {
289
- activity_id: "0".to_string(),
290
- activity_type: Some(ActivityType {
291
- name: "".to_string(),
292
- }),
293
- ..Default::default()
294
- },
295
- ),
296
- ),
297
- );
298
- let started_event_id = t.add_get_event_id(
299
- EventType::ActivityTaskStarted,
300
- Some(
301
- history_event::Attributes::ActivityTaskStartedEventAttributes(
302
- ActivityTaskStartedEventAttributes {
303
- scheduled_event_id,
304
- ..Default::default()
305
- },
306
- ),
307
- ),
308
- );
309
- t.add(
310
- EventType::ActivityTaskCompleted,
311
- history_event::Attributes::ActivityTaskCompletedEventAttributes(
312
- ActivityTaskCompletedEventAttributes {
313
- scheduled_event_id,
314
- started_event_id,
315
- ..Default::default()
316
- },
317
- ),
318
- );
283
+ let activity_id = if replay {
284
+ match (marker_type, version) {
285
+ (_, 1) => "no_change",
286
+ (MarkerType::NotDeprecated, 2) => "had_change",
287
+ (MarkerType::Deprecated, 2) => "had_change",
288
+ (MarkerType::NoMarker, 2) => "no_change",
289
+ (_, 3) => "had_change",
290
+ (_, 4) => "had_change",
291
+ v => panic!("Nonsense marker / version combo {v:?}"),
292
+ }
293
+ } else {
294
+ // If the workflow isn't replaying (we're creating history here for a workflow which
295
+ // wasn't replaying at the time of scheduling the activity, and has done that, and now
296
+ // we're feeding back the history it would have produced) then it always has the change,
297
+ // except in v1.
298
+ if version > 1 {
299
+ "had_change"
300
+ } else {
301
+ "no_change"
302
+ }
303
+ };
304
+
305
+ let scheduled_event_id = t.add(ActivityTaskScheduledEventAttributes {
306
+ activity_id: activity_id.to_string(),
307
+ ..Default::default()
308
+ });
309
+ let started_event_id = t.add(ActivityTaskStartedEventAttributes {
310
+ scheduled_event_id,
311
+ ..Default::default()
312
+ });
313
+ t.add(ActivityTaskCompletedEventAttributes {
314
+ scheduled_event_id,
315
+ started_event_id,
316
+ ..Default::default()
317
+ });
319
318
  t.add_full_wf_task();
320
319
  t.add_workflow_execution_completed();
321
320
  t
@@ -388,7 +387,7 @@ mod tests {
388
387
  Ok(().into())
389
388
  });
390
389
 
391
- let t = patch_marker_single_activity(marker_type);
390
+ let t = patch_marker_single_activity(marker_type, workflow_version, replaying);
392
391
  let histinfo = if replaying {
393
392
  t.get_full_history_info()
394
393
  } else {
@@ -426,7 +425,7 @@ mod tests {
426
425
  } else {
427
426
  // Feed more history
428
427
  wfm.new_history(
429
- patch_marker_single_activity(marker_type)
428
+ patch_marker_single_activity(marker_type, wf_version, replaying)
430
429
  .get_full_history_info()
431
430
  .unwrap()
432
431
  .into(),
@@ -520,7 +519,7 @@ mod tests {
520
519
  // and the history should have the has-change timer. v3 of course always has the change
521
520
  // regardless.
522
521
  wfm.new_history(
523
- patch_marker_single_activity(marker_type)
522
+ patch_marker_single_activity(marker_type, wf_version, replaying)
524
523
  .get_full_history_info()
525
524
  .unwrap()
526
525
  .into(),
@@ -569,118 +568,66 @@ mod tests {
569
568
  t.add_full_wf_task();
570
569
  if have_marker_in_hist {
571
570
  t.add_has_change_marker(MY_PATCH_ID, false);
572
- let scheduled_event_id = t.add_get_event_id(
573
- EventType::ActivityTaskScheduled,
574
- Some(
575
- history_event::Attributes::ActivityTaskScheduledEventAttributes(
576
- ActivityTaskScheduledEventAttributes {
577
- activity_id: "1".to_owned(),
578
- activity_type: Some(ActivityType {
579
- name: "".to_string(),
580
- }),
581
- ..Default::default()
582
- },
583
- ),
584
- ),
585
- );
586
- let started_event_id = t.add_get_event_id(
587
- EventType::ActivityTaskStarted,
588
- Some(
589
- history_event::Attributes::ActivityTaskStartedEventAttributes(
590
- ActivityTaskStartedEventAttributes {
591
- scheduled_event_id,
592
- ..Default::default()
593
- },
594
- ),
595
- ),
596
- );
597
- t.add(
598
- EventType::ActivityTaskCompleted,
599
- history_event::Attributes::ActivityTaskCompletedEventAttributes(
600
- ActivityTaskCompletedEventAttributes {
601
- scheduled_event_id,
602
- started_event_id,
603
- // TODO result: Some(Payloads { payloads: vec![Payload{ metadata: Default::default(), data: vec![] }] }),
604
- ..Default::default()
605
- },
606
- ),
607
- );
608
- t.add_full_wf_task();
609
- let timer_started_event_id = t.add_get_event_id(EventType::TimerStarted, None);
610
- t.add(
611
- EventType::TimerFired,
612
- history_event::Attributes::TimerFiredEventAttributes(TimerFiredEventAttributes {
613
- started_event_id: timer_started_event_id,
614
- timer_id: "1".to_owned(),
571
+ let scheduled_event_id = t.add(ActivityTaskScheduledEventAttributes {
572
+ activity_id: "1".to_owned(),
573
+ activity_type: Some(ActivityType {
574
+ name: "".to_string(),
615
575
  }),
616
- );
576
+ ..Default::default()
577
+ });
578
+ let started_event_id = t.add(ActivityTaskStartedEventAttributes {
579
+ scheduled_event_id,
580
+ ..Default::default()
581
+ });
582
+ t.add(ActivityTaskCompletedEventAttributes {
583
+ scheduled_event_id,
584
+ started_event_id,
585
+ ..Default::default()
586
+ });
587
+ t.add_full_wf_task();
588
+ let timer_started_event_id = t.add_by_type(EventType::TimerStarted);
589
+ t.add(TimerFiredEventAttributes {
590
+ started_event_id: timer_started_event_id,
591
+ timer_id: "1".to_owned(),
592
+ });
617
593
  } else {
618
- let started_event_id = t.add_get_event_id(EventType::TimerStarted, None);
619
- t.add(
620
- EventType::TimerFired,
621
- history_event::Attributes::TimerFiredEventAttributes(TimerFiredEventAttributes {
622
- started_event_id,
623
- timer_id: "1".to_owned(),
624
- }),
625
- );
594
+ let started_event_id = t.add_by_type(EventType::TimerStarted);
595
+ t.add(TimerFiredEventAttributes {
596
+ started_event_id,
597
+ timer_id: "1".to_owned(),
598
+ });
626
599
  t.add_full_wf_task();
627
- let timer_started_event_id = t.add_get_event_id(EventType::TimerStarted, None);
628
- t.add(
629
- EventType::TimerFired,
630
- history_event::Attributes::TimerFiredEventAttributes(TimerFiredEventAttributes {
631
- started_event_id: timer_started_event_id,
632
- timer_id: "2".to_owned(),
633
- }),
634
- );
600
+ let timer_started_event_id = t.add_by_type(EventType::TimerStarted);
601
+ t.add(TimerFiredEventAttributes {
602
+ started_event_id: timer_started_event_id,
603
+ timer_id: "2".to_owned(),
604
+ });
635
605
  }
636
606
  t.add_full_wf_task();
637
607
 
638
608
  if have_marker_in_hist {
639
- let scheduled_event_id = t.add_get_event_id(
640
- EventType::ActivityTaskScheduled,
641
- Some(
642
- history_event::Attributes::ActivityTaskScheduledEventAttributes(
643
- ActivityTaskScheduledEventAttributes {
644
- activity_id: "2".to_string(),
645
- activity_type: Some(ActivityType {
646
- name: "".to_string(),
647
- }),
648
- ..Default::default()
649
- },
650
- ),
651
- ),
652
- );
653
- let started_event_id = t.add_get_event_id(
654
- EventType::ActivityTaskStarted,
655
- Some(
656
- history_event::Attributes::ActivityTaskStartedEventAttributes(
657
- ActivityTaskStartedEventAttributes {
658
- scheduled_event_id,
659
- ..Default::default()
660
- },
661
- ),
662
- ),
663
- );
664
- t.add(
665
- EventType::ActivityTaskCompleted,
666
- history_event::Attributes::ActivityTaskCompletedEventAttributes(
667
- ActivityTaskCompletedEventAttributes {
668
- scheduled_event_id,
669
- started_event_id,
670
- // TODO result: Some(Payloads { payloads: vec![Payload{ metadata: Default::default(), data: vec![] }] }),
671
- ..Default::default()
672
- },
673
- ),
674
- );
675
- } else {
676
- let started_event_id = t.add_get_event_id(EventType::TimerStarted, None);
677
- t.add(
678
- EventType::TimerFired,
679
- history_event::Attributes::TimerFiredEventAttributes(TimerFiredEventAttributes {
680
- started_event_id,
681
- timer_id: "3".to_owned(),
609
+ let scheduled_event_id = t.add(ActivityTaskScheduledEventAttributes {
610
+ activity_id: "2".to_string(),
611
+ activity_type: Some(ActivityType {
612
+ name: "".to_string(),
682
613
  }),
683
- );
614
+ ..Default::default()
615
+ });
616
+ let started_event_id = t.add(ActivityTaskStartedEventAttributes {
617
+ scheduled_event_id,
618
+ ..Default::default()
619
+ });
620
+ t.add(ActivityTaskCompletedEventAttributes {
621
+ scheduled_event_id,
622
+ started_event_id,
623
+ ..Default::default()
624
+ });
625
+ } else {
626
+ let started_event_id = t.add_by_type(EventType::TimerStarted);
627
+ t.add(TimerFiredEventAttributes {
628
+ started_event_id,
629
+ timer_id: "3".to_owned(),
630
+ });
684
631
  }
685
632
  t.add_full_wf_task();
686
633
  t.add_workflow_execution_completed();
@@ -1,7 +1,8 @@
1
1
  use super::{
2
- workflow_machines::MachineResponse, Cancellable, EventInfo, MachineKind, NewMachineWithCommand,
2
+ workflow_machines::MachineResponse, Cancellable, EventInfo, NewMachineWithCommand,
3
3
  OnEventWrapper, WFMachinesAdapter, WFMachinesError,
4
4
  };
5
+ use crate::worker::workflow::machines::HistEventData;
5
6
  use rustfsm::{fsm, MachineError, TransitionResult};
6
7
  use std::convert::TryFrom;
7
8
  use temporal_sdk_core_protos::{
@@ -183,10 +184,11 @@ impl TryFrom<CommandType> for SignalExternalMachineEvents {
183
184
  })
184
185
  }
185
186
  }
186
- impl TryFrom<HistoryEvent> for SignalExternalMachineEvents {
187
+ impl TryFrom<HistEventData> for SignalExternalMachineEvents {
187
188
  type Error = WFMachinesError;
188
189
 
189
- fn try_from(e: HistoryEvent) -> Result<Self, Self::Error> {
190
+ fn try_from(e: HistEventData) -> Result<Self, Self::Error> {
191
+ let e = e.event;
190
192
  Ok(match e.event_type() {
191
193
  EventType::ExternalWorkflowExecutionSignaled => Self::ExternalWorkflowExecutionSignaled,
192
194
  EventType::SignalExternalWorkflowExecutionInitiated => {
@@ -202,15 +204,13 @@ impl TryFrom<HistoryEvent> for SignalExternalMachineEvents {
202
204
  Self::SignalExternalWorkflowExecutionFailed(attrs.cause())
203
205
  } else {
204
206
  return Err(WFMachinesError::Fatal(format!(
205
- "Signal workflow failed attributes were unset: {}",
206
- e
207
+ "Signal workflow failed attributes were unset: {e}"
207
208
  )));
208
209
  }
209
210
  }
210
211
  _ => {
211
212
  return Err(WFMachinesError::Nondeterminism(format!(
212
- "Signal external WF machine does not handle this event: {}",
213
- e
213
+ "Signal external WF machine does not handle this event: {e}"
214
214
  )))
215
215
  }
216
216
  })
@@ -242,7 +242,7 @@ impl WFMachinesAdapter for SignalExternalMachine {
242
242
  seq: self.shared_state.seq,
243
243
  // TODO: Create new failure type upstream for this
244
244
  failure: Some(Failure {
245
- message: format!("Unable to signal external workflow because {}", reason),
245
+ message: format!("Unable to signal external workflow because {reason}"),
246
246
  failure_info: Some(FailureInfo::ApplicationFailureInfo(
247
247
  ApplicationFailureInfo {
248
248
  r#type: f.to_string(),
@@ -268,10 +268,6 @@ impl WFMachinesAdapter for SignalExternalMachine {
268
268
  | EventType::SignalExternalWorkflowExecutionFailed
269
269
  )
270
270
  }
271
-
272
- fn kind(&self) -> MachineKind {
273
- MachineKind::SignalExternalWorkflow
274
- }
275
271
  }
276
272
 
277
273
  impl Cancellable for SignalExternalMachine {
@@ -1,9 +1,10 @@
1
1
  #![allow(clippy::large_enum_variant)]
2
2
 
3
3
  use super::{
4
- workflow_machines::{MachineResponse, WFMachinesError},
5
- Cancellable, EventInfo, MachineKind, NewMachineWithCommand, OnEventWrapper, WFMachinesAdapter,
4
+ workflow_machines::MachineResponse, Cancellable, EventInfo, NewMachineWithCommand,
5
+ OnEventWrapper, WFMachinesAdapter,
6
6
  };
7
+ use crate::worker::workflow::{machines::HistEventData, WFMachinesError};
7
8
  use rustfsm::{fsm, MachineError, StateMachine, TransitionResult};
8
9
  use std::convert::TryFrom;
9
10
  use temporal_sdk_core_protos::{
@@ -93,10 +94,11 @@ impl TimerMachine {
93
94
  }
94
95
  }
95
96
 
96
- impl TryFrom<HistoryEvent> for TimerMachineEvents {
97
+ impl TryFrom<HistEventData> for TimerMachineEvents {
97
98
  type Error = WFMachinesError;
98
99
 
99
- fn try_from(e: HistoryEvent) -> Result<Self, Self::Error> {
100
+ fn try_from(e: HistEventData) -> Result<Self, Self::Error> {
101
+ let e = e.event;
100
102
  Ok(match e.event_type() {
101
103
  EventType::TimerStarted => Self::TimerStarted(e.event_id),
102
104
  EventType::TimerCanceled => Self::TimerCanceled,
@@ -107,15 +109,13 @@ impl TryFrom<HistoryEvent> for TimerMachineEvents {
107
109
  Self::TimerFired(attrs)
108
110
  } else {
109
111
  return Err(WFMachinesError::Fatal(format!(
110
- "Timer fired attribs were unset: {}",
111
- e
112
+ "Timer fired attribs were unset: {e}"
112
113
  )));
113
114
  }
114
115
  }
115
116
  _ => {
116
117
  return Err(WFMachinesError::Nondeterminism(format!(
117
- "Timer machine does not handle this event: {}",
118
- e
118
+ "Timer machine does not handle this event: {e}"
119
119
  )))
120
120
  }
121
121
  })
@@ -246,10 +246,6 @@ impl WFMachinesAdapter for TimerMachine {
246
246
  EventType::TimerStarted | EventType::TimerCanceled | EventType::TimerFired
247
247
  )
248
248
  }
249
-
250
- fn kind(&self) -> MachineKind {
251
- MachineKind::Timer
252
- }
253
249
  }
254
250
 
255
251
  impl Cancellable for TimerMachine {
@@ -260,7 +256,7 @@ impl Cancellable for TimerMachine {
260
256
  vec![MachineResponse::IssueNewCommand(cmd)]
261
257
  }
262
258
  None => vec![],
263
- x => panic!("Invalid cancel event response {:?}", x),
259
+ x => panic!("Invalid cancel event response {x:?}"),
264
260
  },
265
261
  )
266
262
  }
@@ -75,8 +75,10 @@ mod machine_coverage_report {
75
75
  complete_workflow_state_machine::CompleteWorkflowMachine,
76
76
  continue_as_new_workflow_state_machine::ContinueAsNewWorkflowMachine,
77
77
  fail_workflow_state_machine::FailWorkflowMachine,
78
- local_activity_state_machine::LocalActivityMachine, patch_state_machine::PatchMachine,
79
- signal_external_state_machine::SignalExternalMachine, timer_state_machine::TimerMachine,
78
+ local_activity_state_machine::LocalActivityMachine,
79
+ modify_workflow_properties_state_machine::ModifyWorkflowPropertiesMachine,
80
+ patch_state_machine::PatchMachine, signal_external_state_machine::SignalExternalMachine,
81
+ timer_state_machine::TimerMachine,
80
82
  upsert_search_attributes_state_machine::UpsertSearchAttributesMachine,
81
83
  workflow_task_state_machine::WorkflowTaskMachine,
82
84
  };
@@ -115,6 +117,7 @@ mod machine_coverage_report {
115
117
  let mut cancel_ext = CancelExternalMachine::visualizer().to_owned();
116
118
  let mut la_mach = LocalActivityMachine::visualizer().to_owned();
117
119
  let mut upsert_search_attr = UpsertSearchAttributesMachine::visualizer().to_owned();
120
+ let mut modify_wf_props = ModifyWorkflowPropertiesMachine::visualizer().to_owned();
118
121
 
119
122
  // This isn't at all efficient but doesn't need to be.
120
123
  // Replace transitions in the vizzes with green color if they are covered.
@@ -138,7 +141,10 @@ mod machine_coverage_report {
138
141
  m @ "UpsertSearchAttributesMachine" => {
139
142
  cover_transitions(m, &mut upsert_search_attr, coverage)
140
143
  }
141
- m => panic!("Unknown machine {}", m),
144
+ m @ "ModifyWorkflowPropertiesMachine" => {
145
+ cover_transitions(m, &mut modify_wf_props, coverage)
146
+ }
147
+ m => panic!("Unknown machine {m}"),
142
148
  }
143
149
  }
144
150
  }
@@ -162,7 +168,7 @@ mod machine_coverage_report {
162
168
  let mut d = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
163
169
  d.push("machine_coverage");
164
170
  std::fs::create_dir_all(&d).unwrap();
165
- d.push(format!("{}_Coverage.puml", machine));
171
+ d.push(format!("{machine}_Coverage.puml"));
166
172
  let mut file = File::create(d).unwrap();
167
173
  file.write_all(viz.as_bytes()).unwrap();
168
174
  }
@@ -1,8 +1,8 @@
1
- use super::{
2
- workflow_machines::{MachineResponse, WFMachinesError},
3
- NewMachineWithCommand,
1
+ use super::{workflow_machines::MachineResponse, NewMachineWithCommand};
2
+ use crate::worker::workflow::{
3
+ machines::{Cancellable, EventInfo, HistEventData, WFMachinesAdapter},
4
+ WFMachinesError,
4
5
  };
5
- use crate::worker::workflow::machines::{Cancellable, EventInfo, MachineKind, WFMachinesAdapter};
6
6
  use rustfsm::{fsm, TransitionResult};
7
7
  use temporal_sdk_core_protos::{
8
8
  coresdk::workflow_commands::UpsertWorkflowSearchAttributes,
@@ -102,10 +102,6 @@ impl WFMachinesAdapter for UpsertSearchAttributesMachine {
102
102
  EventType::UpsertWorkflowSearchAttributes
103
103
  )
104
104
  }
105
-
106
- fn kind(&self) -> MachineKind {
107
- MachineKind::UpsertSearchAttributes
108
- }
109
105
  }
110
106
 
111
107
  impl Cancellable for UpsertSearchAttributesMachine {}
@@ -113,10 +109,11 @@ impl Cancellable for UpsertSearchAttributesMachine {}
113
109
  // Converts the generic history event with type EventType::UpsertWorkflowSearchAttributes into the
114
110
  // UpsertSearchAttributesMachine-specific event type
115
111
  // UpsertSearchAttributesMachineEvents::CommandRecorded.
116
- impl TryFrom<HistoryEvent> for UpsertSearchAttributesMachineEvents {
112
+ impl TryFrom<HistEventData> for UpsertSearchAttributesMachineEvents {
117
113
  type Error = WFMachinesError;
118
114
 
119
- fn try_from(e: HistoryEvent) -> Result<Self, Self::Error> {
115
+ fn try_from(e: HistEventData) -> Result<Self, Self::Error> {
116
+ let e = e.event;
120
117
  match e.event_type() {
121
118
  EventType::UpsertWorkflowSearchAttributes => {
122
119
  Ok(UpsertSearchAttributesMachineEvents::CommandRecorded)
@@ -233,7 +230,13 @@ mod tests {
233
230
  ..Default::default()
234
231
  };
235
232
  assert!(sm.matches_event(&recorded_history_event));
236
- let cmd_recorded_sm_event = recorded_history_event.try_into().unwrap();
233
+ let cmd_recorded_sm_event = HistEventData {
234
+ event: recorded_history_event,
235
+ replaying: false,
236
+ current_task_is_last_in_history: true,
237
+ }
238
+ .try_into()
239
+ .unwrap();
237
240
 
238
241
  OnEventWrapper::on_event_mut(&mut sm, cmd_scheduled_sm_event)
239
242
  .expect("CommandScheduled should transition Created -> CommandIssued");
@@ -1,15 +1,13 @@
1
- use super::super::{local_activity_state_machine::ResolveDat, WFMachinesError};
1
+ use super::super::local_activity_state_machine::ResolveDat;
2
2
  use crate::{
3
- protosext::{HistoryEventExt, ValidScheduleLA},
3
+ protosext::{CompleteLocalActivityData, ValidScheduleLA},
4
4
  worker::{ExecutingLAId, LocalActRequest, NewLocalAct},
5
5
  };
6
6
  use std::{
7
7
  collections::{HashMap, HashSet},
8
8
  time::SystemTime,
9
9
  };
10
- use temporal_sdk_core_protos::temporal::api::{
11
- common::v1::WorkflowExecution, history::v1::HistoryEvent,
12
- };
10
+ use temporal_sdk_core_protos::temporal::api::common::v1::WorkflowExecution;
13
11
 
14
12
  #[derive(Default)]
15
13
  pub(super) struct LocalActivityData {
@@ -53,7 +51,7 @@ impl LocalActivityData {
53
51
  .chain(self.new_requests.drain(..).map(|sa| {
54
52
  self.executing.insert(sa.seq);
55
53
  LocalActRequest::New(NewLocalAct {
56
- schedule_time: sa.original_schedule_time.unwrap_or_else(SystemTime::now),
54
+ schedule_time: SystemTime::now(),
57
55
  schedule_cmd: sa,
58
56
  workflow_type: wf_type.to_string(),
59
57
  workflow_exec_info: WorkflowExecution {
@@ -70,17 +68,8 @@ impl LocalActivityData {
70
68
  self.executing.len() + self.new_requests.len()
71
69
  }
72
70
 
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(())
71
+ pub(super) fn insert_peeked_marker(&mut self, dat: CompleteLocalActivityData) {
72
+ self.preresolutions.insert(dat.marker_dat.seq, dat.into());
84
73
  }
85
74
 
86
75
  pub(super) fn take_preresolution(&mut self, seq: u32) -> Option<ResolveDat> {