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
@@ -6,22 +6,25 @@ use crate::{
6
6
  NamespacedWorkflowExecution,
7
7
  },
8
8
  external_data::LocalActivityMarkerData,
9
+ workflow_commands::ScheduleActivity,
9
10
  IntoPayloadsExt,
10
11
  },
11
12
  temporal::api::{
12
- common::v1::{Payload, Payloads, WorkflowExecution, WorkflowType},
13
- enums::v1::{EventType, WorkflowTaskFailedCause},
13
+ common::v1::{ActivityType, Payload, Payloads, WorkflowExecution, WorkflowType},
14
+ enums::v1::{EventType, TaskQueueKind, WorkflowTaskFailedCause},
14
15
  failure::v1::{failure, CanceledFailureInfo, Failure},
15
16
  history::v1::{history_event::Attributes, *},
17
+ taskqueue::v1::TaskQueue,
16
18
  },
17
19
  HistoryInfo,
18
20
  };
19
21
  use anyhow::bail;
20
- use prost_types::Timestamp;
22
+ use prost_wkt_types::Timestamp;
21
23
  use std::time::{Duration, SystemTime};
22
24
  use uuid::Uuid;
23
25
 
24
26
  pub static DEFAULT_WORKFLOW_TYPE: &str = "default_wf_type";
27
+ pub static DEFAULT_ACTIVITY_TYPE: &str = "default_act_type";
25
28
 
26
29
  type Result<T, E = anyhow::Error> = std::result::Result<T, E>;
27
30
 
@@ -38,27 +41,41 @@ pub struct TestHistoryBuilder {
38
41
  }
39
42
 
40
43
  impl TestHistoryBuilder {
44
+ pub fn from_history(events: Vec<HistoryEvent>) -> Self {
45
+ let find_matching_id = |etype: EventType| {
46
+ events
47
+ .iter()
48
+ .rev()
49
+ .find(|e| e.event_type() == etype)
50
+ .map(|e| e.event_id)
51
+ .unwrap_or_default()
52
+ };
53
+ Self {
54
+ current_event_id: events.last().map(|e| e.event_id).unwrap_or_default(),
55
+ workflow_task_scheduled_event_id: find_matching_id(EventType::WorkflowTaskScheduled),
56
+ final_workflow_task_started_event_id: find_matching_id(EventType::WorkflowTaskStarted),
57
+ previous_task_completed_id: find_matching_id(EventType::WorkflowTaskCompleted),
58
+ original_run_id: extract_original_run_id_from_events(&events)
59
+ .expect("Run id must be discoverable")
60
+ .to_string(),
61
+ events,
62
+ }
63
+ }
64
+
41
65
  /// Add an event by type with attributes. Bundles both into a [HistoryEvent] with an id that is
42
- /// incremented on each call to add.
43
- pub fn add(&mut self, event_type: EventType, attribs: Attributes) {
44
- self.build_and_push_event(event_type, attribs);
66
+ /// incremented on each call to add. Returns the id of the new event.
67
+ pub fn add(&mut self, attribs: impl Into<Attributes>) -> i64 {
68
+ let attribs: Attributes = attribs.into();
69
+ self.build_and_push_event(attribs.event_type(), attribs);
70
+ self.current_event_id
45
71
  }
46
72
 
47
- /// Adds an event to the history by type, with default attributes.
48
- pub fn add_by_type(&mut self, event_type: EventType) {
73
+ /// Adds an event to the history by type, with default attributes. Returns the id of the new
74
+ /// event.
75
+ pub fn add_by_type(&mut self, event_type: EventType) -> i64 {
49
76
  let attribs =
50
77
  default_attribs(event_type).expect("Couldn't make default attributes in test builder");
51
- self.build_and_push_event(event_type, attribs);
52
- }
53
-
54
- /// Adds an event, returning the ID that was assigned to it
55
- pub fn add_get_event_id(&mut self, event_type: EventType, attrs: Option<Attributes>) -> i64 {
56
- if let Some(a) = attrs {
57
- self.build_and_push_event(event_type, a);
58
- } else {
59
- self.add_by_type(event_type);
60
- }
61
- self.current_event_id
78
+ self.add(attribs)
62
79
  }
63
80
 
64
81
  /// Adds the following events:
@@ -78,25 +95,21 @@ impl TestHistoryBuilder {
78
95
  }
79
96
 
80
97
  pub fn add_workflow_task_scheduled(&mut self) {
81
- self.workflow_task_scheduled_event_id =
82
- self.add_get_event_id(EventType::WorkflowTaskScheduled, None);
98
+ self.workflow_task_scheduled_event_id = self.add_by_type(EventType::WorkflowTaskScheduled);
83
99
  }
84
100
 
85
101
  pub fn add_workflow_task_started(&mut self) {
86
- let attrs = WorkflowTaskStartedEventAttributes {
102
+ self.final_workflow_task_started_event_id = self.add(WorkflowTaskStartedEventAttributes {
87
103
  scheduled_event_id: self.workflow_task_scheduled_event_id,
88
104
  ..Default::default()
89
- };
90
- self.final_workflow_task_started_event_id =
91
- self.add_get_event_id(EventType::WorkflowTaskStarted, Some(attrs.into()));
105
+ });
92
106
  }
93
107
 
94
108
  pub fn add_workflow_task_completed(&mut self) {
95
- let attrs = WorkflowTaskCompletedEventAttributes {
109
+ let id = self.add(WorkflowTaskCompletedEventAttributes {
96
110
  scheduled_event_id: self.workflow_task_scheduled_event_id,
97
111
  ..Default::default()
98
- };
99
- let id = self.add_get_event_id(EventType::WorkflowTaskCompleted, Some(attrs.into()));
112
+ });
100
113
  self.previous_task_completed_id = id;
101
114
  }
102
115
 
@@ -154,30 +167,22 @@ impl TestHistoryBuilder {
154
167
  }
155
168
 
156
169
  pub fn add_activity_task_scheduled(&mut self, activity_id: impl Into<String>) -> i64 {
157
- self.add_get_event_id(
158
- EventType::ActivityTaskScheduled,
159
- Some(
160
- history_event::Attributes::ActivityTaskScheduledEventAttributes(
161
- ActivityTaskScheduledEventAttributes {
162
- activity_id: activity_id.into(),
163
- ..Default::default()
164
- },
165
- ),
166
- ),
167
- )
170
+ self.add(ActivityTaskScheduledEventAttributes {
171
+ activity_id: activity_id.into(),
172
+ activity_type: Some(ActivityType {
173
+ name: DEFAULT_ACTIVITY_TYPE.to_string(),
174
+ }),
175
+ ..Default::default()
176
+ })
168
177
  }
178
+
169
179
  pub fn add_activity_task_started(&mut self, scheduled_event_id: i64) -> i64 {
170
- self.add_get_event_id(
171
- EventType::ActivityTaskStarted,
172
- Some(
173
- history_event::Attributes::ActivityTaskStartedEventAttributes(
174
- ActivityTaskStartedEventAttributes {
175
- scheduled_event_id,
176
- ..Default::default()
177
- },
178
- ),
179
- ),
180
- )
180
+ self.add(Attributes::ActivityTaskStartedEventAttributes(
181
+ ActivityTaskStartedEventAttributes {
182
+ scheduled_event_id,
183
+ ..Default::default()
184
+ },
185
+ ))
181
186
  }
182
187
 
183
188
  pub fn add_activity_task_completed(
@@ -186,17 +191,12 @@ impl TestHistoryBuilder {
186
191
  started_event_id: i64,
187
192
  payload: Payload,
188
193
  ) {
189
- self.add(
190
- EventType::ActivityTaskCompleted,
191
- history_event::Attributes::ActivityTaskCompletedEventAttributes(
192
- ActivityTaskCompletedEventAttributes {
193
- scheduled_event_id,
194
- started_event_id,
195
- result: vec![payload].into_payloads(),
196
- ..Default::default()
197
- },
198
- ),
199
- );
194
+ self.add(ActivityTaskCompletedEventAttributes {
195
+ scheduled_event_id,
196
+ started_event_id,
197
+ result: vec![payload].into_payloads(),
198
+ ..Default::default()
199
+ });
200
200
  }
201
201
 
202
202
  pub fn add_activity_task_cancel_requested(&mut self, scheduled_event_id: i64) {
@@ -236,13 +236,10 @@ impl TestHistoryBuilder {
236
236
  }
237
237
 
238
238
  pub fn add_timer_fired(&mut self, timer_started_evt_id: i64, timer_id: String) {
239
- self.add(
240
- EventType::TimerFired,
241
- history_event::Attributes::TimerFiredEventAttributes(TimerFiredEventAttributes {
242
- started_event_id: timer_started_evt_id,
243
- timer_id,
244
- }),
245
- );
239
+ self.add(TimerFiredEventAttributes {
240
+ started_event_id: timer_started_evt_id,
241
+ timer_id,
242
+ });
246
243
  }
247
244
 
248
245
  pub fn add_we_signaled(&mut self, signal_name: &str, payloads: Vec<Payload>) {
@@ -270,22 +267,21 @@ impl TestHistoryBuilder {
270
267
  activity_id: &str,
271
268
  payload: Option<Payload>,
272
269
  failure: Option<Failure>,
273
- complete_time: Option<Timestamp>,
270
+ detail_mutator: impl FnOnce(&mut LocalActivityMarkerData),
274
271
  ) {
272
+ let mut lamd = LocalActivityMarkerData {
273
+ seq,
274
+ attempt: 1,
275
+ activity_id: activity_id.to_string(),
276
+ activity_type: DEFAULT_ACTIVITY_TYPE.to_string(),
277
+ complete_time: None,
278
+ backoff: None,
279
+ original_schedule_time: None,
280
+ };
281
+ detail_mutator(&mut lamd);
275
282
  let attrs = MarkerRecordedEventAttributes {
276
283
  marker_name: LOCAL_ACTIVITY_MARKER_NAME.to_string(),
277
- details: build_local_activity_marker_details(
278
- LocalActivityMarkerData {
279
- seq,
280
- attempt: 1,
281
- activity_id: activity_id.to_string(),
282
- activity_type: "some_act_type".to_string(),
283
- complete_time,
284
- backoff: None,
285
- original_schedule_time: None,
286
- },
287
- payload,
288
- ),
284
+ details: build_local_activity_marker_details(lamd, payload),
289
285
  workflow_task_completed_event_id: self.previous_task_completed_id,
290
286
  failure,
291
287
  ..Default::default()
@@ -299,7 +295,7 @@ impl TestHistoryBuilder {
299
295
  activity_id: &str,
300
296
  payload: Payload,
301
297
  ) {
302
- self.add_local_activity_marker(seq, activity_id, Some(payload), None, None);
298
+ self.add_local_activity_marker(seq, activity_id, Some(payload), None, |_| {});
303
299
  }
304
300
 
305
301
  pub fn add_local_activity_result_marker_with_time(
@@ -309,7 +305,9 @@ impl TestHistoryBuilder {
309
305
  payload: Payload,
310
306
  complete_time: Timestamp,
311
307
  ) {
312
- self.add_local_activity_marker(seq, activity_id, Some(payload), None, Some(complete_time));
308
+ self.add_local_activity_marker(seq, activity_id, Some(payload), None, |d| {
309
+ d.complete_time = Some(complete_time)
310
+ });
313
311
  }
314
312
 
315
313
  pub fn add_local_activity_fail_marker(
@@ -318,7 +316,7 @@ impl TestHistoryBuilder {
318
316
  activity_id: &str,
319
317
  failure: Failure,
320
318
  ) {
321
- self.add_local_activity_marker(seq, activity_id, None, Some(failure), None);
319
+ self.add_local_activity_marker(seq, activity_id, None, Some(failure), |_| {});
322
320
  }
323
321
 
324
322
  pub fn add_local_activity_cancel_marker(&mut self, seq: u32, activity_id: &str) {
@@ -336,7 +334,7 @@ impl TestHistoryBuilder {
336
334
  )),
337
335
  encoded_attributes: Default::default(),
338
336
  }),
339
- None,
337
+ |_| {},
340
338
  );
341
339
  }
342
340
 
@@ -346,7 +344,7 @@ impl TestHistoryBuilder {
346
344
  workflow_id: impl Into<String>,
347
345
  run_id: impl Into<String>,
348
346
  ) -> i64 {
349
- let attrs = SignalExternalWorkflowExecutionInitiatedEventAttributes {
347
+ self.add(SignalExternalWorkflowExecutionInitiatedEventAttributes {
350
348
  workflow_task_completed_event_id: self.previous_task_completed_id,
351
349
  workflow_execution: Some(WorkflowExecution {
352
350
  workflow_id: workflow_id.into(),
@@ -355,11 +353,7 @@ impl TestHistoryBuilder {
355
353
  signal_name: signal_name.into(),
356
354
  control: "".to_string(),
357
355
  ..Default::default()
358
- };
359
- self.add_get_event_id(
360
- EventType::SignalExternalWorkflowExecutionInitiated,
361
- Some(attrs.into()),
362
- )
356
+ })
363
357
  }
364
358
 
365
359
  pub fn add_external_signal_completed(&mut self, initiated_id: i64) {
@@ -382,18 +376,16 @@ impl TestHistoryBuilder {
382
376
  }
383
377
 
384
378
  pub fn add_cancel_external_wf(&mut self, execution: NamespacedWorkflowExecution) -> i64 {
385
- let attrs = RequestCancelExternalWorkflowExecutionInitiatedEventAttributes {
386
- workflow_task_completed_event_id: self.previous_task_completed_id,
387
- namespace: execution.namespace,
388
- workflow_execution: Some(WorkflowExecution {
389
- workflow_id: execution.workflow_id,
390
- run_id: execution.run_id,
391
- }),
392
- ..Default::default()
393
- };
394
- self.add_get_event_id(
395
- EventType::RequestCancelExternalWorkflowExecutionInitiated,
396
- Some(attrs.into()),
379
+ self.add(
380
+ RequestCancelExternalWorkflowExecutionInitiatedEventAttributes {
381
+ workflow_task_completed_event_id: self.previous_task_completed_id,
382
+ namespace: execution.namespace,
383
+ workflow_execution: Some(WorkflowExecution {
384
+ workflow_id: execution.workflow_id,
385
+ run_id: execution.run_id,
386
+ }),
387
+ ..Default::default()
388
+ },
397
389
  )
398
390
  }
399
391
 
@@ -419,6 +411,12 @@ impl TestHistoryBuilder {
419
411
  );
420
412
  }
421
413
 
414
+ pub fn add_wfe_started_with_wft_timeout(&mut self, dur: Duration) {
415
+ let mut wesattrs = default_wes_attribs();
416
+ wesattrs.workflow_task_timeout = Some(dur.try_into().unwrap());
417
+ self.add(wesattrs);
418
+ }
419
+
422
420
  pub fn get_orig_run_id(&self) -> &str {
423
421
  &self.original_run_id
424
422
  }
@@ -443,13 +441,64 @@ impl TestHistoryBuilder {
443
441
  }
444
442
 
445
443
  /// Return most recent wft start time or panic if unset
446
- pub fn wft_start_time(&self) -> prost_types::Timestamp {
444
+ pub fn wft_start_time(&self) -> Timestamp {
447
445
  self.events[(self.workflow_task_scheduled_event_id + 1) as usize]
448
446
  .event_time
449
447
  .clone()
450
448
  .unwrap()
451
449
  }
452
450
 
451
+ /// Alter the workflow type of the history
452
+ pub fn set_wf_type(&mut self, name: &str) {
453
+ if let Some(Attributes::WorkflowExecutionStartedEventAttributes(wes)) =
454
+ self.events.get_mut(0).and_then(|e| e.attributes.as_mut())
455
+ {
456
+ wes.workflow_type = Some(WorkflowType {
457
+ name: name.to_string(),
458
+ })
459
+ }
460
+ }
461
+
462
+ /// Alter some specific event. You can easily craft nonsense histories this way, use carefully.
463
+ pub fn modify_event(&mut self, event_id: i64, modifier: impl FnOnce(&mut HistoryEvent)) {
464
+ let he = self
465
+ .events
466
+ .get_mut((event_id - 1) as usize)
467
+ .expect("Event must be present");
468
+ modifier(he);
469
+ }
470
+
471
+ /// Sets internal patches which should appear in the first WFT complete event
472
+ pub fn set_flags_first_wft(&mut self, core: &[u32], lang: &[u32]) {
473
+ Self::set_flags(self.events.iter_mut(), core, lang)
474
+ }
475
+
476
+ /// Sets internal patches which should appear in the most recent complete event
477
+ pub fn set_flags_last_wft(&mut self, core: &[u32], lang: &[u32]) {
478
+ Self::set_flags(self.events.iter_mut().rev(), core, lang)
479
+ }
480
+
481
+ fn set_flags<'a>(
482
+ mut events: impl Iterator<Item = &'a mut HistoryEvent>,
483
+ core: &[u32],
484
+ lang: &[u32],
485
+ ) {
486
+ if let Some(first_attrs) = events.find_map(|e| {
487
+ if let Some(Attributes::WorkflowTaskCompletedEventAttributes(a)) = e.attributes.as_mut()
488
+ {
489
+ Some(a)
490
+ } else {
491
+ None
492
+ }
493
+ }) {
494
+ let sdk_dat = first_attrs
495
+ .sdk_metadata
496
+ .get_or_insert_with(Default::default);
497
+ sdk_dat.core_used_flags = core.to_vec();
498
+ sdk_dat.lang_used_flags = lang.to_vec();
499
+ }
500
+ }
501
+
453
502
  fn build_and_push_event(&mut self, event_type: EventType, attribs: Attributes) {
454
503
  self.current_event_id += 1;
455
504
  let evt = HistoryEvent {
@@ -492,6 +541,17 @@ pub fn default_wes_attribs() -> WorkflowExecutionStartedEventAttributes {
492
541
  .try_into()
493
542
  .expect("5 secs is a valid duration"),
494
543
  ),
544
+ task_queue: Some(TaskQueue {
545
+ name: "q".to_string(),
546
+ kind: TaskQueueKind::Normal as i32,
547
+ }),
548
+ ..Default::default()
549
+ }
550
+ }
551
+
552
+ pub fn default_act_sched() -> ScheduleActivity {
553
+ ScheduleActivity {
554
+ activity_type: DEFAULT_ACTIVITY_TYPE.to_string(),
495
555
  ..Default::default()
496
556
  }
497
557
  }
@@ -1,7 +1,7 @@
1
1
  use crate::temporal::api::{
2
2
  common::v1::WorkflowType,
3
3
  enums::v1::{EventType, TaskQueueKind},
4
- history::v1::{history_event, History, HistoryEvent},
4
+ history::v1::{history_event, History, HistoryEvent, WorkflowExecutionStartedEventAttributes},
5
5
  taskqueue::v1::TaskQueue,
6
6
  workflowservice::v1::{GetWorkflowExecutionHistoryResponse, PollWorkflowTaskQueueResponse},
7
7
  };
@@ -18,6 +18,7 @@ pub struct HistoryInfo {
18
18
  events: Vec<HistoryEvent>,
19
19
  wf_task_count: usize,
20
20
  wf_type: String,
21
+ wf_exe_started_attrs: WorkflowExecutionStartedEventAttributes,
21
22
  }
22
23
 
23
24
  type Result<T, E = anyhow::Error> = std::result::Result<T, E>;
@@ -36,20 +37,18 @@ impl HistoryInfo {
36
37
  let mut workflow_task_started_event_id = 0;
37
38
  let mut wf_task_count = 0;
38
39
  let mut history = events.iter().peekable();
39
-
40
- let wf_type = match &events.get(0).unwrap().attributes {
40
+ let started_attrs = match &events.get(0).unwrap().attributes {
41
41
  Some(history_event::Attributes::WorkflowExecutionStartedEventAttributes(attrs)) => {
42
- attrs
43
- .workflow_type
44
- .as_ref()
45
- .ok_or_else(|| {
46
- anyhow!("No workflow type defined in execution started attributes")
47
- })?
48
- .name
49
- .clone()
42
+ attrs.clone()
50
43
  }
51
44
  _ => bail!("First event in history was not workflow execution started!"),
52
45
  };
46
+ let wf_type = started_attrs
47
+ .workflow_type
48
+ .as_ref()
49
+ .ok_or_else(|| anyhow!("No workflow type defined in execution started attributes"))?
50
+ .name
51
+ .clone();
53
52
 
54
53
  let mut events = vec![];
55
54
  while let Some(event) = history.next() {
@@ -87,6 +86,7 @@ impl HistoryInfo {
87
86
  events,
88
87
  wf_task_count,
89
88
  wf_type,
89
+ wf_exe_started_attrs: started_attrs,
90
90
  });
91
91
  }
92
92
  } else if next_event.is_some() && !next_is_failed_or_timeout_or_term {
@@ -108,6 +108,7 @@ impl HistoryInfo {
108
108
  events,
109
109
  wf_task_count,
110
110
  wf_type,
111
+ wf_exe_started_attrs: started_attrs,
111
112
  });
112
113
  }
113
114
  // No more events
@@ -135,16 +136,13 @@ impl HistoryInfo {
135
136
  &self.events
136
137
  }
137
138
 
138
- /// Attempt to extract run id from internal events. If the first event is not workflow execution
139
- /// started, it will panic.
139
+ pub fn into_events(self) -> Vec<HistoryEvent> {
140
+ self.events
141
+ }
142
+
143
+ /// Extract run id from the workflow execution started attributes.
140
144
  pub fn orig_run_id(&self) -> &str {
141
- if let Some(history_event::Attributes::WorkflowExecutionStartedEventAttributes(wes)) =
142
- &self.events[0].attributes
143
- {
144
- &wes.original_execution_run_id
145
- } else {
146
- panic!("First event is wrong type")
147
- }
145
+ &self.wf_exe_started_attrs.original_execution_run_id
148
146
  }
149
147
 
150
148
  /// Return total workflow task count in this history
@@ -155,7 +153,7 @@ impl HistoryInfo {
155
153
  /// Create a workflow task polling response containing all the events in this history and a
156
154
  /// randomly generated task token. Caller should attach a meaningful `workflow_execution` if
157
155
  /// needed.
158
- pub fn as_poll_wft_response(&self, task_q: impl Into<String>) -> PollWorkflowTaskQueueResponse {
156
+ pub fn as_poll_wft_response(&self) -> PollWorkflowTaskQueueResponse {
159
157
  let task_token: [u8; 16] = thread_rng().gen();
160
158
  PollWorkflowTaskQueueResponse {
161
159
  history: Some(History {
@@ -166,7 +164,13 @@ impl HistoryInfo {
166
164
  name: self.wf_type.clone(),
167
165
  }),
168
166
  workflow_execution_task_queue: Some(TaskQueue {
169
- name: task_q.into(),
167
+ name: self
168
+ .wf_exe_started_attrs
169
+ .task_queue
170
+ .as_ref()
171
+ .unwrap()
172
+ .name
173
+ .clone(),
170
174
  kind: TaskQueueKind::Normal as i32,
171
175
  }),
172
176
  previous_started_event_id: self.previous_started_event_id,
@@ -204,7 +208,7 @@ mod tests {
204
208
  let mut t = TestHistoryBuilder::default();
205
209
  t.add_by_type(EventType::WorkflowExecutionStarted);
206
210
  t.add_full_wf_task();
207
- let timer_started_event_id = t.add_get_event_id(EventType::TimerStarted, None);
211
+ let timer_started_event_id = t.add_by_type(EventType::TimerStarted);
208
212
  t.add_timer_fired(timer_started_event_id, timer_id.to_string());
209
213
  t.add_workflow_task_scheduled_and_started();
210
214
  t