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
@@ -1,6 +1,6 @@
1
1
  use crate::{
2
- ClientOptions, ListClosedFilters, ListOpenFilters, Namespace, Result, RetryConfig,
3
- StartTimeFilter, WorkflowClientTrait, WorkflowOptions,
2
+ ClientOptions, ListClosedFilters, ListOpenFilters, Namespace, RegisterNamespaceOptions, Result,
3
+ RetryConfig, SignalWithStartOptions, StartTimeFilter, WorkflowClientTrait, WorkflowOptions,
4
4
  };
5
5
  use backoff::{backoff::Backoff, exponential::ExponentialBackoff, Clock, SystemClock};
6
6
  use futures_retry::{ErrorHandler, FutureRetry, RetryPolicy};
@@ -8,7 +8,7 @@ use std::{fmt::Debug, future::Future, sync::Arc, time::Duration};
8
8
  use temporal_sdk_core_protos::{
9
9
  coresdk::workflow_commands::QueryResult,
10
10
  temporal::api::{
11
- common::v1::{Header, Payload, Payloads},
11
+ common::v1::{Payload, Payloads},
12
12
  enums::v1::WorkflowTaskFailedCause,
13
13
  failure::v1::Failure,
14
14
  query::v1::WorkflowQuery,
@@ -101,32 +101,49 @@ impl<SG> RetryClient<SG> {
101
101
  F: FnMut() -> Fut + Unpin,
102
102
  Fut: Future<Output = Result<R>>,
103
103
  {
104
- FutureRetry::new(factory, TonicErrorHandler::new(rtc, call_name))
104
+ FutureRetry::new(
105
+ factory,
106
+ TonicErrorHandler::new(rtc, RetryConfig::throttle_retry_policy(), call_name),
107
+ )
105
108
  }
106
109
  }
107
110
 
108
111
  #[derive(Debug)]
109
112
  pub(crate) struct TonicErrorHandler<C: Clock> {
110
113
  backoff: ExponentialBackoff<C>,
114
+ throttle_backoff: ExponentialBackoff<C>,
111
115
  max_retries: usize,
112
116
  call_type: CallType,
113
117
  call_name: &'static str,
114
118
  }
115
119
  impl TonicErrorHandler<SystemClock> {
116
- fn new(cfg: RetryConfig, call_name: &'static str) -> Self {
117
- Self::new_with_clock(cfg, call_name, SystemClock::default())
120
+ fn new(cfg: RetryConfig, throttle_cfg: RetryConfig, call_name: &'static str) -> Self {
121
+ Self::new_with_clock(
122
+ cfg,
123
+ throttle_cfg,
124
+ call_name,
125
+ SystemClock::default(),
126
+ SystemClock::default(),
127
+ )
118
128
  }
119
129
  }
120
130
  impl<C> TonicErrorHandler<C>
121
131
  where
122
132
  C: Clock,
123
133
  {
124
- fn new_with_clock(cfg: RetryConfig, call_name: &'static str, clock: C) -> Self {
134
+ fn new_with_clock(
135
+ cfg: RetryConfig,
136
+ throttle_cfg: RetryConfig,
137
+ call_name: &'static str,
138
+ clock: C,
139
+ throttle_clock: C,
140
+ ) -> Self {
125
141
  Self {
126
142
  max_retries: cfg.max_retries,
127
143
  call_type: CallType::from_call_name(call_name),
128
144
  call_name,
129
145
  backoff: cfg.into_exp_backoff(clock),
146
+ throttle_backoff: throttle_cfg.into_exp_backoff(throttle_clock),
130
147
  }
131
148
  }
132
149
  const fn should_log_retry_warning(&self, cur_attempt: usize) -> bool {
@@ -184,10 +201,12 @@ where
184
201
  match self.backoff.next_backoff() {
185
202
  None => RetryPolicy::ForwardError(e), // None is returned when we've ran out of time
186
203
  Some(backoff) => {
187
- if cfg!(test) {
188
- // Allow unit tests to do lots of retries quickly. This does *not* apply
189
- // during integration testing, importantly.
190
- RetryPolicy::WaitRetry(Duration::from_millis(1))
204
+ // We treat ResourceExhausted as a special case and backoff more
205
+ // so we don't overload the server
206
+ if e.code() == Code::ResourceExhausted {
207
+ let extended_backoff =
208
+ backoff.max(self.throttle_backoff.next_backoff().unwrap_or_default());
209
+ RetryPolicy::WaitRetry(extended_backoff)
191
210
  } else {
192
211
  RetryPolicy::WaitRetry(backoff)
193
212
  }
@@ -343,28 +362,14 @@ where
343
362
 
344
363
  async fn signal_with_start_workflow_execution(
345
364
  &self,
346
- input: Option<Payloads>,
347
- task_queue: String,
348
- workflow_id: String,
349
- workflow_type: String,
350
- request_id: Option<String>,
351
- options: WorkflowOptions,
352
- signal_name: String,
353
- signal_input: Option<Payloads>,
354
- signal_header: Option<Header>,
365
+ options: SignalWithStartOptions,
366
+ workflow_options: WorkflowOptions,
355
367
  ) -> Result<SignalWithStartWorkflowExecutionResponse> {
356
368
  retry_call!(
357
369
  self,
358
370
  signal_with_start_workflow_execution,
359
- input.clone(),
360
- task_queue.clone(),
361
- workflow_id.clone(),
362
- workflow_type.clone(),
363
- request_id.clone(),
364
371
  options.clone(),
365
- signal_name.clone(),
366
- signal_input.clone(),
367
- signal_header.clone()
372
+ workflow_options.clone()
368
373
  )
369
374
  }
370
375
 
@@ -454,6 +459,13 @@ where
454
459
  )
455
460
  }
456
461
 
462
+ async fn register_namespace(
463
+ &self,
464
+ options: RegisterNamespaceOptions,
465
+ ) -> Result<RegisterNamespaceResponse> {
466
+ retry_call!(self, register_namespace, options.clone())
467
+ }
468
+
457
469
  async fn list_namespaces(&self) -> Result<ListNamespacesResponse> {
458
470
  retry_call!(self, list_namespaces,)
459
471
  }
@@ -511,6 +523,25 @@ where
511
523
  )
512
524
  }
513
525
 
526
+ async fn list_archived_workflow_executions(
527
+ &self,
528
+ page_size: i32,
529
+ next_page_token: Vec<u8>,
530
+ query: String,
531
+ ) -> Result<ListArchivedWorkflowExecutionsResponse> {
532
+ retry_call!(
533
+ self,
534
+ list_archived_workflow_executions,
535
+ page_size,
536
+ next_page_token.clone(),
537
+ query.clone()
538
+ )
539
+ }
540
+
541
+ async fn get_search_attributes(&self) -> Result<GetSearchAttributesResponse> {
542
+ retry_call!(self, get_search_attributes)
543
+ }
544
+
514
545
  fn get_options(&self) -> &ClientOptions {
515
546
  self.client.get_options()
516
547
  }
@@ -529,6 +560,16 @@ mod tests {
529
560
  use std::{ops::Add, time::Instant};
530
561
  use tonic::Status;
531
562
 
563
+ /// Predefined retry configs with low durations to make unit tests faster
564
+ const TEST_RETRY_CONFIG: RetryConfig = RetryConfig {
565
+ initial_interval: Duration::from_millis(1),
566
+ randomization_factor: 0.0,
567
+ multiplier: 1.1,
568
+ max_interval: Duration::from_millis(2),
569
+ max_elapsed_time: None,
570
+ max_retries: 10,
571
+ };
572
+
532
573
  #[tokio::test]
533
574
  async fn non_retryable_errors() {
534
575
  for code in [
@@ -547,7 +588,7 @@ mod tests {
547
588
  .expect_cancel_activity_task()
548
589
  .returning(move |_, _| Err(Status::new(code, "non-retryable failure")))
549
590
  .times(1);
550
- let retry_client = RetryClient::new(mock_client, Default::default());
591
+ let retry_client = RetryClient::new(mock_client, TEST_RETRY_CONFIG);
551
592
  let result = retry_client
552
593
  .cancel_activity_task(vec![1].into(), None)
553
594
  .await;
@@ -575,12 +616,13 @@ mod tests {
575
616
  Code::Unimplemented,
576
617
  ] {
577
618
  for call_name in [POLL_WORKFLOW_METH_NAME, POLL_ACTIVITY_METH_NAME] {
578
- let retry_cfg = RetryConfig::poll_retry_policy();
579
619
  let mut err_handler = TonicErrorHandler {
580
- max_retries: retry_cfg.max_retries,
620
+ max_retries: TEST_RETRY_CONFIG.max_retries,
581
621
  call_type: CallType::LongPoll,
582
622
  call_name,
583
- backoff: retry_cfg.into_exp_backoff(FixedClock(Instant::now())),
623
+ backoff: TEST_RETRY_CONFIG.into_exp_backoff(FixedClock(Instant::now())),
624
+ throttle_backoff: TEST_RETRY_CONFIG
625
+ .into_exp_backoff(FixedClock(Instant::now())),
584
626
  };
585
627
  let result = err_handler.handle(1, Status::new(code, "Ahh"));
586
628
  assert_matches!(result, RetryPolicy::WaitRetry(_));
@@ -599,12 +641,13 @@ mod tests {
599
641
  async fn long_poll_retryable_errors_never_fatal() {
600
642
  for code in RETRYABLE_ERROR_CODES {
601
643
  for call_name in [POLL_WORKFLOW_METH_NAME, POLL_ACTIVITY_METH_NAME] {
602
- let retry_cfg = RetryConfig::poll_retry_policy();
603
644
  let mut err_handler = TonicErrorHandler {
604
- max_retries: retry_cfg.max_retries,
645
+ max_retries: TEST_RETRY_CONFIG.max_retries,
605
646
  call_type: CallType::LongPoll,
606
647
  call_name,
607
- backoff: retry_cfg.into_exp_backoff(FixedClock(Instant::now())),
648
+ backoff: TEST_RETRY_CONFIG.into_exp_backoff(FixedClock(Instant::now())),
649
+ throttle_backoff: TEST_RETRY_CONFIG
650
+ .into_exp_backoff(FixedClock(Instant::now())),
608
651
  };
609
652
  let result = err_handler.handle(1, Status::new(code, "Ahh"));
610
653
  assert_matches!(result, RetryPolicy::WaitRetry(_));
@@ -621,7 +664,12 @@ mod tests {
621
664
 
622
665
  #[tokio::test]
623
666
  async fn retryable_errors() {
624
- for code in RETRYABLE_ERROR_CODES {
667
+ // Take out retry exhausted since it gets a special policy which would make this take ages
668
+ for code in RETRYABLE_ERROR_CODES
669
+ .iter()
670
+ .copied()
671
+ .filter(|p| p != &Code::ResourceExhausted)
672
+ {
625
673
  let mut mock_client = MockWorkflowClientTrait::new();
626
674
  mock_client
627
675
  .expect_cancel_activity_task()
@@ -632,7 +680,7 @@ mod tests {
632
680
  .returning(|_, _| Ok(Default::default()))
633
681
  .times(1);
634
682
 
635
- let retry_client = RetryClient::new(mock_client, Default::default());
683
+ let retry_client = RetryClient::new(mock_client, TEST_RETRY_CONFIG);
636
684
  let result = retry_client
637
685
  .cancel_activity_task(vec![1].into(), None)
638
686
  .await;
@@ -641,15 +689,53 @@ mod tests {
641
689
  }
642
690
  }
643
691
 
692
+ #[tokio::test]
693
+ async fn retry_resource_exhausted() {
694
+ let mut err_handler = TonicErrorHandler {
695
+ max_retries: TEST_RETRY_CONFIG.max_retries,
696
+ call_type: CallType::Normal,
697
+ call_name: POLL_WORKFLOW_METH_NAME,
698
+ backoff: TEST_RETRY_CONFIG.into_exp_backoff(FixedClock(Instant::now())),
699
+ throttle_backoff: RetryConfig {
700
+ initial_interval: Duration::from_millis(2),
701
+ randomization_factor: 0.0,
702
+ multiplier: 4.0,
703
+ max_interval: Duration::from_millis(10),
704
+ max_elapsed_time: None,
705
+ max_retries: 10,
706
+ }
707
+ .into_exp_backoff(FixedClock(Instant::now())),
708
+ };
709
+ let result = err_handler.handle(1, Status::new(Code::ResourceExhausted, "leave me alone"));
710
+ match result {
711
+ RetryPolicy::WaitRetry(duration) => assert_eq!(duration, Duration::from_millis(2)),
712
+ _ => panic!(),
713
+ }
714
+ err_handler.backoff.clock.0 = err_handler.backoff.clock.0.add(Duration::from_millis(10));
715
+ err_handler.throttle_backoff.clock.0 = err_handler
716
+ .throttle_backoff
717
+ .clock
718
+ .0
719
+ .add(Duration::from_millis(10));
720
+ let result = err_handler.handle(2, Status::new(Code::ResourceExhausted, "leave me alone"));
721
+ match result {
722
+ RetryPolicy::WaitRetry(duration) => assert_eq!(duration, Duration::from_millis(8)),
723
+ _ => panic!(),
724
+ }
725
+ }
726
+
644
727
  #[tokio::test]
645
728
  async fn long_poll_retries_forever() {
646
729
  // A bit odd, but we don't need a real client to test the retry client passes through the
647
730
  // correct retry config
648
- let fake_retry = RetryClient::new((), Default::default());
731
+ let fake_retry = RetryClient::new((), TEST_RETRY_CONFIG);
649
732
  for i in 1..=50 {
650
733
  for call in [POLL_WORKFLOW_METH_NAME, POLL_ACTIVITY_METH_NAME] {
651
- let mut err_handler =
652
- TonicErrorHandler::new(fake_retry.get_retry_config(call), call);
734
+ let mut err_handler = TonicErrorHandler::new(
735
+ fake_retry.get_retry_config(call),
736
+ fake_retry.get_retry_config(call),
737
+ call,
738
+ );
653
739
  let result = err_handler.handle(i, Status::new(Code::Unknown, "Ahh"));
654
740
  assert_matches!(result, RetryPolicy::WaitRetry(_));
655
741
  }
@@ -658,12 +744,15 @@ mod tests {
658
744
 
659
745
  #[tokio::test]
660
746
  async fn long_poll_retries_deadline_exceeded() {
661
- let fake_retry = RetryClient::new((), Default::default());
747
+ let fake_retry = RetryClient::new((), TEST_RETRY_CONFIG);
662
748
  // For some reason we will get cancelled in these situations occasionally (always?) too
663
749
  for code in [Code::Cancelled, Code::DeadlineExceeded] {
664
750
  for call in [POLL_WORKFLOW_METH_NAME, POLL_ACTIVITY_METH_NAME] {
665
- let mut err_handler =
666
- TonicErrorHandler::new(fake_retry.get_retry_config(call), call);
751
+ let mut err_handler = TonicErrorHandler::new(
752
+ fake_retry.get_retry_config(call),
753
+ fake_retry.get_retry_config(call),
754
+ call,
755
+ );
667
756
  for i in 1..=5 {
668
757
  let result = err_handler.handle(i, Status::new(code, "retryable failure"));
669
758
  assert_matches!(result, RetryPolicy::WaitRetry(_));
@@ -12,15 +12,20 @@ categories = ["development-tools"]
12
12
 
13
13
  [lib]
14
14
 
15
+ [features]
16
+ # Do not enable this feature when building production SDKs. If we ever want a user in the field to
17
+ # record WF input data, we can build them a custom SDK or they can build - it adds significant extra
18
+ # code size in the form of [de]serializers.
19
+ save_wf_inputs = ["rmp-serde", "temporal-sdk-core-protos/serde_serialize"]
20
+
15
21
  [dependencies]
16
22
  anyhow = "1.0"
17
23
  arc-swap = "1.3"
18
- async-channel = "1.6"
19
24
  async-trait = "0.1"
20
- base64 = "0.13"
25
+ base64 = "0.21"
21
26
  crossbeam = "0.8"
22
27
  dashmap = "5.0"
23
- derive_builder = "0.11"
28
+ derive_builder = "0.12"
24
29
  derive_more = "0.99"
25
30
  enum_dispatch = "0.3"
26
31
  flate2 = "1.0"
@@ -31,21 +36,22 @@ http = "0.2"
31
36
  hyper = "0.14"
32
37
  itertools = "0.10"
33
38
  lazy_static = "1.4"
34
- log = "0.4"
35
- lru = "0.8"
39
+ lru = "0.9"
36
40
  mockall = "0.11"
37
- nix = "0.25"
41
+ nix = "0.26"
38
42
  once_cell = "1.5"
39
43
  opentelemetry = { version = "0.18", features = ["rt-tokio"] }
40
44
  opentelemetry-otlp = { version = "0.11", features = ["tokio", "metrics"] }
41
45
  opentelemetry-prometheus = "0.11"
42
46
  parking_lot = { version = "0.12", features = ["send_guard"] }
47
+ pin-project = "1.0"
43
48
  prometheus = "0.13"
44
49
  prost = "0.11"
45
- prost-types = "0.11"
50
+ prost-types = { version = "0.4", package = "prost-wkt-types" }
46
51
  rand = "0.8.3"
47
52
  reqwest = { version = "0.11", features = ["json", "stream", "rustls-tls", "tokio-rustls"], default-features = false }
48
- ringbuf = "0.2"
53
+ ringbuf = "0.3"
54
+ rmp-serde = { version = "1.1", optional = true }
49
55
  serde = "1.0"
50
56
  serde_json = "1.0"
51
57
  siphasher = "0.3"
@@ -56,13 +62,13 @@ tokio = { version = "1.1", features = ["rt", "rt-multi-thread", "parking_lot", "
56
62
  tokio-util = { version = "0.7", features = ["io", "io-util"] }
57
63
  tokio-stream = "0.1"
58
64
  tonic = { version = "0.8", features = ["tls", "tls-roots"] }
59
- tracing = { version = "0.1", features = ["log-always"] }
65
+ tracing = "0.1"
60
66
  tracing-futures = "0.2"
61
67
  tracing-opentelemetry = "0.18"
62
- tracing-subscriber = { version = "0.3", features = ["parking_lot", "env-filter"] }
68
+ tracing-subscriber = { version = "0.3", features = ["parking_lot", "env-filter", "registry"] }
63
69
  url = "2.2"
64
70
  uuid = { version = "1.1", features = ["v4"] }
65
- zip = "0.6"
71
+ zip = "0.6.3"
66
72
 
67
73
  # 1st party local deps
68
74
  [dependencies.temporal-sdk-core-api]
@@ -85,8 +91,9 @@ version = "0.1"
85
91
  [dev-dependencies]
86
92
  assert_matches = "1.4"
87
93
  bimap = "0.6.1"
94
+ clap = { version = "4.0", features = ["derive"] }
88
95
  criterion = "0.4"
89
- rstest = "0.15"
96
+ rstest = "0.16"
90
97
  temporal-sdk-core-test-utils = { path = "../test-utils" }
91
98
  temporal-sdk = { path = "../sdk" }
92
99
 
@@ -101,9 +108,10 @@ path = "../tests/main.rs"
101
108
  test = false
102
109
 
103
110
  [[test]]
104
- name = "load_tests"
105
- path = "../tests/load_tests.rs"
111
+ name = "heavy_tests"
112
+ path = "../tests/heavy_tests.rs"
106
113
  test = false
114
+ required-features = ["save_wf_inputs"]
107
115
 
108
116
  [[bench]]
109
117
  name = "workflow_replay"
@@ -113,4 +121,9 @@ harness = false
113
121
  # the dev-dependencies, which we want.
114
122
  [[example]]
115
123
  name = "integ_runner"
116
- path = "../tests/runner.rs"
124
+ path = "../tests/runner.rs"
125
+
126
+ [[example]]
127
+ name = "wf_input_replay"
128
+ path = "../tests/wf_input_replay.rs"
129
+ required-features = ["save_wf_inputs"]
@@ -1,29 +1,30 @@
1
1
  use criterion::{criterion_group, criterion_main, Criterion};
2
2
  use futures::StreamExt;
3
3
  use std::time::Duration;
4
- use temporal_sdk::{WfContext, Worker, WorkflowFunction};
5
- use temporal_sdk_core::{telemetry_init, TelemetryOptionsBuilder};
4
+ use temporal_sdk::{WfContext, WorkflowFunction};
5
+ use temporal_sdk_core::replay::HistoryForReplay;
6
6
  use temporal_sdk_core_protos::DEFAULT_WORKFLOW_TYPE;
7
- use temporal_sdk_core_test_utils::{canned_histories, init_core_replay_preloaded};
7
+ use temporal_sdk_core_test_utils::{canned_histories, replay_sdk_worker};
8
8
 
9
9
  pub fn criterion_benchmark(c: &mut Criterion) {
10
10
  let tokio_runtime = tokio::runtime::Builder::new_current_thread()
11
11
  .enable_time()
12
12
  .build()
13
13
  .unwrap();
14
- telemetry_init(&TelemetryOptionsBuilder::default().build().unwrap()).unwrap();
15
14
  let _g = tokio_runtime.enter();
16
15
 
17
16
  let num_timers = 10;
18
17
  let t = canned_histories::long_sequential_timers(num_timers as usize);
19
- let hist = t.get_full_history_info().unwrap().into();
18
+ let hist = HistoryForReplay::new(
19
+ t.get_full_history_info().unwrap().into(),
20
+ "whatever".to_string(),
21
+ );
20
22
 
21
23
  c.bench_function("Small history replay", |b| {
22
24
  b.iter(|| {
23
25
  tokio_runtime.block_on(async {
24
26
  let func = timers_wf(num_timers);
25
- let (worker, _) = init_core_replay_preloaded("replay_bench", &hist);
26
- let mut worker = Worker::new_from_core(worker, "replay_bench".to_string());
27
+ let mut worker = replay_sdk_worker([hist.clone()]);
27
28
  worker.register_wf(DEFAULT_WORKFLOW_TYPE, func);
28
29
  worker.run().await.unwrap();
29
30
  })
@@ -32,14 +33,16 @@ pub fn criterion_benchmark(c: &mut Criterion) {
32
33
 
33
34
  let num_tasks = 50;
34
35
  let t = canned_histories::lots_of_big_signals(num_tasks);
35
- let hist = t.get_full_history_info().unwrap().into();
36
+ let hist = HistoryForReplay::new(
37
+ t.get_full_history_info().unwrap().into(),
38
+ "whatever".to_string(),
39
+ );
36
40
 
37
41
  c.bench_function("Large payloads history replay", |b| {
38
42
  b.iter(|| {
39
43
  tokio_runtime.block_on(async {
40
44
  let func = big_signals_wf(num_tasks);
41
- let (worker, _) = init_core_replay_preloaded("large_hist_bench", &hist);
42
- let mut worker = Worker::new_from_core(worker, "large_hist_bench".to_string());
45
+ let mut worker = replay_sdk_worker([hist.clone()]);
43
46
  worker.register_wf(DEFAULT_WORKFLOW_TYPE, func);
44
47
  worker.run().await.unwrap();
45
48
  })