@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
@@ -4,12 +4,11 @@ use crate::{
4
4
  job_assert,
5
5
  replay::TestHistoryBuilder,
6
6
  test_help::{
7
- FakeWfResponses, MockPollCfg, MocksHolder, ResponseType, WorkerExt,
7
+ FakeWfResponses, MockPollCfg, MocksHolder, ResponseType, WorkerExt, WorkerTestHelpers,
8
8
  WorkflowCachingPolicy::{self, AfterEveryReply, NonSticky},
9
- build_fake_worker, build_mock_pollers, build_multihist_mock_sg, canned_histories,
10
- gen_assert_and_fail, gen_assert_and_reply, hist_to_poll_resp, mock_sdk, mock_sdk_cfg,
11
- mock_worker, poll_and_reply, poll_and_reply_clears_outstanding_evicts, single_hist_mock_sg,
12
- test_worker_cfg,
9
+ build_fake_worker, build_mock_pollers, build_multihist_mock_sg, fanout_tasks,
10
+ gen_assert_and_fail, gen_assert_and_reply, hist_to_poll_resp, mock_worker, poll_and_reply,
11
+ poll_and_reply_clears_outstanding_evicts, single_hist_mock_sg, test_worker_cfg,
13
12
  },
14
13
  worker::{
15
14
  TunerBuilder,
@@ -28,50 +27,48 @@ use std::{
28
27
  },
29
28
  time::Duration,
30
29
  };
31
- use temporal_client::WorkflowOptions;
32
- use temporal_sdk::{ActivityOptions, CancellableFuture, TimerOptions, WfContext};
33
- use temporal_sdk_core_api::{
30
+ use temporalio_client::MESSAGE_TOO_LARGE_KEY;
31
+ use temporalio_common::{
34
32
  Worker as WorkerTrait,
35
33
  errors::PollError,
36
- worker::{
37
- PollerBehavior, SlotMarkUsedContext, SlotReleaseContext, SlotReservationContext,
38
- SlotSupplier, SlotSupplierPermit, WorkerVersioningStrategy, WorkflowSlotKind,
39
- },
40
- };
41
- use temporal_sdk_core_protos::{
42
- DEFAULT_ACTIVITY_TYPE, DEFAULT_WORKFLOW_TYPE,
43
- coresdk::{
44
- activity_result::{self as ar, ActivityResolution, activity_resolution},
45
- common::VersioningIntent,
46
- workflow_activation::{
47
- FireTimer, InitializeWorkflow, ResolveActivity, UpdateRandomSeed,
48
- WorkflowActivationJob, remove_from_cache::EvictionReason, workflow_activation_job,
34
+ protos::{
35
+ canned_histories,
36
+ coresdk::{
37
+ activity_result::{self as ar, ActivityResolution, activity_resolution},
38
+ common::VersioningIntent,
39
+ workflow_activation::{
40
+ FireTimer, InitializeWorkflow, ResolveActivity, UpdateRandomSeed,
41
+ WorkflowActivationJob, remove_from_cache::EvictionReason, workflow_activation_job,
42
+ },
43
+ workflow_commands::{
44
+ ActivityCancellationType, CancelTimer, CompleteWorkflowExecution,
45
+ ContinueAsNewWorkflowExecution, FailWorkflowExecution, RequestCancelActivity,
46
+ ScheduleActivity, SetPatchMarker, StartChildWorkflowExecution, UpdateResponse,
47
+ update_response::Response, workflow_command,
48
+ },
49
+ workflow_completion::WorkflowActivationCompletion,
49
50
  },
50
- workflow_commands::{
51
- ActivityCancellationType, CancelTimer, CompleteWorkflowExecution,
52
- ContinueAsNewWorkflowExecution, FailWorkflowExecution, RequestCancelActivity,
53
- ScheduleActivity, SetPatchMarker, StartChildWorkflowExecution, UpdateResponse,
54
- update_response::Response, workflow_command,
51
+ default_act_sched, default_wes_attribs,
52
+ temporal::api::{
53
+ command::v1::command::Attributes,
54
+ common::v1::{Payload, RetryPolicy},
55
+ enums::v1::{CommandType, EventType, WorkflowTaskFailedCause},
56
+ failure::v1::Failure,
57
+ history::v1::{
58
+ TimerFiredEventAttributes, WorkflowPropertiesModifiedExternallyEventAttributes,
59
+ history_event,
60
+ },
61
+ workflowservice::v1::{
62
+ GetWorkflowExecutionHistoryResponse, RespondWorkflowTaskCompletedResponse,
63
+ },
55
64
  },
56
- workflow_completion::WorkflowActivationCompletion,
65
+ test_utils::start_timer_cmd,
57
66
  },
58
- default_act_sched, default_wes_attribs,
59
- temporal::api::{
60
- command::v1::command::Attributes,
61
- common::v1::{Payload, RetryPolicy, WorkerVersionStamp},
62
- enums::v1::{CommandType, EventType, WorkflowTaskFailedCause},
63
- failure::v1::Failure,
64
- history::v1::{
65
- TimerFiredEventAttributes, WorkflowPropertiesModifiedExternallyEventAttributes,
66
- history_event,
67
- },
68
- sdk::v1::UserMetadata,
69
- workflowservice::v1::{
70
- GetWorkflowExecutionHistoryResponse, RespondWorkflowTaskCompletedResponse,
71
- },
67
+ worker::{
68
+ PollerBehavior, SlotMarkUsedContext, SlotReleaseContext, SlotReservationContext,
69
+ SlotSupplier, SlotSupplierPermit, WorkerTaskTypes, WorkflowSlotKind,
72
70
  },
73
71
  };
74
- use temporal_sdk_core_test_utils::{WorkerTestHelpers, fanout_tasks, start_timer_cmd};
75
72
  use tokio::{
76
73
  join,
77
74
  sync::{Barrier, Semaphore},
@@ -474,54 +471,6 @@ async fn started_activity_cancellation_abandon(hist_batches: &'static [usize]) {
474
471
  verify_activity_cancellation(&core, activity_id, ActivityCancellationType::Abandon).await;
475
472
  }
476
473
 
477
- #[rstest(hist_batches, case::incremental(&[1, 2, 3, 4]), case::replay(&[4]))]
478
- #[tokio::test]
479
- async fn abandoned_activities_ignore_start_and_complete(hist_batches: &'static [usize]) {
480
- let wfid = "fake_wf_id";
481
- let wf_type = DEFAULT_WORKFLOW_TYPE;
482
- let activity_id = "1";
483
-
484
- let mut t = TestHistoryBuilder::default();
485
- t.add_by_type(EventType::WorkflowExecutionStarted);
486
- t.add_full_wf_task();
487
- let act_scheduled_event_id = t.add_activity_task_scheduled(activity_id);
488
- let timer_started_event_id = t.add_by_type(EventType::TimerStarted);
489
- t.add_timer_fired(timer_started_event_id, "1".to_string());
490
- t.add_full_wf_task();
491
- let timer_started_event_id = t.add_by_type(EventType::TimerStarted);
492
- let act_started_event_id = t.add_activity_task_started(act_scheduled_event_id);
493
- t.add_activity_task_completed(
494
- act_scheduled_event_id,
495
- act_started_event_id,
496
- Default::default(),
497
- );
498
- t.add_full_wf_task();
499
- t.add_timer_fired(timer_started_event_id, "2".to_string());
500
- t.add_full_wf_task();
501
- t.add_workflow_execution_completed();
502
- let mock = mock_worker_client();
503
- let mut worker = mock_sdk(MockPollCfg::from_resp_batches(wfid, t, hist_batches, mock));
504
-
505
- worker.register_wf(wf_type.to_owned(), |ctx: WfContext| async move {
506
- let act_fut = ctx.activity(ActivityOptions {
507
- activity_type: DEFAULT_ACTIVITY_TYPE.to_string(),
508
- start_to_close_timeout: Some(Duration::from_secs(5)),
509
- cancellation_type: ActivityCancellationType::Abandon,
510
- ..Default::default()
511
- });
512
- ctx.timer(Duration::from_secs(1)).await;
513
- act_fut.cancel(&ctx);
514
- ctx.timer(Duration::from_secs(3)).await;
515
- act_fut.await;
516
- Ok(().into())
517
- });
518
- worker
519
- .submit_wf(wfid, wf_type, vec![], Default::default())
520
- .await
521
- .unwrap();
522
- worker.run_until_done().await.unwrap();
523
- }
524
-
525
474
  #[rstest(hist_batches, case::incremental(&[1, 3]), case::replay(&[3]))]
526
475
  #[tokio::test]
527
476
  async fn scheduled_activity_cancellation_try_cancel_task_canceled(hist_batches: &'static [usize]) {
@@ -924,43 +873,6 @@ async fn workflow_failures_only_reported_once() {
924
873
  .await;
925
874
  }
926
875
 
927
- #[tokio::test]
928
- async fn max_wft_respected() {
929
- let total_wfs = 100;
930
- let wf_ids: Vec<_> = (0..total_wfs).map(|i| format!("fake-wf-{i}")).collect();
931
- let hists = wf_ids.iter().map(|wf_id| {
932
- let hist = canned_histories::single_timer("1");
933
- FakeWfResponses {
934
- wf_id: wf_id.to_string(),
935
- hist,
936
- response_batches: vec![1.into(), 2.into()],
937
- }
938
- });
939
- let mh = MockPollCfg::new(hists.into_iter().collect(), true, 0);
940
- let mut worker = mock_sdk_cfg(mh, |cfg| {
941
- cfg.max_cached_workflows = total_wfs as usize;
942
- cfg.max_outstanding_workflow_tasks = Some(1);
943
- });
944
- let active_count: &'static _ = Box::leak(Box::new(Semaphore::new(1)));
945
- worker.register_wf(DEFAULT_WORKFLOW_TYPE, move |ctx: WfContext| async move {
946
- drop(
947
- active_count
948
- .try_acquire()
949
- .expect("No multiple concurrent workflow tasks!"),
950
- );
951
- ctx.timer(Duration::from_secs(1)).await;
952
- Ok(().into())
953
- });
954
-
955
- for wf_id in wf_ids {
956
- worker
957
- .submit_wf(wf_id, DEFAULT_WORKFLOW_TYPE, vec![], Default::default())
958
- .await
959
- .unwrap();
960
- }
961
- worker.run_until_done().await.unwrap();
962
- }
963
-
964
876
  #[rstest(hist_batches, case::incremental(&[1, 2]), case::replay(&[3]))]
965
877
  #[tokio::test]
966
878
  async fn activity_not_canceled_on_replay_repro(hist_batches: &'static [usize]) {
@@ -1375,6 +1287,40 @@ async fn fail_wft_then_recover() {
1375
1287
  core.shutdown().await;
1376
1288
  }
1377
1289
 
1290
+ #[tokio::test]
1291
+ async fn default_wft_fail_cause_is_worker_unhandled() {
1292
+ let t = canned_histories::single_timer("1");
1293
+ let mut mh = MockPollCfg::from_resp_batches(
1294
+ "fake_wf_id",
1295
+ t,
1296
+ [ResponseType::AllHistory],
1297
+ mock_worker_client(),
1298
+ );
1299
+ mh.num_expected_fails = 1;
1300
+ mh.expect_fail_wft_matcher = Box::new(|_, cause, _| {
1301
+ matches!(
1302
+ cause,
1303
+ WorkflowTaskFailedCause::WorkflowWorkerUnhandledFailure
1304
+ )
1305
+ });
1306
+ let mock = build_mock_pollers(mh);
1307
+ let core = mock_worker(mock);
1308
+
1309
+ let act = core.poll_workflow_activation().await.unwrap();
1310
+ core.complete_workflow_activation(WorkflowActivationCompletion::fail(
1311
+ act.run_id,
1312
+ Failure {
1313
+ message: "Simulated workflow failure".to_string(),
1314
+ ..Default::default()
1315
+ },
1316
+ None,
1317
+ ))
1318
+ .await
1319
+ .unwrap();
1320
+
1321
+ core.shutdown().await;
1322
+ }
1323
+
1378
1324
  #[tokio::test]
1379
1325
  async fn poll_response_triggers_wf_error() {
1380
1326
  let mut t = TestHistoryBuilder::default();
@@ -2058,6 +2004,7 @@ async fn no_race_acquiring_permits() {
2058
2004
  let task_barr: &'static Barrier = Box::leak(Box::new(Barrier::new(2)));
2059
2005
  mock_client
2060
2006
  .expect_poll_workflow_task()
2007
+ .times(2)
2061
2008
  .returning(move |_, _| {
2062
2009
  let t = canned_histories::single_timer("1");
2063
2010
  let poll_resp = hist_to_poll_resp(&t, wfid.to_owned(), 2.into()).resp;
@@ -2067,6 +2014,9 @@ async fn no_race_acquiring_permits() {
2067
2014
  }
2068
2015
  .boxed()
2069
2016
  });
2017
+ mock_client
2018
+ .expect_poll_workflow_task()
2019
+ .returning(move |_, _| async move { Ok(Default::default()) }.boxed());
2070
2020
  mock_client
2071
2021
  .expect_complete_workflow_task()
2072
2022
  .returning(|_| async move { Ok(Default::default()) }.boxed());
@@ -2075,6 +2025,7 @@ async fn no_race_acquiring_permits() {
2075
2025
  test_worker_cfg()
2076
2026
  .max_outstanding_workflow_tasks(2_usize)
2077
2027
  .max_cached_workflows(0_usize)
2028
+ .ignore_evicts_on_shutdown(false)
2078
2029
  .build()
2079
2030
  .unwrap(),
2080
2031
  mock_client,
@@ -2111,6 +2062,21 @@ async fn no_race_acquiring_permits() {
2111
2062
  task_barr.wait().await;
2112
2063
  };
2113
2064
  join!(poll_1_f, poll_2_f, other_f);
2065
+ // Deal with eviction due to cache being full
2066
+ worker.handle_eviction().await;
2067
+ // Complete workflow (otherwise, this test can encounter a rare shutdown-related race that is
2068
+ // only possible with the `ignore_evicts_on_shutdown` flag set true, as it is to make tests
2069
+ // more convenient).
2070
+ let r = worker.poll_workflow_activation().await.unwrap();
2071
+ worker
2072
+ .complete_workflow_activation(WorkflowActivationCompletion::from_cmd(
2073
+ r.run_id,
2074
+ start_timer_cmd(1, Duration::from_secs(1)),
2075
+ ))
2076
+ .await
2077
+ .unwrap();
2078
+ let r = worker.poll_workflow_activation().await.unwrap();
2079
+ worker.complete_execution(&r.run_id).await;
2114
2080
  worker.drain_pollers_and_shutdown().await;
2115
2081
  }
2116
2082
 
@@ -2679,89 +2645,6 @@ async fn jobs_are_in_appropriate_order() {
2679
2645
  );
2680
2646
  }
2681
2647
 
2682
- #[rstest]
2683
- #[tokio::test]
2684
- async fn history_length_with_fail_and_timeout(
2685
- #[values(true, false)] use_cache: bool,
2686
- #[values(1, 2, 3)] history_responses_case: u8,
2687
- ) {
2688
- let wfid = "fake_wf_id";
2689
- let mut t = TestHistoryBuilder::default();
2690
- t.add_by_type(EventType::WorkflowExecutionStarted);
2691
- t.add_full_wf_task();
2692
- let timer_started_event_id = t.add_by_type(EventType::TimerStarted);
2693
- t.add_timer_fired(timer_started_event_id, "1".to_string());
2694
- t.add_workflow_task_scheduled_and_started();
2695
- t.add_workflow_task_failed_with_failure(WorkflowTaskFailedCause::Unspecified, "ahh".into());
2696
- t.add_workflow_task_scheduled_and_started();
2697
- t.add_workflow_task_timed_out();
2698
- t.add_full_wf_task();
2699
- let timer_started_event_id = t.add_by_type(EventType::TimerStarted);
2700
- t.add_timer_fired(timer_started_event_id, "2".to_string());
2701
- t.add_full_wf_task();
2702
- t.add_workflow_execution_completed();
2703
-
2704
- let mut mock_client = mock_worker_client();
2705
- let history_responses = match history_responses_case {
2706
- 1 => vec![ResponseType::AllHistory],
2707
- 2 => vec![
2708
- ResponseType::ToTaskNum(1),
2709
- ResponseType::ToTaskNum(2),
2710
- ResponseType::AllHistory,
2711
- ],
2712
- 3 => {
2713
- let mut needs_fetch = hist_to_poll_resp(&t, wfid, ResponseType::ToTaskNum(2)).resp;
2714
- needs_fetch.next_page_token = vec![1];
2715
- // Truncate the history a bit in order to force incomplete WFT
2716
- needs_fetch.history.as_mut().unwrap().events.truncate(6);
2717
- let needs_fetch_resp = ResponseType::Raw(needs_fetch);
2718
- let mut empty_fetch_resp: GetWorkflowExecutionHistoryResponse =
2719
- t.get_history_info(1).unwrap().into();
2720
- empty_fetch_resp.history.as_mut().unwrap().events = vec![];
2721
- mock_client
2722
- .expect_get_workflow_execution_history()
2723
- .returning(move |_, _, _| Ok(empty_fetch_resp.clone()))
2724
- .times(1);
2725
- vec![
2726
- ResponseType::ToTaskNum(1),
2727
- needs_fetch_resp,
2728
- ResponseType::ToTaskNum(2),
2729
- ResponseType::AllHistory,
2730
- ]
2731
- }
2732
- _ => unreachable!(),
2733
- };
2734
-
2735
- let mut mh = MockPollCfg::from_resp_batches(wfid, t, history_responses, mock_client);
2736
- if history_responses_case == 3 {
2737
- // Expect the failed pagination fetch
2738
- mh.num_expected_fails = 1;
2739
- }
2740
- let mut worker = mock_sdk_cfg(mh, |wc| {
2741
- if use_cache {
2742
- wc.max_cached_workflows = 1;
2743
- }
2744
- });
2745
- worker.register_wf(DEFAULT_WORKFLOW_TYPE, |ctx: WfContext| async move {
2746
- assert_eq!(ctx.history_length(), 3);
2747
- ctx.timer(Duration::from_secs(1)).await;
2748
- assert_eq!(ctx.history_length(), 14);
2749
- ctx.timer(Duration::from_secs(1)).await;
2750
- assert_eq!(ctx.history_length(), 19);
2751
- Ok(().into())
2752
- });
2753
- worker
2754
- .submit_wf(
2755
- wfid.to_owned(),
2756
- DEFAULT_WORKFLOW_TYPE.to_owned(),
2757
- vec![],
2758
- WorkflowOptions::default(),
2759
- )
2760
- .await
2761
- .unwrap();
2762
- worker.run_until_done().await.unwrap();
2763
- }
2764
-
2765
2648
  #[tokio::test]
2766
2649
  async fn poller_wont_run_ahead_of_task_slots() {
2767
2650
  let popped_tasks = Arc::new(AtomicUsize::new(0));
@@ -2788,7 +2671,7 @@ async fn poller_wont_run_ahead_of_task_slots() {
2788
2671
  .max_cached_workflows(10_usize)
2789
2672
  .max_outstanding_workflow_tasks(10_usize)
2790
2673
  .workflow_task_poller_behavior(PollerBehavior::SimpleMaximum(10_usize))
2791
- .no_remote_activities(true)
2674
+ .task_types(WorkerTaskTypes::workflow_only())
2792
2675
  .build()
2793
2676
  .unwrap(),
2794
2677
  mock_client,
@@ -2848,7 +2731,7 @@ async fn poller_wont_poll_until_lang_polls() {
2848
2731
 
2849
2732
  let worker = Worker::new_test(
2850
2733
  test_worker_cfg()
2851
- .no_remote_activities(true)
2734
+ .task_types(WorkerTaskTypes::workflow_only())
2852
2735
  .build()
2853
2736
  .unwrap(),
2854
2737
  mock_client,
@@ -2946,70 +2829,6 @@ async fn use_compatible_version_flag(
2946
2829
  worker.shutdown().await;
2947
2830
  }
2948
2831
 
2949
- #[allow(deprecated)]
2950
- #[tokio::test]
2951
- async fn sets_build_id_from_wft_complete() {
2952
- let wfid = "fake_wf_id";
2953
-
2954
- let mut t = TestHistoryBuilder::default();
2955
- t.add_by_type(EventType::WorkflowExecutionStarted);
2956
- t.add_full_wf_task();
2957
- let timer_started_event_id = t.add_by_type(EventType::TimerStarted);
2958
- t.add_timer_fired(timer_started_event_id, "1".to_string());
2959
- t.add_full_wf_task();
2960
- t.modify_event(t.current_event_id(), |he| {
2961
- if let history_event::Attributes::WorkflowTaskCompletedEventAttributes(a) =
2962
- he.attributes.as_mut().unwrap()
2963
- {
2964
- a.worker_version = Some(WorkerVersionStamp {
2965
- build_id: "enchi-cat".to_string(),
2966
- ..Default::default()
2967
- });
2968
- }
2969
- });
2970
- let timer_started_event_id = t.add_by_type(EventType::TimerStarted);
2971
- t.add_timer_fired(timer_started_event_id, "2".to_string());
2972
- t.add_workflow_task_scheduled_and_started();
2973
-
2974
- let mock = mock_worker_client();
2975
- let mut worker = mock_sdk_cfg(
2976
- MockPollCfg::from_resp_batches(wfid, t, [ResponseType::AllHistory], mock),
2977
- |cfg| {
2978
- cfg.versioning_strategy = WorkerVersioningStrategy::None {
2979
- build_id: "fierce-predator".to_string(),
2980
- };
2981
- cfg.max_cached_workflows = 1;
2982
- },
2983
- );
2984
-
2985
- worker.register_wf(DEFAULT_WORKFLOW_TYPE, |ctx: WfContext| async move {
2986
- // First task, it should be empty, since replaying and nothing in first WFT completed
2987
- assert_eq!(ctx.current_deployment_version(), None);
2988
- ctx.timer(Duration::from_secs(1)).await;
2989
- assert_eq!(
2990
- ctx.current_deployment_version().unwrap().build_id,
2991
- "enchi-cat"
2992
- );
2993
- ctx.timer(Duration::from_secs(1)).await;
2994
- // Not replaying at this point, so we should see the worker's build id
2995
- assert_eq!(
2996
- ctx.current_deployment_version().unwrap().build_id,
2997
- "fierce-predator"
2998
- );
2999
- ctx.timer(Duration::from_secs(1)).await;
3000
- assert_eq!(
3001
- ctx.current_deployment_version().unwrap().build_id,
3002
- "fierce-predator"
3003
- );
3004
- Ok(().into())
3005
- });
3006
- worker
3007
- .submit_wf(wfid, DEFAULT_WORKFLOW_TYPE, vec![], Default::default())
3008
- .await
3009
- .unwrap();
3010
- worker.run_until_done().await.unwrap();
3011
- }
3012
-
3013
2832
  #[tokio::test]
3014
2833
  async fn slot_provider_cant_hand_out_more_permits_than_cache_size() {
3015
2834
  let popped_tasks = Arc::new(AtomicUsize::new(0));
@@ -3057,7 +2876,7 @@ async fn slot_provider_cant_hand_out_more_permits_than_cache_size() {
3057
2876
  .build(),
3058
2877
  ))
3059
2878
  .workflow_task_poller_behavior(PollerBehavior::SimpleMaximum(10_usize))
3060
- .no_remote_activities(true)
2879
+ .task_types(WorkerTaskTypes::workflow_only())
3061
2880
  .build()
3062
2881
  .unwrap(),
3063
2882
  mock_client,
@@ -3101,53 +2920,6 @@ async fn slot_provider_cant_hand_out_more_permits_than_cache_size() {
3101
2920
  assert_eq!(popped_tasks.load(Ordering::Relaxed), 10);
3102
2921
  }
3103
2922
 
3104
- #[tokio::test]
3105
- async fn pass_timer_summary_to_metadata() {
3106
- let t = canned_histories::single_timer("1");
3107
- let mut mock_cfg = MockPollCfg::from_hist_builder(t);
3108
- let wf_id = mock_cfg.hists[0].wf_id.clone();
3109
- let wf_type = DEFAULT_WORKFLOW_TYPE;
3110
- let expected_user_metadata = Some(UserMetadata {
3111
- summary: Some(b"timer summary".into()),
3112
- details: None,
3113
- });
3114
- mock_cfg.completion_asserts_from_expectations(|mut asserts| {
3115
- asserts
3116
- .then(move |wft| {
3117
- assert_eq!(wft.commands.len(), 1);
3118
- assert_eq!(wft.commands[0].command_type(), CommandType::StartTimer);
3119
- assert_eq!(wft.commands[0].user_metadata, expected_user_metadata)
3120
- })
3121
- .then(move |wft| {
3122
- assert_eq!(wft.commands.len(), 1);
3123
- assert_eq!(
3124
- wft.commands[0].command_type(),
3125
- CommandType::CompleteWorkflowExecution
3126
- );
3127
- });
3128
- });
3129
-
3130
- let mut worker = mock_sdk_cfg(mock_cfg, |_| {});
3131
- worker.register_wf(wf_type, |ctx: WfContext| async move {
3132
- ctx.timer(TimerOptions {
3133
- duration: Duration::from_secs(1),
3134
- summary: Some("timer summary".to_string()),
3135
- })
3136
- .await;
3137
- Ok(().into())
3138
- });
3139
- worker
3140
- .submit_wf(
3141
- wf_id.to_owned(),
3142
- wf_type.to_owned(),
3143
- vec![],
3144
- WorkflowOptions::default(),
3145
- )
3146
- .await
3147
- .unwrap();
3148
- worker.run_until_done().await.unwrap();
3149
- }
3150
-
3151
2923
  #[tokio::test]
3152
2924
  async fn both_normal_and_sticky_pollers_poll_concurrently() {
3153
2925
  struct Counters {
@@ -3252,14 +3024,15 @@ async fn both_normal_and_sticky_pollers_poll_concurrently() {
3252
3024
  .max_outstanding_workflow_tasks(2_usize)
3253
3025
  .workflow_task_poller_behavior(PollerBehavior::SimpleMaximum(2_usize))
3254
3026
  .nonsticky_to_sticky_poll_ratio(0.2)
3255
- .no_remote_activities(true)
3027
+ .task_types(WorkerTaskTypes::workflow_only())
3256
3028
  .build()
3257
3029
  .unwrap(),
3258
3030
  Some("stickytq".to_string()),
3259
3031
  Arc::new(mock_client),
3260
3032
  None,
3261
3033
  None,
3262
- );
3034
+ )
3035
+ .unwrap();
3263
3036
 
3264
3037
  for _ in 1..50 {
3265
3038
  let activation = worker.poll_workflow_activation().await.unwrap();
@@ -3298,3 +3071,54 @@ async fn both_normal_and_sticky_pollers_poll_concurrently() {
3298
3071
  "At peak, there should be exactly 2 pollers active at the same time"
3299
3072
  );
3300
3073
  }
3074
+
3075
+ #[tokio::test]
3076
+ async fn grpc_message_too_large_doesnt_spam_task_fails() {
3077
+ let mut t = TestHistoryBuilder::default();
3078
+ t.add_by_type(EventType::WorkflowExecutionStarted);
3079
+ t.add_workflow_task_scheduled_and_started();
3080
+
3081
+ let mut mh = MockPollCfg::from_resp_batches(
3082
+ "fake_wf_id",
3083
+ t,
3084
+ [
3085
+ ResponseType::AllHistory,
3086
+ ResponseType::AllHistory,
3087
+ ResponseType::AllHistory,
3088
+ ResponseType::AllHistory,
3089
+ ResponseType::AllHistory,
3090
+ ResponseType::AllHistory,
3091
+ ],
3092
+ mock_worker_client(),
3093
+ );
3094
+ mh.num_expected_fails = 1;
3095
+ let mut times = 1;
3096
+ mh.completion_mock_fn = Some(Box::new(move |_| {
3097
+ if times <= 5 {
3098
+ let mut err = tonic::Status::new(tonic::Code::ResourceExhausted, "message too large");
3099
+ // This key is what we look for
3100
+ err.metadata_mut().insert(MESSAGE_TOO_LARGE_KEY, 1.into());
3101
+ times += 1;
3102
+ Err(err)
3103
+ } else {
3104
+ Ok(Default::default())
3105
+ }
3106
+ }));
3107
+
3108
+ let mut mock = build_mock_pollers(mh);
3109
+ mock.worker_cfg(|wc| wc.max_cached_workflows = 1);
3110
+ let core = mock_worker(mock);
3111
+
3112
+ // Since the mock makes us fail 5 times, we should succeed on the sixth
3113
+ for _ in 1..=5 {
3114
+ let act = core.poll_workflow_activation().await.unwrap();
3115
+ core.complete_workflow_activation(WorkflowActivationCompletion::empty(&act.run_id))
3116
+ .await
3117
+ .unwrap();
3118
+ core.handle_eviction().await;
3119
+ }
3120
+ let act = core.poll_workflow_activation().await.unwrap();
3121
+ core.complete_execution(&act.run_id).await;
3122
+ core.drain_pollers_and_shutdown().await;
3123
+ // Mock only expects 1 task failure, and would fail here if we spammed
3124
+ }
@@ -6,7 +6,7 @@ use hyper::http::HeaderValue;
6
6
  use prost::Message;
7
7
  use reqwest::{self, header::HeaderMap};
8
8
  use std::time::Duration;
9
- use temporal_sdk_core_protos::temporal::api::history::v1::History;
9
+ use temporalio_common::protos::temporal::api::history::v1::History;
10
10
  use url::Url;
11
11
 
12
12
  /// A client for interacting with the VSCode debug plugin
@@ -10,7 +10,7 @@ use std::{
10
10
  io,
11
11
  path::{Path, PathBuf},
12
12
  };
13
- use temporal_client::ClientOptionsBuilder;
13
+ use temporalio_client::ClientOptions;
14
14
  use tokio::{
15
15
  task::spawn_blocking,
16
16
  time::{Duration, sleep},
@@ -224,12 +224,12 @@ impl EphemeralServer {
224
224
  // Try to connect every 100ms for 5s
225
225
  // TODO(cretz): Some other way, e.g. via stdout, to know whether the
226
226
  // server is up?
227
- let client_options = ClientOptionsBuilder::default()
227
+ let client_options = ClientOptions::builder()
228
228
  .identity("online_checker".to_owned())
229
229
  .target_url(Url::parse(&target_url)?)
230
230
  .client_name("online-checker".to_owned())
231
231
  .client_version("0.1.0".to_owned())
232
- .build()?;
232
+ .build();
233
233
  let mut last_error = None;
234
234
  for _ in 0..50 {
235
235
  sleep(Duration::from_millis(100)).await;
@@ -241,8 +241,7 @@ impl EphemeralServer {
241
241
  }
242
242
  }
243
243
  Err(anyhow!(
244
- "Failed connecting to test server after 5 seconds, last error: {:?}",
245
- last_error
244
+ "Failed connecting to test server after 5 seconds, last error: {last_error:?}"
246
245
  ))
247
246
  }
248
247
 
@@ -282,6 +281,19 @@ pub enum EphemeralExe {
282
281
  },
283
282
  }
284
283
 
284
+ /// Return the default cached download for test usage inside this repo
285
+ pub fn default_cached_download() -> EphemeralExe {
286
+ EphemeralExe::CachedDownload {
287
+ version: EphemeralExeVersion::SDKDefault {
288
+ sdk_name: "sdk-rust".to_string(),
289
+ sdk_version: "0.1.0".to_string(),
290
+ },
291
+ dest_dir: None,
292
+ // 15 days
293
+ ttl: Some(Duration::from_secs(60 * 60 * 24 * 15)),
294
+ }
295
+ }
296
+
285
297
  /// Which version of the exe to download.
286
298
  #[derive(Debug, Clone)]
287
299
  pub enum EphemeralExeVersion {
@@ -355,7 +367,7 @@ impl EphemeralExe {
355
367
  let arch = match std::env::consts::ARCH {
356
368
  "x86_64" => "amd64",
357
369
  "arm" | "aarch64" => "arm64",
358
- other => return Err(anyhow!("Unsupported arch: {}", other)),
370
+ other => return Err(anyhow!("Unsupported arch: {other}")),
359
371
  };
360
372
  let mut get_info_params = vec![("arch", arch), ("platform", platform)];
361
373
  if let Some(format) = preferred_format {
@@ -5,13 +5,18 @@
5
5
  //! We can use `clap` if this needs more arguments / other stuff later on.
6
6
 
7
7
  use prost::Message;
8
- use temporal_client::WorkflowClientTrait;
9
- use temporal_sdk_core_test_utils::get_integ_server_options;
8
+ use temporalio_client::{ClientOptions, WorkflowClientTrait};
9
+ use url::Url;
10
10
 
11
11
  #[tokio::main]
12
12
  async fn main() -> Result<(), anyhow::Error> {
13
- let gw_opts = get_integ_server_options();
14
- let client = gw_opts.connect("default", None).await?;
13
+ let url = Url::try_from("http://localhost:7233").unwrap();
14
+ let copts = ClientOptions::builder()
15
+ .client_name("histfetch")
16
+ .client_version("0.0")
17
+ .target_url(url)
18
+ .build();
19
+ let client = copts.connect("default", None).await?;
15
20
  let wf_id = std::env::args()
16
21
  .nth(1)
17
22
  .expect("must provide workflow id as only argument");