@temporalio/core-bridge 1.13.1 → 1.14.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 (422) hide show
  1. package/Cargo.lock +350 -436
  2. package/Cargo.toml +14 -13
  3. package/{sdk-core/fsm/rustfsm_procmacro/LICENSE.txt → LICENSE} +5 -5
  4. package/README.md +0 -1
  5. package/bridge-macros/Cargo.toml +16 -0
  6. package/bridge-macros/src/derive_js_function.rs +126 -0
  7. package/bridge-macros/src/derive_tryfromjs.rs +138 -0
  8. package/bridge-macros/src/derive_tryintojs.rs +151 -0
  9. package/bridge-macros/src/lib.rs +42 -0
  10. package/lib/native.d.ts +23 -9
  11. package/package.json +6 -5
  12. package/releases/aarch64-apple-darwin/index.node +0 -0
  13. package/releases/aarch64-unknown-linux-gnu/index.node +0 -0
  14. package/releases/x86_64-apple-darwin/index.node +0 -0
  15. package/releases/x86_64-pc-windows-msvc/index.node +0 -0
  16. package/releases/x86_64-unknown-linux-gnu/index.node +0 -0
  17. package/sdk-core/.cargo/config.toml +78 -12
  18. package/sdk-core/.clippy.toml +1 -0
  19. package/sdk-core/.github/workflows/heavy.yml +2 -0
  20. package/sdk-core/.github/workflows/per-pr.yml +90 -21
  21. package/sdk-core/AGENTS.md +17 -19
  22. package/sdk-core/ARCHITECTURE.md +44 -48
  23. package/sdk-core/Cargo.toml +25 -7
  24. package/sdk-core/README.md +16 -15
  25. package/sdk-core/arch_docs/diagrams/TimerMachine_Coverage.puml +14 -0
  26. package/sdk-core/arch_docs/diagrams/deps.svg +102 -0
  27. package/sdk-core/arch_docs/diagrams/initial_event_history.png +0 -0
  28. package/sdk-core/arch_docs/sdks_intro.md +299 -0
  29. package/sdk-core/{client → crates/client}/Cargo.toml +15 -16
  30. package/sdk-core/{client → crates/client}/src/callback_based.rs +1 -2
  31. package/sdk-core/{client → crates/client}/src/lib.rs +594 -457
  32. package/sdk-core/{client → crates/client}/src/metrics.rs +32 -8
  33. package/sdk-core/crates/client/src/proxy.rs +209 -0
  34. package/sdk-core/{client → crates/client}/src/raw.rs +648 -328
  35. package/sdk-core/crates/client/src/replaceable.rs +253 -0
  36. package/sdk-core/crates/client/src/request_extensions.rs +40 -0
  37. package/sdk-core/{client → crates/client}/src/retry.rs +32 -22
  38. package/sdk-core/crates/client/src/worker/mod.rs +1468 -0
  39. package/sdk-core/{client → crates/client}/src/workflow_handle/mod.rs +24 -21
  40. package/sdk-core/{core-api → crates/common}/Cargo.toml +21 -12
  41. package/sdk-core/{sdk-core-protos → crates/common}/build.rs +10 -23
  42. package/sdk-core/crates/common/protos/api_cloud_upstream/VERSION +1 -0
  43. package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/temporal/api/cloud/account/v1/message.proto +18 -0
  44. package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/temporal/api/cloud/cloudservice/v1/request_response.proto +38 -11
  45. package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/temporal/api/cloud/cloudservice/v1/service.proto +21 -4
  46. package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/temporal/api/cloud/operation/v1/message.proto +6 -6
  47. package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/temporal/api/cloud/sink/v1/message.proto +22 -0
  48. package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/.github/workflows/create-release.yml +13 -0
  49. package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/openapi/openapiv2.json +254 -5
  50. package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/openapi/openapiv3.yaml +234 -5
  51. package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/common/v1/message.proto +1 -1
  52. package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/deployment/v1/message.proto +6 -0
  53. package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/namespace/v1/message.proto +6 -2
  54. package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +60 -2
  55. package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +30 -6
  56. package/sdk-core/{sdk-core-protos → crates/common}/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +2 -0
  57. package/sdk-core/{core-api → crates/common}/src/envconfig.rs +155 -56
  58. package/sdk-core/{core-api → crates/common}/src/errors.rs +8 -1
  59. package/sdk-core/{fsm/rustfsm_trait/src/lib.rs → crates/common/src/fsm_trait.rs} +1 -27
  60. package/sdk-core/{core-api → crates/common}/src/lib.rs +92 -9
  61. package/sdk-core/{test-utils/src → crates/common/src/protos}/canned_histories.rs +5 -5
  62. package/sdk-core/{sdk-core-protos/src → crates/common/src/protos}/history_builder.rs +3 -3
  63. package/sdk-core/{sdk-core-protos/src → crates/common/src/protos}/history_info.rs +2 -2
  64. package/sdk-core/{sdk-core-protos/src/lib.rs → crates/common/src/protos/mod.rs} +43 -26
  65. package/sdk-core/crates/common/src/protos/test_utils.rs +89 -0
  66. package/sdk-core/{sdk-core-protos/src → crates/common/src/protos}/utilities.rs +14 -5
  67. package/sdk-core/{core-api → crates/common}/src/telemetry/metrics.rs +449 -51
  68. package/sdk-core/{core-api → crates/common}/src/telemetry.rs +16 -1
  69. package/sdk-core/{core-api → crates/common}/src/worker.rs +112 -18
  70. package/sdk-core/crates/common/tests/worker_task_types_test.rs +129 -0
  71. package/sdk-core/crates/macros/Cargo.toml +23 -0
  72. package/sdk-core/{fsm/rustfsm_procmacro → crates/macros}/src/lib.rs +12 -12
  73. package/sdk-core/{sdk → crates/sdk}/Cargo.toml +18 -12
  74. package/sdk-core/{sdk → crates/sdk}/src/activity_context.rs +9 -7
  75. package/sdk-core/{sdk → crates/sdk}/src/app_data.rs +1 -1
  76. package/sdk-core/{sdk → crates/sdk}/src/interceptors.rs +2 -5
  77. package/sdk-core/{sdk → crates/sdk}/src/lib.rs +43 -42
  78. package/sdk-core/{sdk → crates/sdk}/src/workflow_context/options.rs +12 -3
  79. package/sdk-core/{sdk → crates/sdk}/src/workflow_context.rs +21 -19
  80. package/sdk-core/{sdk → crates/sdk}/src/workflow_future.rs +2 -2
  81. package/sdk-core/crates/sdk-core/Cargo.toml +222 -0
  82. package/sdk-core/{core/benches/workflow_replay.rs → crates/sdk-core/benches/workflow_replay_bench.rs} +15 -10
  83. package/sdk-core/crates/sdk-core/machine_coverage/ActivityMachine_Coverage.puml +32 -0
  84. package/sdk-core/crates/sdk-core/machine_coverage/CancelExternalMachine_Coverage.puml +9 -0
  85. package/sdk-core/crates/sdk-core/machine_coverage/CancelWorkflowMachine_Coverage.puml +6 -0
  86. package/sdk-core/crates/sdk-core/machine_coverage/ChildWorkflowMachine_Coverage.puml +27 -0
  87. package/sdk-core/crates/sdk-core/machine_coverage/CompleteWorkflowMachine_Coverage.puml +6 -0
  88. package/sdk-core/crates/sdk-core/machine_coverage/ContinueAsNewWorkflowMachine_Coverage.puml +6 -0
  89. package/sdk-core/crates/sdk-core/machine_coverage/FailWorkflowMachine_Coverage.puml +6 -0
  90. package/sdk-core/crates/sdk-core/machine_coverage/LocalActivityMachine_Coverage.puml +23 -0
  91. package/sdk-core/crates/sdk-core/machine_coverage/ModifyWorkflowPropertiesMachine_Coverage.puml +5 -0
  92. package/sdk-core/crates/sdk-core/machine_coverage/PatchMachine_Coverage.puml +8 -0
  93. package/sdk-core/crates/sdk-core/machine_coverage/SignalExternalMachine_Coverage.puml +12 -0
  94. package/sdk-core/crates/sdk-core/machine_coverage/TimerMachine_Coverage.puml +13 -0
  95. package/sdk-core/crates/sdk-core/machine_coverage/UpdateMachine_Coverage.puml +19 -0
  96. package/sdk-core/crates/sdk-core/machine_coverage/UpsertSearchAttributesMachine_Coverage.puml +5 -0
  97. package/sdk-core/crates/sdk-core/machine_coverage/WorkflowTaskMachine_Coverage.puml +11 -0
  98. package/sdk-core/{core → crates/sdk-core}/src/abstractions.rs +62 -6
  99. package/sdk-core/crates/sdk-core/src/antithesis.rs +60 -0
  100. package/sdk-core/{core → crates/sdk-core}/src/core_tests/activity_tasks.rs +85 -250
  101. package/sdk-core/{core → crates/sdk-core}/src/core_tests/mod.rs +13 -16
  102. package/sdk-core/{core → crates/sdk-core}/src/core_tests/queries.rs +25 -24
  103. package/sdk-core/{core → crates/sdk-core}/src/core_tests/replay_flag.rs +11 -68
  104. package/sdk-core/{core → crates/sdk-core}/src/core_tests/updates.rs +21 -20
  105. package/sdk-core/{core → crates/sdk-core}/src/core_tests/workers.rs +242 -16
  106. package/sdk-core/{core → crates/sdk-core}/src/core_tests/workflow_cancels.rs +10 -7
  107. package/sdk-core/{core → crates/sdk-core}/src/core_tests/workflow_tasks.rs +150 -326
  108. package/sdk-core/{core → crates/sdk-core}/src/debug_client.rs +1 -1
  109. package/sdk-core/{core → crates/sdk-core}/src/ephemeral_server/mod.rs +18 -6
  110. package/sdk-core/{test-utils → crates/sdk-core}/src/histfetch.rs +9 -4
  111. package/sdk-core/{core → crates/sdk-core}/src/internal_flags.rs +15 -4
  112. package/sdk-core/{core → crates/sdk-core}/src/lib.rs +128 -72
  113. package/sdk-core/{core → crates/sdk-core}/src/pollers/mod.rs +13 -11
  114. package/sdk-core/{core → crates/sdk-core}/src/pollers/poll_buffer.rs +53 -18
  115. package/sdk-core/{core → crates/sdk-core}/src/protosext/mod.rs +14 -6
  116. package/sdk-core/{core → crates/sdk-core}/src/protosext/protocol_messages.rs +5 -12
  117. package/sdk-core/{core → crates/sdk-core}/src/replay/mod.rs +14 -11
  118. package/sdk-core/crates/sdk-core/src/retry_logic.rs +390 -0
  119. package/sdk-core/{core → crates/sdk-core}/src/telemetry/log_export.rs +2 -2
  120. package/sdk-core/{core → crates/sdk-core}/src/telemetry/metrics.rs +80 -33
  121. package/sdk-core/{core → crates/sdk-core}/src/telemetry/mod.rs +12 -6
  122. package/sdk-core/{core → crates/sdk-core}/src/telemetry/otel.rs +1 -1
  123. package/sdk-core/{core → crates/sdk-core}/src/telemetry/prometheus_meter.rs +14 -14
  124. package/sdk-core/{core → crates/sdk-core}/src/telemetry/prometheus_server.rs +2 -2
  125. package/sdk-core/{core/src/test_help/mod.rs → crates/sdk-core/src/test_help/integ_helpers.rs} +284 -329
  126. package/sdk-core/crates/sdk-core/src/test_help/mod.rs +13 -0
  127. package/sdk-core/crates/sdk-core/src/test_help/unit_helpers.rs +220 -0
  128. package/sdk-core/{core → crates/sdk-core}/src/worker/activities/activity_heartbeat_manager.rs +44 -8
  129. package/sdk-core/{core → crates/sdk-core}/src/worker/activities/local_activities.rs +33 -31
  130. package/sdk-core/{core → crates/sdk-core}/src/worker/activities.rs +31 -15
  131. package/sdk-core/{core → crates/sdk-core}/src/worker/client/mocks.rs +28 -15
  132. package/sdk-core/{core → crates/sdk-core}/src/worker/client.rs +275 -145
  133. package/sdk-core/crates/sdk-core/src/worker/heartbeat.rs +246 -0
  134. package/sdk-core/crates/sdk-core/src/worker/mod.rs +1462 -0
  135. package/sdk-core/{core → crates/sdk-core}/src/worker/nexus.rs +24 -12
  136. package/sdk-core/{core → crates/sdk-core}/src/worker/slot_provider.rs +18 -10
  137. package/sdk-core/{core → crates/sdk-core}/src/worker/tuner/fixed_size.rs +5 -1
  138. package/sdk-core/{core → crates/sdk-core}/src/worker/tuner/resource_based.rs +453 -57
  139. package/sdk-core/{core → crates/sdk-core}/src/worker/tuner.rs +179 -3
  140. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/driven_workflow.rs +1 -1
  141. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/history_update.rs +5 -267
  142. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/activity_state_machine.rs +147 -90
  143. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/cancel_external_state_machine.rs +8 -91
  144. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/cancel_nexus_op_state_machine.rs +14 -12
  145. package/sdk-core/crates/sdk-core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +97 -0
  146. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/child_workflow_state_machine.rs +32 -229
  147. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/complete_workflow_state_machine.rs +13 -8
  148. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/continue_as_new_workflow_state_machine.rs +6 -50
  149. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/fail_workflow_state_machine.rs +6 -7
  150. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/local_activity_state_machine.rs +39 -584
  151. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/mod.rs +22 -17
  152. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/modify_workflow_properties_state_machine.rs +4 -74
  153. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/nexus_operation_state_machine.rs +118 -21
  154. package/sdk-core/crates/sdk-core/src/worker/workflow/machines/patch_state_machine.rs +273 -0
  155. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/signal_external_state_machine.rs +9 -151
  156. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/timer_state_machine.rs +27 -132
  157. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/transition_coverage.rs +1 -2
  158. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/update_state_machine.rs +19 -13
  159. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +25 -80
  160. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/workflow_machines/local_acts.rs +1 -1
  161. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/workflow_machines.rs +68 -72
  162. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/workflow_task_state_machine.rs +13 -15
  163. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/managed_run.rs +55 -37
  164. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/mod.rs +171 -61
  165. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/run_cache.rs +10 -7
  166. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/wft_extraction.rs +4 -2
  167. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/wft_poller.rs +15 -4
  168. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/workflow_stream.rs +38 -19
  169. package/sdk-core/crates/sdk-core/tests/c_bridge_smoke_test.c +10 -0
  170. package/sdk-core/crates/sdk-core/tests/cloud_tests.rs +25 -0
  171. package/sdk-core/crates/sdk-core/tests/common/fake_grpc_server.rs +106 -0
  172. package/sdk-core/crates/sdk-core/tests/common/http_proxy.rs +134 -0
  173. package/sdk-core/{test-utils/src/lib.rs → crates/sdk-core/tests/common/mod.rs} +286 -334
  174. package/sdk-core/{test-utils/src → crates/sdk-core/tests/common}/workflows.rs +6 -4
  175. package/sdk-core/crates/sdk-core/tests/fsm_procmacro.rs +6 -0
  176. package/sdk-core/{fsm/rustfsm_procmacro/tests/trybuild → crates/sdk-core/tests/fsm_trybuild}/dupe_transitions_fail.rs +1 -3
  177. package/sdk-core/crates/sdk-core/tests/fsm_trybuild/dupe_transitions_fail.stderr +12 -0
  178. package/sdk-core/{fsm/rustfsm_procmacro/tests/trybuild → crates/sdk-core/tests/fsm_trybuild}/dynamic_dest_pass.rs +2 -4
  179. package/sdk-core/{fsm/rustfsm_procmacro/tests/trybuild → crates/sdk-core/tests/fsm_trybuild}/forgot_name_fail.rs +1 -3
  180. package/sdk-core/{fsm/rustfsm_procmacro/tests/trybuild → crates/sdk-core/tests/fsm_trybuild}/forgot_name_fail.stderr +4 -4
  181. package/sdk-core/{fsm/rustfsm_procmacro/tests/trybuild → crates/sdk-core/tests/fsm_trybuild}/handler_arg_pass.rs +2 -4
  182. package/sdk-core/{fsm/rustfsm_procmacro/tests/trybuild → crates/sdk-core/tests/fsm_trybuild}/handler_pass.rs +2 -4
  183. package/sdk-core/{fsm/rustfsm_procmacro/tests/trybuild → crates/sdk-core/tests/fsm_trybuild}/medium_complex_pass.rs +2 -4
  184. package/sdk-core/{fsm/rustfsm_procmacro/tests/trybuild → crates/sdk-core/tests/fsm_trybuild}/no_handle_conversions_require_into_fail.rs +2 -4
  185. package/sdk-core/crates/sdk-core/tests/fsm_trybuild/no_handle_conversions_require_into_fail.stderr +15 -0
  186. package/sdk-core/{fsm/rustfsm_procmacro/tests/trybuild → crates/sdk-core/tests/fsm_trybuild}/simple_pass.rs +2 -4
  187. package/sdk-core/{fsm/rustfsm_procmacro/tests/trybuild → crates/sdk-core/tests/fsm_trybuild}/struct_event_variant_fail.rs +1 -3
  188. package/sdk-core/crates/sdk-core/tests/fsm_trybuild/struct_event_variant_fail.stderr +5 -0
  189. package/sdk-core/{fsm/rustfsm_procmacro/tests/trybuild → crates/sdk-core/tests/fsm_trybuild}/tuple_more_item_event_variant_fail.rs +1 -3
  190. package/sdk-core/crates/sdk-core/tests/fsm_trybuild/tuple_more_item_event_variant_fail.stderr +5 -0
  191. package/sdk-core/{fsm/rustfsm_procmacro/tests/trybuild → crates/sdk-core/tests/fsm_trybuild}/tuple_zero_item_event_variant_fail.rs +1 -3
  192. package/sdk-core/crates/sdk-core/tests/fsm_trybuild/tuple_zero_item_event_variant_fail.stderr +5 -0
  193. package/sdk-core/{tests → crates/sdk-core/tests}/global_metric_tests.rs +22 -22
  194. package/sdk-core/{tests → crates/sdk-core/tests/heavy_tests}/fuzzy_workflow.rs +4 -4
  195. package/sdk-core/{tests → crates/sdk-core/tests}/heavy_tests.rs +25 -14
  196. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/activity_functions.rs +1 -1
  197. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/client_tests.rs +115 -123
  198. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/ephemeral_server_tests.rs +19 -15
  199. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/heartbeat_tests.rs +24 -20
  200. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/metrics_tests.rs +241 -67
  201. package/sdk-core/crates/sdk-core/tests/integ_tests/pagination_tests.rs +273 -0
  202. package/sdk-core/crates/sdk-core/tests/integ_tests/polling_tests.rs +513 -0
  203. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/queries_tests.rs +13 -11
  204. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/update_tests.rs +47 -29
  205. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/visibility_tests.rs +49 -27
  206. package/sdk-core/crates/sdk-core/tests/integ_tests/worker_heartbeat_tests.rs +1061 -0
  207. package/sdk-core/crates/sdk-core/tests/integ_tests/worker_tests.rs +920 -0
  208. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/worker_versioning_tests.rs +58 -40
  209. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/activities.rs +268 -30
  210. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/appdata_propagation.rs +4 -4
  211. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +155 -0
  212. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +121 -0
  213. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +717 -0
  214. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +109 -0
  215. package/sdk-core/{core/src/core_tests → crates/sdk-core/tests/integ_tests/workflow_tests}/determinism.rs +108 -20
  216. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/eager.rs +10 -5
  217. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +2884 -0
  218. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/modify_wf_properties.rs +119 -0
  219. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/nexus.rs +174 -46
  220. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/patches.rs +740 -0
  221. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/replay.rs +78 -27
  222. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/resets.rs +46 -28
  223. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/signals.rs +294 -0
  224. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/stickyness.rs +9 -8
  225. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/timers.rs +249 -0
  226. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/upsert_search_attrs.rs +72 -7
  227. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests.rs +97 -33
  228. package/sdk-core/{tests → crates/sdk-core/tests}/main.rs +40 -25
  229. package/sdk-core/{tests → crates/sdk-core/tests}/manual_tests.rs +25 -15
  230. package/sdk-core/{tests → crates/sdk-core/tests}/runner.rs +23 -41
  231. package/sdk-core/{tests → crates/sdk-core/tests}/shared_tests/mod.rs +11 -6
  232. package/sdk-core/{tests → crates/sdk-core/tests}/shared_tests/priority.rs +6 -6
  233. package/sdk-core/crates/sdk-core-c-bridge/Cargo.toml +59 -0
  234. package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/include/temporal-sdk-core-c-bridge.h +215 -44
  235. package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/src/client.rs +515 -214
  236. package/sdk-core/crates/sdk-core-c-bridge/src/envconfig.rs +314 -0
  237. package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/src/lib.rs +2 -1
  238. package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/src/metric.rs +1 -1
  239. package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/src/random.rs +4 -4
  240. package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/src/runtime.rs +42 -28
  241. package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/src/testing.rs +2 -5
  242. package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/src/tests/context.rs +42 -41
  243. package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/src/tests/mod.rs +38 -34
  244. package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/src/tests/utils.rs +10 -11
  245. package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/src/worker.rs +427 -121
  246. package/sdk-core/docker-cgroup-tests.sh +24 -0
  247. package/sdk-core/{docker → etc/docker}/docker-compose-ci.yaml +9 -9
  248. package/sdk-core/{docker → etc/docker}/docker-compose-telem.yaml +11 -11
  249. package/sdk-core/{docker → etc/docker}/docker-compose.yaml +8 -8
  250. package/sdk-core/{integ-with-otel.sh → etc/integ-with-otel.sh} +1 -1
  251. package/sdk-core/etc/regen-depgraph.sh +2 -2
  252. package/src/client.rs +117 -49
  253. package/src/helpers/callbacks.rs +4 -4
  254. package/src/helpers/errors.rs +7 -1
  255. package/src/helpers/handles.rs +1 -0
  256. package/src/helpers/try_from_js.rs +5 -4
  257. package/src/lib.rs +3 -2
  258. package/src/logs.rs +1 -1
  259. package/src/metrics.rs +6 -3
  260. package/src/runtime.rs +41 -24
  261. package/src/testing.rs +3 -3
  262. package/src/worker.rs +77 -44
  263. package/ts/native.ts +26 -9
  264. package/LICENSE.md +0 -23
  265. package/sdk-core/arch_docs/diagrams/workflow_internals.svg +0 -1
  266. package/sdk-core/client/src/proxy.rs +0 -90
  267. package/sdk-core/client/src/worker_registry/mod.rs +0 -266
  268. package/sdk-core/core/Cargo.toml +0 -146
  269. package/sdk-core/core/src/core_tests/child_workflows.rs +0 -281
  270. package/sdk-core/core/src/core_tests/local_activities.rs +0 -1442
  271. package/sdk-core/core/src/retry_logic.rs +0 -224
  272. package/sdk-core/core/src/worker/heartbeat.rs +0 -231
  273. package/sdk-core/core/src/worker/mod.rs +0 -980
  274. package/sdk-core/core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +0 -165
  275. package/sdk-core/core/src/worker/workflow/machines/patch_state_machine.rs +0 -801
  276. package/sdk-core/core-c-bridge/Cargo.toml +0 -51
  277. package/sdk-core/etc/deps.svg +0 -162
  278. package/sdk-core/fsm/Cargo.toml +0 -21
  279. package/sdk-core/fsm/README.md +0 -3
  280. package/sdk-core/fsm/rustfsm_procmacro/Cargo.toml +0 -27
  281. package/sdk-core/fsm/rustfsm_procmacro/tests/progress.rs +0 -8
  282. package/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dupe_transitions_fail.stderr +0 -12
  283. package/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.stderr +0 -15
  284. package/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/struct_event_variant_fail.stderr +0 -5
  285. package/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_more_item_event_variant_fail.stderr +0 -5
  286. package/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_zero_item_event_variant_fail.stderr +0 -5
  287. package/sdk-core/fsm/rustfsm_trait/Cargo.toml +0 -14
  288. package/sdk-core/fsm/rustfsm_trait/LICENSE.txt +0 -21
  289. package/sdk-core/fsm/src/lib.rs +0 -2
  290. package/sdk-core/sdk-core-protos/Cargo.toml +0 -37
  291. package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/VERSION +0 -1
  292. package/sdk-core/test-utils/Cargo.toml +0 -38
  293. package/sdk-core/test-utils/src/interceptors.rs +0 -46
  294. package/sdk-core/tests/cloud_tests.rs +0 -23
  295. package/sdk-core/tests/integ_tests/polling_tests.rs +0 -294
  296. package/sdk-core/tests/integ_tests/worker_tests.rs +0 -203
  297. package/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +0 -74
  298. package/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +0 -57
  299. package/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +0 -246
  300. package/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +0 -65
  301. package/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +0 -85
  302. package/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +0 -908
  303. package/sdk-core/tests/integ_tests/workflow_tests/modify_wf_properties.rs +0 -51
  304. package/sdk-core/tests/integ_tests/workflow_tests/patches.rs +0 -206
  305. package/sdk-core/tests/integ_tests/workflow_tests/signals.rs +0 -164
  306. package/sdk-core/tests/integ_tests/workflow_tests/timers.rs +0 -123
  307. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/.github/workflows/build.yaml +0 -0
  308. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/.github/workflows/push-to-buf.yml +0 -0
  309. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/CODEOWNERS +0 -0
  310. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/LICENSE +0 -0
  311. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/Makefile +0 -0
  312. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/README.md +0 -0
  313. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/buf.gen.yaml +0 -0
  314. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/buf.lock +0 -0
  315. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/buf.yaml +0 -0
  316. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/temporal/api/cloud/connectivityrule/v1/message.proto +0 -0
  317. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/temporal/api/cloud/identity/v1/message.proto +0 -0
  318. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/temporal/api/cloud/namespace/v1/message.proto +0 -0
  319. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/temporal/api/cloud/nexus/v1/message.proto +0 -0
  320. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/temporal/api/cloud/region/v1/message.proto +0 -0
  321. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/temporal/api/cloud/resource/v1/message.proto +0 -0
  322. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/temporal/api/cloud/usage/v1/message.proto +0 -0
  323. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/.github/CODEOWNERS +0 -0
  324. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  325. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/.github/workflows/ci.yml +0 -0
  326. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/.github/workflows/publish-docs.yml +0 -0
  327. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/.github/workflows/push-to-buf.yml +0 -0
  328. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/.github/workflows/trigger-api-go-delete-release.yml +0 -0
  329. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/.github/workflows/trigger-api-go-publish-release.yml +0 -0
  330. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/.github/workflows/trigger-api-go-update.yml +0 -0
  331. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/LICENSE +0 -0
  332. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/Makefile +0 -0
  333. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/README.md +0 -0
  334. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/api-linter.yaml +0 -0
  335. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/buf.gen.yaml +0 -0
  336. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/buf.lock +0 -0
  337. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/buf.yaml +0 -0
  338. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/google/api/annotations.proto +0 -0
  339. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/google/api/http.proto +0 -0
  340. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/google/protobuf/any.proto +0 -0
  341. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/google/protobuf/descriptor.proto +0 -0
  342. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/google/protobuf/duration.proto +0 -0
  343. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/google/protobuf/empty.proto +0 -0
  344. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/google/protobuf/struct.proto +0 -0
  345. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/google/protobuf/timestamp.proto +0 -0
  346. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/google/protobuf/wrappers.proto +0 -0
  347. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/openapi/payload_description.txt +0 -0
  348. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/activity/v1/message.proto +0 -0
  349. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/batch/v1/message.proto +0 -0
  350. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/command/v1/message.proto +0 -0
  351. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/batch_operation.proto +0 -0
  352. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/command_type.proto +0 -0
  353. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/common.proto +0 -0
  354. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/deployment.proto +0 -0
  355. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/event_type.proto +0 -0
  356. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +0 -0
  357. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/namespace.proto +0 -0
  358. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/nexus.proto +0 -0
  359. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/query.proto +0 -0
  360. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/reset.proto +0 -0
  361. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/schedule.proto +0 -0
  362. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +0 -0
  363. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/update.proto +0 -0
  364. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/workflow.proto +0 -0
  365. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/errordetails/v1/message.proto +0 -0
  366. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/export/v1/message.proto +0 -0
  367. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/failure/v1/message.proto +0 -0
  368. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/filter/v1/message.proto +0 -0
  369. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/history/v1/message.proto +0 -0
  370. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/nexus/v1/message.proto +0 -0
  371. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +0 -0
  372. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/operatorservice/v1/service.proto +0 -0
  373. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/protocol/v1/message.proto +0 -0
  374. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/query/v1/message.proto +0 -0
  375. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/replication/v1/message.proto +0 -0
  376. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/rules/v1/message.proto +0 -0
  377. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/schedule/v1/message.proto +0 -0
  378. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/sdk/v1/enhanced_stack_trace.proto +0 -0
  379. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/sdk/v1/task_complete_metadata.proto +0 -0
  380. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/sdk/v1/user_metadata.proto +0 -0
  381. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/sdk/v1/worker_config.proto +0 -0
  382. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/sdk/v1/workflow_metadata.proto +0 -0
  383. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +0 -0
  384. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/update/v1/message.proto +0 -0
  385. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/version/v1/message.proto +0 -0
  386. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/worker/v1/message.proto +0 -0
  387. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/workflow/v1/message.proto +0 -0
  388. /package/sdk-core/{sdk-core-protos → crates/common}/protos/google/rpc/status.proto +0 -0
  389. /package/sdk-core/{sdk-core-protos → crates/common}/protos/grpc/health/v1/health.proto +0 -0
  390. /package/sdk-core/{sdk-core-protos → crates/common}/protos/local/temporal/sdk/core/activity_result/activity_result.proto +0 -0
  391. /package/sdk-core/{sdk-core-protos → crates/common}/protos/local/temporal/sdk/core/activity_task/activity_task.proto +0 -0
  392. /package/sdk-core/{sdk-core-protos → crates/common}/protos/local/temporal/sdk/core/child_workflow/child_workflow.proto +0 -0
  393. /package/sdk-core/{sdk-core-protos → crates/common}/protos/local/temporal/sdk/core/common/common.proto +0 -0
  394. /package/sdk-core/{sdk-core-protos → crates/common}/protos/local/temporal/sdk/core/core_interface.proto +0 -0
  395. /package/sdk-core/{sdk-core-protos → crates/common}/protos/local/temporal/sdk/core/external_data/external_data.proto +0 -0
  396. /package/sdk-core/{sdk-core-protos → crates/common}/protos/local/temporal/sdk/core/nexus/nexus.proto +0 -0
  397. /package/sdk-core/{sdk-core-protos → crates/common}/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +0 -0
  398. /package/sdk-core/{sdk-core-protos → crates/common}/protos/local/temporal/sdk/core/workflow_completion/workflow_completion.proto +0 -0
  399. /package/sdk-core/{sdk-core-protos → crates/common}/protos/testsrv_upstream/Makefile +0 -0
  400. /package/sdk-core/{sdk-core-protos → crates/common}/protos/testsrv_upstream/api-linter.yaml +0 -0
  401. /package/sdk-core/{sdk-core-protos → crates/common}/protos/testsrv_upstream/buf.yaml +0 -0
  402. /package/sdk-core/{sdk-core-protos → crates/common}/protos/testsrv_upstream/temporal/api/testservice/v1/request_response.proto +0 -0
  403. /package/sdk-core/{sdk-core-protos → crates/common}/protos/testsrv_upstream/temporal/api/testservice/v1/service.proto +0 -0
  404. /package/sdk-core/{sdk-core-protos/src → crates/common/src/protos}/constants.rs +0 -0
  405. /package/sdk-core/{sdk-core-protos/src → crates/common/src/protos}/task_token.rs +0 -0
  406. /package/sdk-core/{fsm → crates/macros}/LICENSE.txt +0 -0
  407. /package/sdk-core/{core → crates/sdk-core}/src/abstractions/take_cell.rs +0 -0
  408. /package/sdk-core/{core → crates/sdk-core}/src/worker/slot_supplier.rs +0 -0
  409. /package/sdk-core/{histories → crates/sdk-core/tests/histories}/ends_empty_wft_complete.bin +0 -0
  410. /package/sdk-core/{histories → crates/sdk-core/tests/histories}/evict_while_la_running_no_interference-16_history.bin +0 -0
  411. /package/sdk-core/{histories → crates/sdk-core/tests/histories}/evict_while_la_running_no_interference-23_history.bin +0 -0
  412. /package/sdk-core/{histories → crates/sdk-core/tests/histories}/evict_while_la_running_no_interference-85_history.bin +0 -0
  413. /package/sdk-core/{histories → crates/sdk-core/tests/histories}/fail_wf_task.bin +0 -0
  414. /package/sdk-core/{histories → crates/sdk-core/tests/histories}/long_local_activity_with_update-0_history.bin +0 -0
  415. /package/sdk-core/{histories → crates/sdk-core/tests/histories}/long_local_activity_with_update-1_history.bin +0 -0
  416. /package/sdk-core/{histories → crates/sdk-core/tests/histories}/long_local_activity_with_update-2_history.bin +0 -0
  417. /package/sdk-core/{histories → crates/sdk-core/tests/histories}/long_local_activity_with_update-3_history.bin +0 -0
  418. /package/sdk-core/{histories → crates/sdk-core/tests/histories}/old_change_marker_format.bin +0 -0
  419. /package/sdk-core/{histories → crates/sdk-core/tests/histories}/timer_workflow_history.bin +0 -0
  420. /package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/priority.rs +0 -0
  421. /package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/build.rs +0 -0
  422. /package/sdk-core/{cargo-tokio-console.sh → etc/cargo-tokio-console.sh} +0 -0
@@ -28,22 +28,25 @@ use std::{
28
28
  sync::{Arc, mpsc::Sender},
29
29
  time::{Duration, Instant},
30
30
  };
31
- use temporal_sdk_core_api::{errors::WorkflowErrorType, worker::WorkerConfig};
32
- use temporal_sdk_core_protos::{
33
- TaskToken,
34
- coresdk::{
35
- workflow_activation::{
36
- WorkflowActivation, create_evict_activation, query_to_job,
37
- remove_from_cache::EvictionReason, workflow_activation_job,
31
+ use temporalio_common::{
32
+ errors::WorkflowErrorType,
33
+ protos::{
34
+ TaskToken,
35
+ coresdk::{
36
+ workflow_activation::{
37
+ WorkflowActivation, create_evict_activation, query_to_job,
38
+ remove_from_cache::EvictionReason, workflow_activation_job,
39
+ },
40
+ workflow_commands::{FailWorkflowExecution, QueryResult},
41
+ workflow_completion,
42
+ },
43
+ temporal::api::{
44
+ command::v1::command::Attributes as CmdAttribs,
45
+ enums::v1::{VersioningBehavior, WorkflowTaskFailedCause},
46
+ failure::v1::Failure,
38
47
  },
39
- workflow_commands::{FailWorkflowExecution, QueryResult},
40
- workflow_completion,
41
- },
42
- temporal::api::{
43
- command::v1::command::Attributes as CmdAttribs,
44
- enums::v1::{VersioningBehavior, WorkflowTaskFailedCause},
45
- failure::v1::Failure,
46
48
  },
49
+ worker::WorkerConfig,
47
50
  };
48
51
  use tokio::sync::oneshot;
49
52
  use tracing::Span;
@@ -70,7 +73,9 @@ pub(super) struct ManagedRun {
70
73
  /// pushing things out and then directly back in. The downside is this is the only "impure" part
71
74
  /// of the in/out nature of workflow state management. If there's ever a sensible way to lift it
72
75
  /// up, that'd be nice.
73
- local_activity_request_sink: Rc<dyn LocalActivityRequestSink>,
76
+ ///
77
+ /// This field is `None` when `WorkerTaskTypes.enable_local_activities` is false.
78
+ local_activity_request_sink: Option<Rc<dyn LocalActivityRequestSink>>,
74
79
  /// Set if the run is currently waiting on the execution of some local activities.
75
80
  waiting_on_la: Option<WaitingOnLAs>,
76
81
  /// Is set to true if the machines encounter an error and the only subsequent thing we should
@@ -105,7 +110,7 @@ impl ManagedRun {
105
110
  pub(super) fn new(
106
111
  basics: RunBasics,
107
112
  wft: PermittedWFT,
108
- local_activity_request_sink: Rc<dyn LocalActivityRequestSink>,
113
+ local_activity_request_sink: Option<Rc<dyn LocalActivityRequestSink>>,
109
114
  ) -> (Self, RunUpdateAct) {
110
115
  let metrics = basics.metrics.clone();
111
116
  let config = basics.worker_config.clone();
@@ -240,10 +245,10 @@ impl ManagedRun {
240
245
  let r = self.wfm.get_next_activation()?;
241
246
  if r.jobs.is_empty() {
242
247
  return Err(RunUpdateErr {
243
- source: WFMachinesError::Fatal(format!(
248
+ source: crate::worker::workflow::fatal!(
244
249
  "Machines created for {} with no jobs",
245
250
  self.wfm.machines.run_id
246
- )),
251
+ ),
247
252
  complete_resp_chan: None,
248
253
  });
249
254
  }
@@ -261,7 +266,7 @@ impl ManagedRun {
261
266
  lawait.hb_timeout_handle.abort();
262
267
  lawait.hb_timeout_handle = sink_heartbeat_timeout_start(
263
268
  self.wfm.machines.run_id.clone(),
264
- self.local_activity_request_sink.as_ref(),
269
+ self.local_activity_request_sink.as_deref(),
265
270
  start_time,
266
271
  lawait.wft_timeout,
267
272
  );
@@ -307,9 +312,13 @@ impl ManagedRun {
307
312
  self.wfm.machines.reset_last_started_id(id);
308
313
  }
309
314
  // Tell the LA manager that we're done with the WFT
310
- self.local_activity_request_sink.sink_reqs(vec![
311
- LocalActRequest::IndicateWorkflowTaskCompleted(self.wfm.machines.run_id.clone()),
312
- ]);
315
+ if let Some(ref local_act_request_sink) = self.local_activity_request_sink {
316
+ local_act_request_sink.sink_reqs(vec![
317
+ LocalActRequest::IndicateWorkflowTaskCompleted(
318
+ self.wfm.machines.run_id.clone(),
319
+ ),
320
+ ]);
321
+ }
313
322
  }
314
323
 
315
324
  retme
@@ -402,7 +411,7 @@ impl ManagedRun {
402
411
  }) {
403
412
  ActivationCompleteOutcome::ReportWFTFail(FailedActivationWFTReport::Report(
404
413
  tt,
405
- WorkflowTaskFailedCause::Unspecified,
414
+ WorkflowTaskFailedCause::WorkflowWorkerUnhandledFailure,
406
415
  Failure::application_failure(reason, true).into(),
407
416
  ))
408
417
  } else {
@@ -759,7 +768,7 @@ impl ManagedRun {
759
768
  completion_dat: Some((data, completion.resp_chan)),
760
769
  hb_timeout_handle: sink_heartbeat_timeout_start(
761
770
  self.run_id().to_string(),
762
- self.local_activity_request_sink.as_ref(),
771
+ self.local_activity_request_sink.as_deref(),
763
772
  start_t,
764
773
  wft_timeout,
765
774
  ),
@@ -885,7 +894,7 @@ impl ManagedRun {
885
894
  // We just checked it is some, unwrap OK.
886
895
  let c = self.completion_waiting_on_page_fetch.take().unwrap();
887
896
  let run_upd = self.failed_completion(
888
- WorkflowTaskFailedCause::Unspecified,
897
+ WorkflowTaskFailedCause::WorkflowWorkerUnhandledFailure,
889
898
  info.reason,
890
899
  Failure::application_failure(info.message, false).into(),
891
900
  true,
@@ -1019,7 +1028,7 @@ impl ManagedRun {
1019
1028
  let fail_cause = if matches!(&fail.source, WFMachinesError::Nondeterminism(_)) {
1020
1029
  WorkflowTaskFailedCause::NonDeterministicError
1021
1030
  } else {
1022
- WorkflowTaskFailedCause::Unspecified
1031
+ WorkflowTaskFailedCause::WorkflowWorkerUnhandledFailure
1023
1032
  };
1024
1033
  self.failed_completion(
1025
1034
  fail_cause,
@@ -1139,6 +1148,7 @@ impl ManagedRun {
1139
1148
  }
1140
1149
  }
1141
1150
 
1151
+ let attempt = self.wft.as_ref().map(|t| t.info.attempt).unwrap_or(1);
1142
1152
  ActivationCompleteOutcome::ReportWFTSuccess(ServerCommandsWithWorkflowInfo {
1143
1153
  task_token: data.task_token,
1144
1154
  action: ActivationAction::WftComplete {
@@ -1148,6 +1158,7 @@ impl ManagedRun {
1148
1158
  query_responses,
1149
1159
  sdk_metadata: machines_wft_response.metadata_for_complete(),
1150
1160
  versioning_behavior: data.versioning_behavior,
1161
+ attempt,
1151
1162
  },
1152
1163
  })
1153
1164
  } else {
@@ -1168,7 +1179,12 @@ impl ManagedRun {
1168
1179
  &mut self,
1169
1180
  new_local_acts: Vec<LocalActRequest>,
1170
1181
  ) -> Result<(), WFMachinesError> {
1171
- let immediate_resolutions = self.local_activity_request_sink.sink_reqs(new_local_acts);
1182
+ let immediate_resolutions =
1183
+ if let Some(ref local_act_request_sink) = self.local_activity_request_sink {
1184
+ local_act_request_sink.sink_reqs(new_local_acts)
1185
+ } else {
1186
+ Vec::new()
1187
+ };
1172
1188
  for resolution in immediate_resolutions {
1173
1189
  self.wfm
1174
1190
  .notify_of_local_result(LocalResolution::LocalActivity(resolution))?;
@@ -1306,21 +1322,23 @@ fn put_queries_in_act(act: &mut WorkflowActivation, wft: &mut OutstandingTask) {
1306
1322
  }
1307
1323
  fn sink_heartbeat_timeout_start(
1308
1324
  run_id: String,
1309
- sink: &dyn LocalActivityRequestSink,
1325
+ sink: Option<&dyn LocalActivityRequestSink>,
1310
1326
  wft_start_time: Instant,
1311
1327
  wft_timeout: Duration,
1312
1328
  ) -> AbortHandle {
1313
1329
  // The heartbeat deadline is 80% of the WFT timeout
1314
1330
  let deadline = wft_start_time.add(wft_timeout.mul_f32(WFT_HEARTBEAT_TIMEOUT_FRACTION));
1315
1331
  let (abort_handle, abort_reg) = AbortHandle::new_pair();
1316
- sink.sink_reqs(vec![LocalActRequest::StartHeartbeatTimeout {
1317
- send_on_elapse: HeartbeatTimeoutMsg {
1318
- run_id,
1319
- span: Span::current(),
1320
- },
1321
- deadline,
1322
- abort_reg,
1323
- }]);
1332
+ if let Some(la_sink) = sink {
1333
+ la_sink.sink_reqs(vec![LocalActRequest::StartHeartbeatTimeout {
1334
+ send_on_elapse: HeartbeatTimeoutMsg {
1335
+ run_id,
1336
+ span: Span::current(),
1337
+ },
1338
+ deadline,
1339
+ abort_reg,
1340
+ }]);
1341
+ }
1324
1342
  abort_handle
1325
1343
  }
1326
1344
 
@@ -1606,7 +1624,7 @@ mod tests {
1606
1624
  }
1607
1625
 
1608
1626
  mod command_utils {
1609
- use temporal_sdk_core_protos::coresdk::workflow_commands::{
1627
+ use temporalio_common::protos::coresdk::workflow_commands::{
1610
1628
  CancelWorkflowExecution, CompleteWorkflowExecution, QueryResult, UpdateResponse,
1611
1629
  };
1612
1630
 
@@ -23,7 +23,11 @@ use crate::{
23
23
  internal_flags::InternalFlags,
24
24
  pollers::TrackedPermittedTqResp,
25
25
  protosext::{ValidPollWFTQResponse, protocol_messages::IncomingProtocolMessage},
26
- telemetry::{TelemetryInstance, VecDisplayer, set_trace_subscriber_for_current_thread},
26
+ telemetry::{
27
+ VecDisplayer,
28
+ metrics::{self, FailureReason},
29
+ set_trace_subscriber_for_current_thread,
30
+ },
27
31
  worker::{
28
32
  LocalActRequest, LocalActivityExecutionResult, LocalActivityResolution,
29
33
  PostActivateHookData,
@@ -31,6 +35,7 @@ use crate::{
31
35
  client::{LegacyQueryResult, WorkerClient, WorkflowTaskCompletion},
32
36
  workflow::{
33
37
  history_update::HistoryPaginator,
38
+ machines::MachineError,
34
39
  managed_run::RunUpdateAct,
35
40
  wft_extraction::{HistoryFetchReq, WFTExtractor, WFTStreamIn},
36
41
  wft_poller::validate_wft,
@@ -42,7 +47,6 @@ use anyhow::anyhow;
42
47
  use futures_util::{Stream, StreamExt, future::abortable, stream, stream::BoxStream};
43
48
  use itertools::Itertools;
44
49
  use prost_types::TimestampError;
45
- use rustfsm::MachineError;
46
50
  use std::{
47
51
  cell::RefCell,
48
52
  collections::VecDeque,
@@ -55,35 +59,36 @@ use std::{
55
59
  thread,
56
60
  time::{Duration, Instant},
57
61
  };
58
- use temporal_client::MESSAGE_TOO_LARGE_KEY;
59
- use temporal_sdk_core_api::{
62
+ use temporalio_client::MESSAGE_TOO_LARGE_KEY;
63
+ use temporalio_common::{
60
64
  errors::{CompleteWfError, PollError},
61
- worker::{ActivitySlotKind, WorkerConfig, WorkflowSlotKind},
62
- };
63
- use temporal_sdk_core_protos::{
64
- TaskToken,
65
- coresdk::{
66
- workflow_activation::{
67
- QueryWorkflow, WorkflowActivation, WorkflowActivationJob,
68
- remove_from_cache::EvictionReason, workflow_activation_job,
65
+ protos::{
66
+ TaskToken,
67
+ coresdk::{
68
+ workflow_activation::{
69
+ QueryWorkflow, WorkflowActivation, WorkflowActivationJob,
70
+ remove_from_cache::EvictionReason, workflow_activation_job,
71
+ },
72
+ workflow_commands::*,
73
+ workflow_completion::{
74
+ self, Failure, WorkflowActivationCompletion, workflow_activation_completion,
75
+ },
69
76
  },
70
- workflow_commands::*,
71
- workflow_completion,
72
- workflow_completion::{
73
- Failure, WorkflowActivationCompletion, workflow_activation_completion,
77
+ temporal::api::{
78
+ command::v1::{Command as ProtoCommand, Command, command::Attributes},
79
+ common::v1::{
80
+ Memo, MeteringMetadata, RetryPolicy, SearchAttributes, WorkflowExecution,
81
+ },
82
+ enums::v1::{VersioningBehavior, WorkflowTaskFailedCause},
83
+ failure::v1::{ApplicationFailureInfo, failure::FailureInfo},
84
+ protocol::v1::Message as ProtocolMessage,
85
+ query::v1::WorkflowQuery,
86
+ sdk::v1::{UserMetadata, WorkflowTaskCompletedMetadata},
87
+ taskqueue::v1::StickyExecutionAttributes,
88
+ workflowservice::v1::{PollActivityTaskQueueResponse, get_system_info_response},
74
89
  },
75
90
  },
76
- temporal::api::{
77
- command::v1::{Command as ProtoCommand, Command, command::Attributes},
78
- common::v1::{Memo, MeteringMetadata, RetryPolicy, SearchAttributes, WorkflowExecution},
79
- enums::v1::{VersioningBehavior, WorkflowTaskFailedCause},
80
- failure::v1::{ApplicationFailureInfo, failure::FailureInfo},
81
- protocol::v1::Message as ProtocolMessage,
82
- query::v1::WorkflowQuery,
83
- sdk::v1::{UserMetadata, WorkflowTaskCompletedMetadata},
84
- taskqueue::v1::StickyExecutionAttributes,
85
- workflowservice::v1::{PollActivityTaskQueueResponse, get_system_info_response},
86
- },
91
+ worker::{ActivitySlotKind, WorkerConfig, WorkflowSlotKind},
87
92
  };
88
93
  use tokio::{
89
94
  sync::{
@@ -93,10 +98,15 @@ use tokio::{
93
98
  task::{LocalSet, spawn_blocking},
94
99
  };
95
100
  use tokio_stream::wrappers::UnboundedReceiverStream;
101
+ use tokio_util::either::Either;
96
102
  use tokio_util::sync::CancellationToken;
97
- use tracing::Span;
103
+ use tracing::{Span, Subscriber};
98
104
 
99
- pub(crate) const LEGACY_QUERY_ID: &str = "legacy_query";
105
+ /// Id used by server for "legacy" queries. IE: Queries that come in the `query` rather than
106
+ /// `queries` field of a WFT, and are responded to on the separate `respond_query_task_completed`
107
+ /// rpc.
108
+ #[allow(unreachable_pub)] // re-exported in supermodule
109
+ pub const LEGACY_QUERY_ID: &str = "legacy_query";
100
110
  /// What percentage of a WFT timeout we are willing to wait before sending a WFT heartbeat when
101
111
  /// necessary.
102
112
  const WFT_HEARTBEAT_TIMEOUT_FRACTION: f32 = 0.8;
@@ -124,9 +134,10 @@ pub(crate) struct Workflows {
124
134
  activity_tasks_handle: Option<ActivitiesFromWFTsHandle>,
125
135
  /// Ensures we stay at or below this worker's maximum concurrent workflow task limit
126
136
  wft_semaphore: MeteredPermitDealer<WorkflowSlotKind>,
127
- local_act_mgr: Arc<LocalActivityManager>,
137
+ local_act_mgr: Option<Arc<LocalActivityManager>>,
128
138
  ever_polled: AtomicBool,
129
139
  default_versioning_behavior: Option<VersioningBehavior>,
140
+ metrics: MetricsContext,
130
141
  }
131
142
 
132
143
  pub(crate) struct WorkflowBasics {
@@ -159,16 +170,17 @@ impl Workflows {
159
170
  client: Arc<dyn WorkerClient>,
160
171
  wft_semaphore: MeteredPermitDealer<WorkflowSlotKind>,
161
172
  wft_stream: impl Stream<Item = WFTStreamIn> + Send + 'static,
162
- local_activity_request_sink: impl LocalActivityRequestSink,
163
- local_act_mgr: Arc<LocalActivityManager>,
164
- heartbeat_timeout_rx: UnboundedReceiver<HeartbeatTimeoutMsg>,
173
+ local_activity_request_sink: Option<impl LocalActivityRequestSink>,
174
+ local_act_mgr: Option<Arc<LocalActivityManager>>,
175
+ heartbeat_timeout_rx: Option<UnboundedReceiver<HeartbeatTimeoutMsg>>,
165
176
  activity_tasks_handle: Option<ActivitiesFromWFTsHandle>,
166
- telem_instance: Option<&TelemetryInstance>,
177
+ tracing_sub: Option<Arc<dyn Subscriber + Send + Sync>>,
167
178
  ) -> Self {
168
179
  let (local_tx, local_rx) = unbounded_channel();
169
180
  let (fetch_tx, fetch_rx) = unbounded_channel();
170
181
  let shutdown_tok = basics.shutdown_token.clone();
171
182
  let task_queue = basics.worker_config.task_queue.clone();
183
+ let metrics = basics.metrics.clone();
172
184
  let default_versioning_behavior = basics.default_versioning_behavior;
173
185
  let extracted_wft_stream = WFTExtractor::build(
174
186
  client.clone(),
@@ -176,15 +188,18 @@ impl Workflows {
176
188
  wft_stream,
177
189
  UnboundedReceiverStream::new(fetch_rx),
178
190
  );
179
- let locals_stream = stream::select(
180
- UnboundedReceiverStream::new(local_rx),
181
- UnboundedReceiverStream::new(heartbeat_timeout_rx).map(Into::into),
182
- );
191
+ let locals_stream = if let Some(hb_rx) = heartbeat_timeout_rx {
192
+ Either::Left(stream::select(
193
+ UnboundedReceiverStream::new(local_rx),
194
+ UnboundedReceiverStream::new(hb_rx).map(Into::into),
195
+ ))
196
+ } else {
197
+ Either::Right(UnboundedReceiverStream::new(local_rx))
198
+ };
183
199
  let (activation_tx, activation_rx) = unbounded_channel();
184
200
  let (start_polling_tx, start_polling_rx) = oneshot::channel();
185
201
  // We must spawn a task to constantly poll the activation stream, because otherwise
186
202
  // activation completions would not cause anything to happen until the next poll.
187
- let tracing_sub = telem_instance.and_then(|ti| ti.trace_subscriber());
188
203
  let processing_task = thread::Builder::new()
189
204
  .name("workflow-processing".to_string())
190
205
  .spawn(move || {
@@ -197,13 +212,6 @@ impl Workflows {
197
212
  .unwrap();
198
213
  let local = LocalSet::new();
199
214
  local.block_on(&rt, async move {
200
- let mut stream = WFStream::build(
201
- basics,
202
- extracted_wft_stream,
203
- locals_stream,
204
- local_activity_request_sink,
205
- );
206
-
207
215
  // However, we want to avoid plowing ahead until we've been asked to poll at
208
216
  // least once. This supports activity-only workers.
209
217
  let do_poll = tokio::select! {
@@ -217,6 +225,14 @@ impl Workflows {
217
225
  if !do_poll {
218
226
  return;
219
227
  }
228
+
229
+ let mut stream = WFStream::build(
230
+ basics,
231
+ extracted_wft_stream,
232
+ locals_stream,
233
+ local_activity_request_sink,
234
+ );
235
+
220
236
  while let Some(output) = stream.next().await {
221
237
  match output {
222
238
  Ok(o) => {
@@ -256,6 +272,7 @@ impl Workflows {
256
272
  local_act_mgr,
257
273
  ever_polled: AtomicBool::new(false),
258
274
  default_versioning_behavior,
275
+ metrics,
259
276
  }
260
277
  }
261
278
 
@@ -336,18 +353,25 @@ impl Workflows {
336
353
  force_new_wft,
337
354
  sdk_metadata,
338
355
  mut versioning_behavior,
356
+ attempt,
339
357
  },
340
358
  } => {
341
359
  let reserved_act_permits =
342
360
  self.reserve_activity_slots_for_outgoing_commands(commands.as_mut_slice());
343
361
  debug!(commands=%commands.display(), query_responses=%query_responses.display(),
344
- messages=%messages.display(), force_new_wft,
345
- "Sending responses to server");
362
+ messages=%messages.display(), force_new_wft,
363
+ "Sending responses to server");
346
364
  if let Some(default_vb) = self.default_versioning_behavior.as_ref()
347
365
  && versioning_behavior == VersioningBehavior::Unspecified
348
366
  {
349
367
  versioning_behavior = *default_vb;
350
368
  }
369
+ let nonfirst_local_activity_execution_attempts =
370
+ if let Some(ref la_mgr) = self.local_act_mgr {
371
+ la_mgr.get_nonfirst_attempt_count(run_id) as u32
372
+ } else {
373
+ 0
374
+ };
351
375
  let mut completion = WorkflowTaskCompletion {
352
376
  task_token: task_token.clone(),
353
377
  commands,
@@ -358,10 +382,7 @@ impl Workflows {
358
382
  force_create_new_workflow_task: force_new_wft,
359
383
  sdk_metadata,
360
384
  metering_metadata: MeteringMetadata {
361
- nonfirst_local_activity_execution_attempts: self
362
- .local_act_mgr
363
- .get_nonfirst_attempt_count(run_id)
364
- as u32,
385
+ nonfirst_local_activity_execution_attempts,
365
386
  },
366
387
  versioning_behavior,
367
388
  };
@@ -388,10 +409,14 @@ impl Workflows {
388
409
  response.activity_tasks,
389
410
  );
390
411
  }
391
- Err(e) if e.metadata().contains_key(MESSAGE_TOO_LARGE_KEY) => {
412
+ // Reply with a task failure if we got grpc too large from server, but
413
+ // not if this is a nonfirst attempt to avoid spamming.
414
+ Err(e)
415
+ if e.metadata().contains_key(MESSAGE_TOO_LARGE_KEY) && attempt < 2 =>
416
+ {
392
417
  let failure = Failure {
393
418
  failure: Some(
394
- temporal_sdk_core_protos::temporal::api::failure::v1::Failure {
419
+ temporalio_common::protos::temporal::api::failure::v1::Failure {
395
420
  message: "GRPC Message too large".to_string(),
396
421
  failure_info: Some(FailureInfo::ApplicationFailureInfo(
397
422
  ApplicationFailureInfo {
@@ -412,6 +437,12 @@ impl Workflows {
412
437
  );
413
438
  self.handle_activation_failed(run_id, completion_time, new_outcome)
414
439
  .await;
440
+ self.metrics
441
+ .with_new_attrs([metrics::failure_reason(
442
+ FailureReason::GrpcMessageTooLarge,
443
+ )])
444
+ .wf_task_failed();
445
+ return Err(e);
415
446
  }
416
447
  e => {
417
448
  e?;
@@ -614,6 +645,12 @@ impl Workflows {
614
645
  rx
615
646
  }
616
647
 
648
+ /// Send a `BumpStream` message to the workflow stream. This ensures that any pending
649
+ /// workflow activation polls will resolve, like during shutdown, even if there are no other inputs.
650
+ pub(super) fn bump_stream(&self) {
651
+ self.send_local(LocalInputs::BumpStream);
652
+ }
653
+
617
654
  /// Query the state of workflow management. Can return `None` if workflow state is shut down.
618
655
  pub(super) fn get_state_info(&self) -> impl Future<Output = Option<WorkflowStateInfo>> {
619
656
  let rx = self.send_get_state_info_msg();
@@ -636,7 +673,7 @@ impl Workflows {
636
673
  let mut interval = tokio::time::interval(Duration::from_millis(10));
637
674
  loop {
638
675
  interval.tick().await;
639
- let _ = self.get_state_info().await;
676
+ self.bump_stream();
640
677
  }
641
678
  });
642
679
  let (_, jh_res) = tokio::join!(
@@ -699,7 +736,7 @@ impl Workflows {
699
736
  fn send_local(&self, msg: impl Into<LocalInputs>) -> bool {
700
737
  let msg = msg.into();
701
738
  let print_err = match &msg {
702
- LocalInputs::GetStateInfo(_) => false,
739
+ LocalInputs::GetStateInfo(_) | LocalInputs::BumpStream => false,
703
740
  LocalInputs::LocalResolution(lr) if lr.res.is_la_cancel_confirmation() => false,
704
741
  _ => true,
705
742
  };
@@ -987,6 +1024,7 @@ pub(crate) enum ActivationAction {
987
1024
  force_new_wft: bool,
988
1025
  sdk_metadata: WorkflowTaskCompletedMetadata,
989
1026
  versioning_behavior: VersioningBehavior,
1027
+ attempt: u32,
990
1028
  },
991
1029
  /// We should respond to a legacy query request
992
1030
  RespondLegacyQuery { result: Box<QueryResult> },
@@ -1414,7 +1452,79 @@ pub(crate) enum WFMachinesError {
1414
1452
  Fatal(String),
1415
1453
  }
1416
1454
 
1455
+ /// Helper macro to create Nondeterminism errors with automatic assertion
1456
+ ///
1457
+ /// Usage: `nondeterminism!("Activity id mismatch: {} vs {}", id1, id2)`
1458
+ macro_rules! nondeterminism {
1459
+ ($($arg:tt)*) => {{
1460
+ let msg = format!($($arg)*);
1461
+ #[cfg(feature = "antithesis_assertions")]
1462
+ $crate::antithesis::assert_unreachable!(
1463
+ "Nondeterminism error detected",
1464
+ ::serde_json::json!({
1465
+ "error_message": &msg,
1466
+ "error_type": "Nondeterminism",
1467
+ "location": format!("{}:{}", file!(), line!())
1468
+ })
1469
+ );
1470
+ WFMachinesError::Nondeterminism(msg)
1471
+ }};
1472
+ }
1473
+ pub(crate) use nondeterminism;
1474
+
1475
+ /// Helper macro to create Fatal errors with automatic assertion
1476
+ ///
1477
+ /// Usage: `fatal!("Invalid state transition: {:?}", state)`
1478
+ macro_rules! fatal {
1479
+ ($($arg:tt)*) => {{
1480
+ let msg = format!($($arg)*);
1481
+ #[cfg(feature = "antithesis_assertions")]
1482
+ $crate::antithesis::assert_unreachable!(
1483
+ "Fatal error detected",
1484
+ ::serde_json::json!({
1485
+ "error_message": &msg,
1486
+ "error_type": "Fatal",
1487
+ "location": format!("{}:{}", file!(), line!())
1488
+ })
1489
+ );
1490
+ WFMachinesError::Fatal(msg)
1491
+ }};
1492
+ }
1493
+ pub(crate) use fatal;
1494
+
1417
1495
  impl WFMachinesError {
1496
+ /// Create a new Nondeterminism error with assertion instrumentation
1497
+ pub(crate) fn nondeterminism(message: impl Into<String>) -> Self {
1498
+ let msg = message.into();
1499
+
1500
+ #[cfg(feature = "antithesis_assertions")]
1501
+ crate::antithesis::assert_unreachable!(
1502
+ "Nondeterminism error detected",
1503
+ ::serde_json::json!({
1504
+ "error_message": msg,
1505
+ "error_type": "Nondeterminism"
1506
+ })
1507
+ );
1508
+
1509
+ WFMachinesError::Nondeterminism(msg)
1510
+ }
1511
+
1512
+ /// Create a new Fatal error with assertion instrumentation
1513
+ pub(crate) fn fatal(message: impl Into<String>) -> Self {
1514
+ let msg = message.into();
1515
+
1516
+ #[cfg(feature = "antithesis_assertions")]
1517
+ crate::antithesis::assert_unreachable!(
1518
+ "Fatal error detected",
1519
+ ::serde_json::json!({
1520
+ "error_message": msg,
1521
+ "error_type": "Fatal"
1522
+ })
1523
+ );
1524
+
1525
+ WFMachinesError::Fatal(msg)
1526
+ }
1527
+
1418
1528
  fn evict_reason(&self) -> EvictionReason {
1419
1529
  match self {
1420
1530
  WFMachinesError::Nondeterminism(_) => EvictionReason::Nondeterminism,
@@ -1425,7 +1535,7 @@ impl WFMachinesError {
1425
1535
  fn as_failure(&self) -> Failure {
1426
1536
  Failure {
1427
1537
  failure: Some(
1428
- temporal_sdk_core_protos::temporal::api::failure::v1::Failure::application_failure(
1538
+ temporalio_common::protos::temporal::api::failure::v1::Failure::application_failure(
1429
1539
  self.to_string(),
1430
1540
  false,
1431
1541
  ),
@@ -1440,7 +1550,7 @@ impl From<MachineError<WFMachinesError>> for WFMachinesError {
1440
1550
  match v {
1441
1551
  MachineError::InvalidTransition => {
1442
1552
  // TODO: Get states back
1443
- WFMachinesError::Nondeterminism("Invalid transition in state machine".to_string())
1553
+ WFMachinesError::nondeterminism("Invalid transition in state machine")
1444
1554
  }
1445
1555
  MachineError::Underlying(e) => e,
1446
1556
  }
@@ -1449,13 +1559,13 @@ impl From<MachineError<WFMachinesError>> for WFMachinesError {
1449
1559
 
1450
1560
  impl From<TimestampError> for WFMachinesError {
1451
1561
  fn from(_: TimestampError) -> Self {
1452
- Self::Fatal("Could not decode timestamp".to_string())
1562
+ Self::fatal("Could not decode timestamp")
1453
1563
  }
1454
1564
  }
1455
1565
 
1456
1566
  impl From<anyhow::Error> for WFMachinesError {
1457
1567
  fn from(value: anyhow::Error) -> Self {
1458
- WFMachinesError::Fatal(value.to_string())
1568
+ WFMachinesError::fatal(value.to_string())
1459
1569
  }
1460
1570
  }
1461
1571
 
@@ -1543,7 +1653,7 @@ fn prepare_to_ship_activation(wfa: &mut WorkflowActivation) {
1543
1653
  mod tests {
1544
1654
  use super::*;
1545
1655
  use itertools::Itertools;
1546
- use temporal_sdk_core_protos::coresdk::workflow_activation::SignalWorkflow;
1656
+ use temporalio_common::protos::coresdk::workflow_activation::SignalWorkflow;
1547
1657
 
1548
1658
  #[test]
1549
1659
  fn jobs_sort() {
@@ -8,10 +8,12 @@ use crate::{
8
8
  };
9
9
  use lru::LruCache;
10
10
  use std::{num::NonZeroUsize, rc::Rc, sync::Arc};
11
- use temporal_sdk_core_api::worker::WorkerConfig;
12
- use temporal_sdk_core_protos::{
13
- coresdk::workflow_activation::remove_from_cache::EvictionReason,
14
- temporal::api::workflowservice::v1::get_system_info_response,
11
+ use temporalio_common::{
12
+ protos::{
13
+ coresdk::workflow_activation::remove_from_cache::EvictionReason,
14
+ temporal::api::workflowservice::v1::get_system_info_response,
15
+ },
16
+ worker::WorkerConfig,
15
17
  };
16
18
 
17
19
  pub(super) struct RunCache {
@@ -20,7 +22,7 @@ pub(super) struct RunCache {
20
22
  server_capabilities: get_system_info_response::Capabilities,
21
23
  /// Run id -> Data
22
24
  runs: LruCache<String, ManagedRun>,
23
- local_activity_request_sink: Rc<dyn LocalActivityRequestSink>,
25
+ local_activity_request_sink: Option<Rc<dyn LocalActivityRequestSink>>,
24
26
 
25
27
  metrics: MetricsContext,
26
28
  }
@@ -30,7 +32,7 @@ impl RunCache {
30
32
  worker_config: Arc<WorkerConfig>,
31
33
  sdk_name_and_version: (String, String),
32
34
  server_capabilities: get_system_info_response::Capabilities,
33
- local_activity_request_sink: impl LocalActivityRequestSink,
35
+ local_activity_request_sink: Option<impl LocalActivityRequestSink>,
34
36
  metrics: MetricsContext,
35
37
  ) -> Self {
36
38
  // The cache needs room for at least one run, otherwise we couldn't do anything. In
@@ -47,7 +49,8 @@ impl RunCache {
47
49
  runs: LruCache::new(
48
50
  NonZeroUsize::new(lru_size).expect("LRU size is guaranteed positive"),
49
51
  ),
50
- local_activity_request_sink: Rc::new(local_activity_request_sink),
52
+ local_activity_request_sink: local_activity_request_sink
53
+ .map(|s| Rc::new(s) as Rc<dyn LocalActivityRequestSink>),
51
54
  metrics,
52
55
  }
53
56
  }