@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
@@ -1,294 +0,0 @@
1
- use crate::integ_tests::activity_functions::echo;
2
- use assert_matches::assert_matches;
3
- use std::{sync::Arc, time::Duration};
4
- use temporal_client::{WfClientExt, WorkflowClientTrait, WorkflowOptions};
5
- use temporal_sdk::{ActivityOptions, WfContext};
6
- use temporal_sdk_core::{
7
- ClientOptionsBuilder, ephemeral_server::TemporalDevServerConfigBuilder, init_worker,
8
- };
9
- use temporal_sdk_core_api::{Worker, worker::PollerBehavior};
10
- use temporal_sdk_core_protos::{
11
- coresdk::{
12
- AsJsonPayloadExt, IntoCompletion,
13
- activity_task::activity_task as act_task,
14
- workflow_activation::{FireTimer, WorkflowActivationJob, workflow_activation_job},
15
- workflow_commands::{ActivityCancellationType, RequestCancelActivity, StartTimer},
16
- workflow_completion::WorkflowActivationCompletion,
17
- },
18
- temporal::api::enums::v1::EventType,
19
- };
20
- use temporal_sdk_core_test_utils::{
21
- CoreWfStarter, WorkerTestHelpers, default_cached_download, drain_pollers_and_shutdown,
22
- init_core_and_create_wf, init_integ_telem, integ_worker_config, schedule_activity_cmd,
23
- };
24
- use tokio::time::timeout;
25
- use tracing::info;
26
- use url::Url;
27
-
28
- #[tokio::test]
29
- async fn out_of_order_completion_doesnt_hang() {
30
- let mut starter = init_core_and_create_wf("out_of_order_completion_doesnt_hang").await;
31
- let core = starter.get_worker().await;
32
- let task_q = starter.get_task_queue();
33
- let activity_id = "act-1";
34
- let task = core.poll_workflow_activation().await.unwrap();
35
- // Complete workflow task and schedule activity and a timer that fires immediately
36
- core.complete_workflow_activation(
37
- vec![
38
- schedule_activity_cmd(
39
- 0,
40
- task_q,
41
- activity_id,
42
- ActivityCancellationType::TryCancel,
43
- Duration::from_secs(60),
44
- Duration::from_secs(60),
45
- ),
46
- StartTimer {
47
- seq: 1,
48
- start_to_fire_timeout: Some(prost_dur!(from_millis(50))),
49
- }
50
- .into(),
51
- ]
52
- .into_completion(task.run_id),
53
- )
54
- .await
55
- .unwrap();
56
- // Poll activity and verify that it's been scheduled, we don't expect to complete it in this
57
- // test as activity is try-cancelled.
58
- let activity_task = core.poll_activity_task().await.unwrap();
59
- assert_matches!(activity_task.variant, Some(act_task::Variant::Start(_)));
60
- // Poll workflow task and verify that activity has failed.
61
- let task = core.poll_workflow_activation().await.unwrap();
62
- assert_matches!(
63
- task.jobs.as_slice(),
64
- [
65
- WorkflowActivationJob {
66
- variant: Some(workflow_activation_job::Variant::FireTimer(
67
- FireTimer { seq: t_seq }
68
- )),
69
- },
70
- ] => {
71
- assert_eq!(*t_seq, 1);
72
- }
73
- );
74
-
75
- // Start polling again *before* we complete the WFT
76
- let cc = core.clone();
77
- let jh = tokio::spawn(async move {
78
- // We want to fail the test if this takes too long -- we should not hit long poll timeout
79
- let task = timeout(Duration::from_secs(1), cc.poll_workflow_activation())
80
- .await
81
- .expect("Poll should come back right away")
82
- .unwrap();
83
- assert_matches!(
84
- task.jobs.as_slice(),
85
- [WorkflowActivationJob {
86
- variant: Some(workflow_activation_job::Variant::ResolveActivity(_)),
87
- }]
88
- );
89
- cc.complete_execution(&task.run_id).await;
90
- });
91
-
92
- tokio::time::sleep(Duration::from_millis(100)).await;
93
- // Then complete the (last) WFT with a request to cancel the AT, which should produce a
94
- // pending activation, unblocking the (already started) poll
95
- core.complete_workflow_activation(WorkflowActivationCompletion::from_cmds(
96
- task.run_id,
97
- vec![RequestCancelActivity { seq: 0 }.into()],
98
- ))
99
- .await
100
- .unwrap();
101
-
102
- jh.await.unwrap();
103
- }
104
-
105
- #[tokio::test]
106
- async fn switching_worker_client_changes_poll() {
107
- // Start two servers
108
- info!("Starting servers");
109
- let server_config = TemporalDevServerConfigBuilder::default()
110
- .exe(default_cached_download())
111
- // We need to lower the poll timeout so the poll call rolls over
112
- .extra_args(vec![
113
- "--dynamic-config-value".to_string(),
114
- "matching.longPollExpirationInterval=\"1s\"".to_string(),
115
- ])
116
- .build()
117
- .unwrap();
118
- let mut server1 = server_config.start_server().await.unwrap();
119
- let mut server2 = server_config.start_server().await.unwrap();
120
-
121
- // Connect clients to both servers
122
- info!("Connecting clients");
123
- let mut client_common_config = ClientOptionsBuilder::default();
124
- client_common_config
125
- .identity("integ_tester".to_owned())
126
- .client_name("temporal-core".to_owned())
127
- .client_version("0.1.0".to_owned());
128
- let client1 = client_common_config
129
- .clone()
130
- .target_url(Url::parse(&format!("http://{}", server1.target)).unwrap())
131
- .build()
132
- .unwrap()
133
- .connect("default", None)
134
- .await
135
- .unwrap();
136
- let client2 = client_common_config
137
- .clone()
138
- .target_url(Url::parse(&format!("http://{}", server2.target)).unwrap())
139
- .build()
140
- .unwrap()
141
- .connect("default", None)
142
- .await
143
- .unwrap();
144
-
145
- // Start a workflow on both servers
146
- info!("Starting workflows");
147
- let wf1 = client1
148
- .start_workflow(
149
- vec![],
150
- "my-task-queue".to_owned(),
151
- "my-workflow-1".to_owned(),
152
- "my-workflow-type".to_owned(),
153
- None,
154
- WorkflowOptions::default(),
155
- )
156
- .await
157
- .unwrap();
158
- let wf2 = client2
159
- .start_workflow(
160
- vec![],
161
- "my-task-queue".to_owned(),
162
- "my-workflow-2".to_owned(),
163
- "my-workflow-type".to_owned(),
164
- None,
165
- WorkflowOptions::default(),
166
- )
167
- .await
168
- .unwrap();
169
-
170
- // Create a worker only on the first server
171
- let worker = init_worker(
172
- init_integ_telem().unwrap(),
173
- integ_worker_config("my-task-queue")
174
- // We want a cache so we don't get extra remove-job activations
175
- .max_cached_workflows(100_usize)
176
- .build()
177
- .unwrap(),
178
- client1.clone(),
179
- )
180
- .unwrap();
181
-
182
- // Poll for first task, confirm it's first wf, complete, and wait for complete
183
- info!("Doing initial poll");
184
- let act1 = worker.poll_workflow_activation().await.unwrap();
185
- assert_eq!(wf1.run_id, act1.run_id);
186
- worker.complete_execution(&act1.run_id).await;
187
- worker.handle_eviction().await;
188
- info!("Waiting on first workflow complete");
189
- client1
190
- .get_untyped_workflow_handle("my-workflow-1", wf1.run_id)
191
- .get_workflow_result(Default::default())
192
- .await
193
- .unwrap();
194
-
195
- // Swap client, poll for next task, confirm it's second wf, and respond w/ empty
196
- info!("Replacing client and polling again");
197
- worker.replace_client(client2.get_client().inner().clone());
198
- let act2 = worker.poll_workflow_activation().await.unwrap();
199
- assert_eq!(wf2.run_id, act2.run_id);
200
- worker.complete_execution(&act2.run_id).await;
201
- worker.handle_eviction().await;
202
- info!("Waiting on second workflow complete");
203
- client2
204
- .get_untyped_workflow_handle("my-workflow-2", wf2.run_id)
205
- .get_workflow_result(Default::default())
206
- .await
207
- .unwrap();
208
-
209
- // Shutdown workers and servers
210
- drain_pollers_and_shutdown(&(Arc::new(worker) as Arc<dyn Worker>)).await;
211
- server1.shutdown().await.unwrap();
212
- server2.shutdown().await.unwrap();
213
- }
214
-
215
- #[rstest::rstest]
216
- #[tokio::test]
217
- async fn small_workflow_slots_and_pollers(#[values(false, true)] use_autoscaling: bool) {
218
- let wf_name = "only_one_workflow_slot_and_two_pollers";
219
- let mut starter = CoreWfStarter::new(wf_name);
220
- if use_autoscaling {
221
- starter
222
- .worker_config
223
- .workflow_task_poller_behavior(PollerBehavior::Autoscaling {
224
- minimum: 1,
225
- maximum: 5,
226
- initial: 1,
227
- });
228
- } else {
229
- starter
230
- .worker_config
231
- .workflow_task_poller_behavior(PollerBehavior::SimpleMaximum(2));
232
- }
233
- starter
234
- .worker_config
235
- .max_outstanding_workflow_tasks(2_usize)
236
- .max_outstanding_local_activities(1_usize)
237
- .activity_task_poller_behavior(PollerBehavior::SimpleMaximum(1))
238
- .max_outstanding_activities(1_usize);
239
- let mut worker = starter.worker().await;
240
- worker.register_wf(wf_name.to_owned(), |ctx: WfContext| async move {
241
- for _ in 0..3 {
242
- ctx.activity(ActivityOptions {
243
- activity_type: "echo_activity".to_string(),
244
- start_to_close_timeout: Some(Duration::from_secs(5)),
245
- input: "hi!".as_json_payload().expect("serializes fine"),
246
- ..Default::default()
247
- })
248
- .await;
249
- }
250
- Ok(().into())
251
- });
252
- worker.register_activity("echo_activity", echo);
253
- worker
254
- .submit_wf(
255
- starter.get_task_queue(),
256
- wf_name.to_owned(),
257
- vec![],
258
- WorkflowOptions::default(),
259
- )
260
- .await
261
- .unwrap();
262
- let wf2id = format!("{}-2", starter.get_task_queue());
263
- worker
264
- .submit_wf(
265
- wf2id.clone(),
266
- wf_name.to_owned(),
267
- vec![],
268
- WorkflowOptions::default(),
269
- )
270
- .await
271
- .unwrap();
272
- // If we don't fail the workflow on nondeterminism, we'll get stuck here retrying the WFT
273
- worker.run_until_done().await.unwrap();
274
- // Verify no task timeouts happened
275
- let history = starter.get_history().await;
276
- let any_task_timeouts = history
277
- .events
278
- .iter()
279
- .any(|e| e.event_type() == EventType::WorkflowTaskTimedOut);
280
- assert!(!any_task_timeouts);
281
- let history = starter
282
- .get_client()
283
- .await
284
- .get_workflow_execution_history(wf2id, None, vec![])
285
- .await
286
- .unwrap()
287
- .history
288
- .unwrap();
289
- let any_task_timeouts = history
290
- .events
291
- .iter()
292
- .any(|e| e.event_type() == EventType::WorkflowTaskTimedOut);
293
- assert!(!any_task_timeouts);
294
- }
@@ -1,203 +0,0 @@
1
- use crate::shared_tests;
2
- use assert_matches::assert_matches;
3
- use std::{
4
- cell::Cell,
5
- sync::{
6
- Arc,
7
- atomic::{AtomicBool, Ordering::Relaxed},
8
- },
9
- time::Duration,
10
- };
11
- use temporal_client::WorkflowOptions;
12
- use temporal_sdk::{WfContext, interceptors::WorkerInterceptor};
13
- use temporal_sdk_core::{CoreRuntime, ResourceBasedTuner, ResourceSlotOptions, init_worker};
14
- use temporal_sdk_core_api::{
15
- Worker,
16
- errors::WorkerValidationError,
17
- worker::{PollerBehavior, WorkerConfigBuilder, WorkerVersioningStrategy},
18
- };
19
- use temporal_sdk_core_protos::{
20
- coresdk::workflow_completion::{
21
- Failure, WorkflowActivationCompletion, workflow_activation_completion::Status,
22
- },
23
- temporal::api::{
24
- enums::v1::{EventType, WorkflowTaskFailedCause::GrpcMessageTooLarge},
25
- failure::v1::Failure as InnerFailure,
26
- history::v1::history_event::Attributes::WorkflowTaskFailedEventAttributes,
27
- },
28
- };
29
- use temporal_sdk_core_test_utils::{
30
- CoreWfStarter, drain_pollers_and_shutdown, get_integ_server_options, get_integ_telem_options,
31
- };
32
- use tokio::sync::Notify;
33
- use uuid::Uuid;
34
-
35
- #[tokio::test]
36
- async fn worker_validation_fails_on_nonexistent_namespace() {
37
- let opts = get_integ_server_options();
38
- let runtime = CoreRuntime::new_assume_tokio(get_integ_telem_options()).unwrap();
39
- let retrying_client = opts
40
- .connect_no_namespace(runtime.telemetry().get_temporal_metric_meter())
41
- .await
42
- .unwrap();
43
-
44
- let worker = init_worker(
45
- &runtime,
46
- WorkerConfigBuilder::default()
47
- .namespace("i_dont_exist")
48
- .task_queue("Wheee!")
49
- .versioning_strategy(WorkerVersioningStrategy::None {
50
- build_id: "blah".to_owned(),
51
- })
52
- .build()
53
- .unwrap(),
54
- retrying_client,
55
- )
56
- .unwrap();
57
-
58
- let res = worker.validate().await;
59
- assert_matches!(
60
- res,
61
- Err(WorkerValidationError::NamespaceDescribeError { .. })
62
- );
63
- }
64
-
65
- #[tokio::test]
66
- async fn worker_handles_unknown_workflow_types_gracefully() {
67
- let wf_type = "worker_handles_unknown_workflow_types_gracefully";
68
- let mut starter = CoreWfStarter::new(wf_type);
69
- let mut worker = starter.worker().await;
70
-
71
- let run_id = worker
72
- .submit_wf(
73
- format!("wce-{}", Uuid::new_v4()),
74
- "unregistered".to_string(),
75
- vec![],
76
- WorkflowOptions::default(),
77
- )
78
- .await
79
- .unwrap();
80
-
81
- struct GracefulAsserter {
82
- notify: Arc<Notify>,
83
- run_id: String,
84
- unregistered_failure_seen: Cell<bool>,
85
- }
86
- #[async_trait::async_trait(?Send)]
87
- impl WorkerInterceptor for GracefulAsserter {
88
- async fn on_workflow_activation_completion(
89
- &self,
90
- completion: &WorkflowActivationCompletion,
91
- ) {
92
- if matches!(
93
- completion,
94
- WorkflowActivationCompletion {
95
- status: Some(Status::Failed(Failure {
96
- failure: Some(InnerFailure { message, .. }),
97
- ..
98
- })),
99
- run_id,
100
- } if message == "Workflow type unregistered not found" && *run_id == self.run_id
101
- ) {
102
- self.unregistered_failure_seen.set(true);
103
- }
104
- // If we've seen the failure, and the completion is a success for the same run, we're done
105
- if matches!(
106
- completion,
107
- WorkflowActivationCompletion {
108
- status: Some(Status::Successful(..)),
109
- run_id,
110
- } if self.unregistered_failure_seen.get() && *run_id == self.run_id
111
- ) {
112
- // Shutdown the worker
113
- self.notify.notify_one();
114
- }
115
- }
116
- fn on_shutdown(&self, _: &temporal_sdk::Worker) {}
117
- }
118
-
119
- let inner = worker.inner_mut();
120
- let notify = Arc::new(Notify::new());
121
- inner.set_worker_interceptor(GracefulAsserter {
122
- notify: notify.clone(),
123
- run_id,
124
- unregistered_failure_seen: Cell::new(false),
125
- });
126
- tokio::join!(async { inner.run().await.unwrap() }, async move {
127
- notify.notified().await;
128
- let worker = starter.get_worker().await.clone();
129
- drain_pollers_and_shutdown(&worker).await;
130
- });
131
- }
132
-
133
- #[tokio::test]
134
- async fn resource_based_few_pollers_guarantees_non_sticky_poll() {
135
- let wf_name = "resource_based_few_pollers_guarantees_non_sticky_poll";
136
- let mut starter = CoreWfStarter::new(wf_name);
137
- starter
138
- .worker_config
139
- .clear_max_outstanding_opts()
140
- .no_remote_activities(true)
141
- // 3 pollers so the minimum slots of 2 can both be handed out to a sticky poller
142
- .workflow_task_poller_behavior(PollerBehavior::SimpleMaximum(3_usize));
143
- // Set the limits to zero so it's essentially unwilling to hand out slots
144
- let mut tuner = ResourceBasedTuner::new(0.0, 0.0);
145
- tuner.with_workflow_slots_options(ResourceSlotOptions::new(2, 10, Duration::from_millis(0)));
146
- starter.worker_config.tuner(Arc::new(tuner));
147
- let mut worker = starter.worker().await;
148
-
149
- // Workflow doesn't actually need to do anything. We just need to see that we don't get stuck
150
- // by assigning all slots to sticky pollers.
151
- worker.register_wf(
152
- wf_name.to_owned(),
153
- |_: WfContext| async move { Ok(().into()) },
154
- );
155
- for i in 0..20 {
156
- worker
157
- .submit_wf(
158
- format!("{wf_name}_{i}"),
159
- wf_name.to_owned(),
160
- vec![],
161
- WorkflowOptions::default(),
162
- )
163
- .await
164
- .unwrap();
165
- }
166
- worker.run_until_done().await.unwrap();
167
- }
168
-
169
- #[tokio::test]
170
- async fn oversize_grpc_message() {
171
- let wf_name = "oversize_grpc_message";
172
- let mut starter = CoreWfStarter::new(wf_name);
173
- starter.worker_config.no_remote_activities(true);
174
- let mut core = starter.worker().await;
175
-
176
- static OVERSIZE_GRPC_MESSAGE_RUN: AtomicBool = AtomicBool::new(false);
177
- core.register_wf(wf_name.to_owned(), |_ctx: WfContext| async move {
178
- if OVERSIZE_GRPC_MESSAGE_RUN.load(Relaxed) {
179
- Ok(vec![].into())
180
- } else {
181
- OVERSIZE_GRPC_MESSAGE_RUN.store(true, Relaxed);
182
- let result: Vec<u8> = vec![0; 5000000];
183
- Ok(result.into())
184
- }
185
- });
186
- starter.start_with_worker(wf_name, &mut core).await;
187
- core.run_until_done().await.unwrap();
188
-
189
- assert!(starter.get_history().await.events.iter().any(|e| {
190
- e.event_type == EventType::WorkflowTaskFailed as i32
191
- && if let WorkflowTaskFailedEventAttributes(attr) = e.attributes.as_ref().unwrap() {
192
- attr.cause == GrpcMessageTooLarge as i32
193
- && attr.failure.as_ref().unwrap().message == "GRPC Message too large"
194
- } else {
195
- false
196
- }
197
- }))
198
- }
199
-
200
- #[tokio::test]
201
- async fn grpc_message_too_large_test() {
202
- shared_tests::grpc_message_too_large().await
203
- }
@@ -1,74 +0,0 @@
1
- use temporal_client::{GetWorkflowResultOpts, WfClientExt, WorkflowOptions};
2
- use temporal_sdk::{WfContext, WorkflowResult};
3
- use temporal_sdk_core_protos::coresdk::{FromJsonPayloadExt, common::NamespacedWorkflowExecution};
4
- use temporal_sdk_core_test_utils::CoreWfStarter;
5
-
6
- const RECEIVER_WFID: &str = "sends-cancel-receiver";
7
-
8
- async fn cancel_sender(ctx: WfContext) -> WorkflowResult<()> {
9
- let run_id = std::str::from_utf8(&ctx.get_args()[0].data)?.to_owned();
10
- let sigres = ctx
11
- .cancel_external(
12
- NamespacedWorkflowExecution {
13
- workflow_id: RECEIVER_WFID.to_string(),
14
- run_id,
15
- namespace: ctx.namespace().to_string(),
16
- },
17
- "cancel-reason".to_string(),
18
- )
19
- .await;
20
- if ctx.get_args().get(1).is_some() {
21
- // We expect failure
22
- assert!(sigres.is_err());
23
- } else {
24
- sigres.unwrap();
25
- }
26
- Ok(().into())
27
- }
28
-
29
- async fn cancel_receiver(ctx: WfContext) -> WorkflowResult<String> {
30
- let r = ctx.cancelled().await;
31
- Ok(r.into())
32
- }
33
-
34
- #[tokio::test]
35
- async fn sends_cancel_to_other_wf() {
36
- let mut starter = CoreWfStarter::new("sends_cancel_to_other_wf");
37
- starter.worker_config.no_remote_activities(true);
38
- let mut worker = starter.worker().await;
39
- worker.register_wf("sender", cancel_sender);
40
- worker.register_wf("receiver", cancel_receiver);
41
-
42
- let receiver_run_id = worker
43
- .submit_wf(
44
- RECEIVER_WFID,
45
- "receiver",
46
- vec![],
47
- WorkflowOptions::default(),
48
- )
49
- .await
50
- .unwrap();
51
- worker
52
- .submit_wf(
53
- "sends-cancel-sender",
54
- "sender",
55
- vec![receiver_run_id.clone().into()],
56
- WorkflowOptions::default(),
57
- )
58
- .await
59
- .unwrap();
60
- worker.run_until_done().await.unwrap();
61
- let h = starter
62
- .get_client()
63
- .await
64
- .get_untyped_workflow_handle(RECEIVER_WFID, receiver_run_id);
65
- let res = String::from_json_payload(
66
- &h.get_workflow_result(GetWorkflowResultOpts::default())
67
- .await
68
- .unwrap()
69
- .unwrap_success()[0],
70
- )
71
- .unwrap();
72
- assert!(res.contains("Cancel requested by workflow"));
73
- assert!(res.contains("cancel-reason"));
74
- }
@@ -1,57 +0,0 @@
1
- use std::time::Duration;
2
- use temporal_client::WorkflowClientTrait;
3
- use temporal_sdk::{WfContext, WfExitValue, WorkflowResult};
4
- use temporal_sdk_core_protos::temporal::api::enums::v1::WorkflowExecutionStatus;
5
- use temporal_sdk_core_test_utils::CoreWfStarter;
6
-
7
- async fn cancelled_wf(ctx: WfContext) -> WorkflowResult<()> {
8
- let mut reason = "".to_string();
9
- let cancelled = tokio::select! {
10
- _ = ctx.timer(Duration::from_secs(500)) => false,
11
- r = ctx.cancelled() => {
12
- reason = r;
13
- true
14
- }
15
- };
16
-
17
- assert_eq!(reason, "Dieee");
18
-
19
- if cancelled {
20
- Ok(WfExitValue::Cancelled)
21
- } else {
22
- panic!("Should have been cancelled")
23
- }
24
- }
25
-
26
- #[tokio::test]
27
- async fn cancel_during_timer() {
28
- let wf_name = "cancel_during_timer";
29
- let mut starter = CoreWfStarter::new(wf_name);
30
- starter.worker_config.no_remote_activities(true);
31
- let mut worker = starter.worker().await;
32
- let client = starter.get_client().await;
33
- worker.register_wf(wf_name.to_string(), cancelled_wf);
34
- starter.start_with_worker(wf_name, &mut worker).await;
35
- let wf_id = starter.get_task_queue().to_string();
36
-
37
- let canceller = async {
38
- tokio::time::sleep(Duration::from_millis(500)).await;
39
- // Cancel the workflow externally
40
- client
41
- .cancel_workflow_execution(wf_id.clone(), None, "Dieee".to_string(), None)
42
- .await
43
- .unwrap();
44
- };
45
-
46
- let (_, res) = tokio::join!(canceller, worker.run_until_done());
47
- res.unwrap();
48
- let desc = client
49
- .describe_workflow_execution(wf_id, None)
50
- .await
51
- .unwrap();
52
-
53
- assert_eq!(
54
- desc.workflow_execution_info.unwrap().status,
55
- WorkflowExecutionStatus::Canceled as i32
56
- );
57
- }