@temporalio/core-bridge 1.14.2-canary-release-testing.0 → 1.16.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 (233) hide show
  1. package/Cargo.lock +794 -650
  2. package/bridge-macros/src/derive_tryintojs.rs +40 -0
  3. package/lib/native.d.ts +24 -3
  4. package/package.json +4 -4
  5. package/releases/aarch64-apple-darwin/index.node +0 -0
  6. package/releases/aarch64-unknown-linux-gnu/index.node +0 -0
  7. package/releases/x86_64-apple-darwin/index.node +0 -0
  8. package/releases/x86_64-pc-windows-msvc/index.node +0 -0
  9. package/releases/x86_64-unknown-linux-gnu/index.node +0 -0
  10. package/sdk-core/.github/workflows/per-pr.yml +6 -6
  11. package/sdk-core/AGENTS.md +42 -31
  12. package/sdk-core/Cargo.toml +4 -1
  13. package/sdk-core/README.md +19 -13
  14. package/sdk-core/crates/client/Cargo.toml +4 -0
  15. package/sdk-core/crates/client/README.md +139 -0
  16. package/sdk-core/crates/client/src/async_activity_handle.rs +297 -0
  17. package/sdk-core/crates/client/src/callback_based.rs +7 -0
  18. package/sdk-core/crates/client/src/errors.rs +294 -0
  19. package/sdk-core/crates/client/src/{raw.rs → grpc.rs} +370 -159
  20. package/sdk-core/crates/client/src/lib.rs +920 -1326
  21. package/sdk-core/crates/client/src/metrics.rs +24 -33
  22. package/sdk-core/crates/client/src/options_structs.rs +457 -0
  23. package/sdk-core/crates/client/src/replaceable.rs +5 -4
  24. package/sdk-core/crates/client/src/request_extensions.rs +8 -9
  25. package/sdk-core/crates/client/src/retry.rs +99 -54
  26. package/sdk-core/crates/client/src/{worker/mod.rs → worker.rs} +104 -29
  27. package/sdk-core/crates/client/src/workflow_handle.rs +826 -0
  28. package/sdk-core/crates/common/Cargo.toml +62 -3
  29. package/sdk-core/crates/common/build.rs +742 -12
  30. package/sdk-core/crates/common/protos/api_upstream/.github/workflows/ci.yml +2 -0
  31. package/sdk-core/crates/common/protos/api_upstream/.github/workflows/create-release.yml +0 -5
  32. package/sdk-core/crates/common/protos/api_upstream/Makefile +2 -1
  33. package/sdk-core/crates/common/protos/api_upstream/README.md +8 -0
  34. package/sdk-core/crates/common/protos/api_upstream/cmd/check-path-conflicts/main.go +137 -0
  35. package/sdk-core/crates/common/protos/api_upstream/openapi/openapiv2.json +3329 -2647
  36. package/sdk-core/crates/common/protos/api_upstream/openapi/openapiv3.yaml +2734 -708
  37. package/sdk-core/crates/common/protos/api_upstream/temporal/api/activity/v1/message.proto +155 -3
  38. package/sdk-core/crates/common/protos/api_upstream/temporal/api/command/v1/message.proto +26 -0
  39. package/sdk-core/crates/common/protos/api_upstream/temporal/api/common/v1/message.proto +8 -1
  40. package/sdk-core/crates/common/protos/api_upstream/temporal/api/deployment/v1/message.proto +27 -1
  41. package/sdk-core/crates/common/protos/api_upstream/temporal/api/enums/v1/activity.proto +81 -0
  42. package/sdk-core/crates/common/protos/api_upstream/temporal/api/enums/v1/event_type.proto +4 -0
  43. package/sdk-core/crates/common/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +4 -0
  44. package/sdk-core/crates/common/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +15 -0
  45. package/sdk-core/crates/common/protos/api_upstream/temporal/api/enums/v1/workflow.proto +63 -15
  46. package/sdk-core/crates/common/protos/api_upstream/temporal/api/errordetails/v1/message.proto +8 -0
  47. package/sdk-core/crates/common/protos/api_upstream/temporal/api/failure/v1/message.proto +1 -0
  48. package/sdk-core/crates/common/protos/api_upstream/temporal/api/history/v1/message.proto +111 -17
  49. package/sdk-core/crates/common/protos/api_upstream/temporal/api/namespace/v1/message.proto +21 -0
  50. package/sdk-core/crates/common/protos/api_upstream/temporal/api/nexus/v1/message.proto +20 -1
  51. package/sdk-core/crates/common/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +4 -0
  52. package/sdk-core/crates/common/protos/api_upstream/temporal/api/schedule/v1/message.proto +2 -2
  53. package/sdk-core/crates/common/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +2 -0
  54. package/sdk-core/crates/common/protos/api_upstream/temporal/api/worker/v1/message.proto +4 -7
  55. package/sdk-core/crates/common/protos/api_upstream/temporal/api/workflow/v1/message.proto +80 -22
  56. package/sdk-core/crates/common/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +347 -23
  57. package/sdk-core/crates/common/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +242 -43
  58. package/sdk-core/crates/common/protos/local/temporal/sdk/core/core_interface.proto +15 -0
  59. package/sdk-core/crates/common/protos/local/temporal/sdk/core/nexus/nexus.proto +9 -2
  60. package/sdk-core/crates/common/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +8 -0
  61. package/sdk-core/crates/common/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +22 -5
  62. package/sdk-core/crates/common/src/activity_definition.rs +20 -0
  63. package/sdk-core/crates/common/src/data_converters.rs +770 -0
  64. package/sdk-core/crates/common/src/envconfig.rs +5 -0
  65. package/sdk-core/crates/common/src/lib.rs +15 -211
  66. package/sdk-core/crates/common/src/payload_visitor.rs +648 -0
  67. package/sdk-core/crates/common/src/priority.rs +110 -0
  68. package/sdk-core/crates/common/src/protos/canned_histories.rs +19 -0
  69. package/sdk-core/crates/common/src/protos/history_builder.rs +45 -0
  70. package/sdk-core/crates/common/src/protos/history_info.rs +2 -0
  71. package/sdk-core/crates/common/src/protos/mod.rs +134 -27
  72. package/sdk-core/crates/common/src/protos/task_token.rs +3 -3
  73. package/sdk-core/crates/common/src/protos/utilities.rs +11 -0
  74. package/sdk-core/crates/{sdk-core → common}/src/telemetry/log_export.rs +11 -16
  75. package/sdk-core/crates/common/src/telemetry/metrics/core.rs +125 -0
  76. package/sdk-core/crates/common/src/telemetry/metrics.rs +272 -225
  77. package/sdk-core/crates/{sdk-core → common}/src/telemetry/otel.rs +8 -13
  78. package/sdk-core/crates/{sdk-core → common}/src/telemetry/prometheus_meter.rs +49 -50
  79. package/sdk-core/crates/{sdk-core → common}/src/telemetry/prometheus_server.rs +2 -3
  80. package/sdk-core/crates/common/src/telemetry.rs +278 -19
  81. package/sdk-core/crates/common/src/worker.rs +68 -636
  82. package/sdk-core/crates/common/src/workflow_definition.rs +60 -0
  83. package/sdk-core/crates/macros/Cargo.toml +5 -1
  84. package/sdk-core/crates/macros/src/activities_definitions.rs +585 -0
  85. package/sdk-core/crates/macros/src/fsm_impl.rs +507 -0
  86. package/sdk-core/crates/macros/src/lib.rs +138 -512
  87. package/sdk-core/crates/macros/src/macro_utils.rs +106 -0
  88. package/sdk-core/crates/macros/src/workflow_definitions.rs +1224 -0
  89. package/sdk-core/crates/sdk/Cargo.toml +19 -6
  90. package/sdk-core/crates/sdk/README.md +415 -0
  91. package/sdk-core/crates/sdk/src/activities.rs +417 -0
  92. package/sdk-core/crates/sdk/src/interceptors.rs +1 -1
  93. package/sdk-core/crates/sdk/src/lib.rs +759 -442
  94. package/sdk-core/crates/sdk/src/workflow_context/options.rs +64 -35
  95. package/sdk-core/crates/sdk/src/workflow_context.rs +1033 -289
  96. package/sdk-core/crates/sdk/src/workflow_future.rs +277 -213
  97. package/sdk-core/crates/sdk/src/workflows.rs +711 -0
  98. package/sdk-core/crates/sdk-core/Cargo.toml +59 -65
  99. package/sdk-core/crates/sdk-core/benches/workflow_replay_bench.rs +45 -54
  100. package/sdk-core/crates/sdk-core/machine_coverage/ActivityMachine_Coverage.puml +1 -1
  101. package/sdk-core/crates/sdk-core/src/abstractions.rs +6 -10
  102. package/sdk-core/crates/sdk-core/src/core_tests/activity_tasks.rs +6 -5
  103. package/sdk-core/crates/sdk-core/src/core_tests/mod.rs +22 -21
  104. package/sdk-core/crates/sdk-core/src/core_tests/queries.rs +21 -25
  105. package/sdk-core/crates/sdk-core/src/core_tests/replay_flag.rs +7 -10
  106. package/sdk-core/crates/sdk-core/src/core_tests/updates.rs +14 -17
  107. package/sdk-core/crates/sdk-core/src/core_tests/workers.rs +647 -27
  108. package/sdk-core/crates/sdk-core/src/core_tests/workflow_tasks.rs +46 -41
  109. package/sdk-core/crates/sdk-core/src/ephemeral_server/mod.rs +13 -16
  110. package/sdk-core/crates/sdk-core/src/histfetch.rs +20 -10
  111. package/sdk-core/crates/sdk-core/src/lib.rs +60 -123
  112. package/sdk-core/crates/sdk-core/src/pollers/mod.rs +4 -9
  113. package/sdk-core/crates/sdk-core/src/pollers/poll_buffer.rs +411 -32
  114. package/sdk-core/crates/sdk-core/src/protosext/mod.rs +2 -2
  115. package/sdk-core/crates/sdk-core/src/replay/mod.rs +14 -5
  116. package/sdk-core/crates/sdk-core/src/telemetry/metrics.rs +183 -198
  117. package/sdk-core/crates/sdk-core/src/telemetry/mod.rs +3 -281
  118. package/sdk-core/crates/sdk-core/src/test_help/integ_helpers.rs +35 -16
  119. package/sdk-core/crates/sdk-core/src/test_help/unit_helpers.rs +3 -6
  120. package/sdk-core/crates/sdk-core/src/worker/activities/activity_heartbeat_manager.rs +1 -0
  121. package/sdk-core/crates/sdk-core/src/worker/activities/local_activities.rs +11 -14
  122. package/sdk-core/crates/sdk-core/src/worker/activities.rs +16 -19
  123. package/sdk-core/crates/sdk-core/src/worker/client/mocks.rs +11 -5
  124. package/sdk-core/crates/sdk-core/src/worker/client.rs +104 -86
  125. package/sdk-core/crates/sdk-core/src/worker/heartbeat.rs +10 -14
  126. package/sdk-core/crates/sdk-core/src/worker/mod.rs +1175 -241
  127. package/sdk-core/crates/sdk-core/src/worker/nexus.rs +150 -23
  128. package/sdk-core/crates/sdk-core/src/worker/slot_provider.rs +2 -2
  129. package/sdk-core/crates/sdk-core/src/worker/tuner/fixed_size.rs +2 -2
  130. package/sdk-core/crates/sdk-core/src/worker/tuner/resource_based.rs +25 -27
  131. package/sdk-core/crates/sdk-core/src/worker/tuner.rs +64 -44
  132. package/sdk-core/crates/sdk-core/src/worker/workflow/driven_workflow.rs +9 -3
  133. package/sdk-core/crates/sdk-core/src/worker/workflow/machines/patch_state_machine.rs +5 -8
  134. package/sdk-core/crates/sdk-core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +21 -22
  135. package/sdk-core/crates/sdk-core/src/worker/workflow/machines/workflow_machines.rs +28 -4
  136. package/sdk-core/crates/sdk-core/src/worker/workflow/managed_run.rs +20 -41
  137. package/sdk-core/crates/sdk-core/src/worker/workflow/mod.rs +50 -9
  138. package/sdk-core/crates/sdk-core/src/worker/workflow/run_cache.rs +4 -7
  139. package/sdk-core/crates/sdk-core/src/worker/workflow/wft_extraction.rs +2 -4
  140. package/sdk-core/crates/sdk-core/src/worker/workflow/wft_poller.rs +8 -9
  141. package/sdk-core/crates/sdk-core/src/worker/workflow/workflow_stream.rs +1 -3
  142. package/sdk-core/crates/sdk-core/tests/activities_procmacro.rs +6 -0
  143. package/sdk-core/crates/sdk-core/tests/activities_trybuild/basic_pass.rs +54 -0
  144. package/sdk-core/crates/sdk-core/tests/activities_trybuild/invalid_self_type_fail.rs +18 -0
  145. package/sdk-core/crates/sdk-core/tests/activities_trybuild/invalid_self_type_fail.stderr +5 -0
  146. package/sdk-core/crates/sdk-core/tests/activities_trybuild/missing_context_fail.rs +14 -0
  147. package/sdk-core/crates/sdk-core/tests/activities_trybuild/missing_context_fail.stderr +5 -0
  148. package/sdk-core/crates/sdk-core/tests/activities_trybuild/multi_arg_pass.rs +48 -0
  149. package/sdk-core/crates/sdk-core/tests/activities_trybuild/no_input_pass.rs +14 -0
  150. package/sdk-core/crates/sdk-core/tests/activities_trybuild/no_return_type_pass.rs +19 -0
  151. package/sdk-core/crates/sdk-core/tests/cloud_tests.rs +14 -5
  152. package/sdk-core/crates/sdk-core/tests/common/activity_functions.rs +55 -0
  153. package/sdk-core/crates/sdk-core/tests/common/mod.rs +281 -236
  154. package/sdk-core/crates/sdk-core/tests/common/workflows.rs +41 -28
  155. package/sdk-core/crates/sdk-core/tests/global_metric_tests.rs +9 -14
  156. package/sdk-core/crates/sdk-core/tests/heavy_tests/fuzzy_workflow.rs +73 -66
  157. package/sdk-core/crates/sdk-core/tests/heavy_tests.rs +306 -268
  158. package/sdk-core/crates/sdk-core/tests/integ_tests/async_activity_client_tests.rs +230 -0
  159. package/sdk-core/crates/sdk-core/tests/integ_tests/client_tests.rs +94 -57
  160. package/sdk-core/crates/sdk-core/tests/integ_tests/data_converter_tests.rs +381 -0
  161. package/sdk-core/crates/sdk-core/tests/integ_tests/ephemeral_server_tests.rs +37 -38
  162. package/sdk-core/crates/sdk-core/tests/integ_tests/heartbeat_tests.rs +49 -40
  163. package/sdk-core/crates/sdk-core/tests/integ_tests/metrics_tests.rs +447 -300
  164. package/sdk-core/crates/sdk-core/tests/integ_tests/pagination_tests.rs +50 -45
  165. package/sdk-core/crates/sdk-core/tests/integ_tests/polling_tests.rs +157 -157
  166. package/sdk-core/crates/sdk-core/tests/integ_tests/queries_tests.rs +103 -89
  167. package/sdk-core/crates/sdk-core/tests/integ_tests/update_tests.rs +609 -463
  168. package/sdk-core/crates/sdk-core/tests/integ_tests/visibility_tests.rs +80 -62
  169. package/sdk-core/crates/sdk-core/tests/integ_tests/worker_heartbeat_tests.rs +389 -265
  170. package/sdk-core/crates/sdk-core/tests/integ_tests/worker_tests.rs +250 -185
  171. package/sdk-core/crates/sdk-core/tests/integ_tests/worker_versioning_tests.rs +52 -49
  172. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_client_tests.rs +180 -0
  173. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/activities.rs +437 -327
  174. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +82 -58
  175. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +56 -30
  176. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +364 -251
  177. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/client_interactions.rs +552 -0
  178. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +110 -46
  179. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +243 -149
  180. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/eager.rs +98 -32
  181. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +1475 -1040
  182. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/modify_wf_properties.rs +73 -43
  183. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/nexus.rs +402 -245
  184. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/patches.rs +343 -207
  185. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/queries.rs +415 -0
  186. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/replay.rs +96 -36
  187. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/resets.rs +155 -140
  188. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/signals.rs +183 -113
  189. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +85 -44
  190. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/timers.rs +142 -48
  191. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +73 -56
  192. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests.rs +365 -242
  193. package/sdk-core/crates/sdk-core/tests/main.rs +22 -16
  194. package/sdk-core/crates/sdk-core/tests/manual_tests.rs +233 -187
  195. package/sdk-core/crates/sdk-core/tests/runner.rs +4 -6
  196. package/sdk-core/crates/sdk-core/tests/shared_tests/mod.rs +73 -27
  197. package/sdk-core/crates/sdk-core/tests/shared_tests/priority.rs +107 -84
  198. package/sdk-core/crates/sdk-core/tests/workflows_procmacro.rs +6 -0
  199. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/async_query_fail.rs +26 -0
  200. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/async_query_fail.stderr +5 -0
  201. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/basic_pass.rs +49 -0
  202. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/minimal_pass.rs +21 -0
  203. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/mut_query_fail.rs +26 -0
  204. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/mut_query_fail.stderr +5 -0
  205. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/sync_run_fail.rs +21 -0
  206. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/sync_run_fail.stderr +5 -0
  207. package/sdk-core/crates/sdk-core-c-bridge/Cargo.toml +8 -1
  208. package/sdk-core/crates/sdk-core-c-bridge/include/temporal-sdk-core-c-bridge.h +37 -26
  209. package/sdk-core/crates/sdk-core-c-bridge/src/client.rs +180 -87
  210. package/sdk-core/crates/sdk-core-c-bridge/src/lib.rs +89 -5
  211. package/sdk-core/crates/sdk-core-c-bridge/src/metric.rs +10 -16
  212. package/sdk-core/crates/sdk-core-c-bridge/src/runtime.rs +59 -67
  213. package/sdk-core/crates/sdk-core-c-bridge/src/testing.rs +10 -10
  214. package/sdk-core/crates/sdk-core-c-bridge/src/tests/context.rs +57 -22
  215. package/sdk-core/crates/sdk-core-c-bridge/src/tests/mod.rs +108 -12
  216. package/sdk-core/crates/sdk-core-c-bridge/src/tests/utils.rs +9 -52
  217. package/sdk-core/crates/sdk-core-c-bridge/src/worker.rs +74 -91
  218. package/sdk-core/rustfmt.toml +2 -1
  219. package/src/client.rs +206 -289
  220. package/src/helpers/try_into_js.rs +88 -2
  221. package/src/metrics.rs +277 -35
  222. package/src/runtime.rs +94 -45
  223. package/src/testing.rs +9 -16
  224. package/src/worker.rs +86 -68
  225. package/ts/native.ts +39 -3
  226. package/sdk-core/crates/client/src/workflow_handle/mod.rs +0 -212
  227. package/sdk-core/crates/common/src/errors.rs +0 -85
  228. package/sdk-core/crates/common/tests/worker_task_types_test.rs +0 -129
  229. package/sdk-core/crates/macros/LICENSE.txt +0 -21
  230. package/sdk-core/crates/sdk/src/activity_context.rs +0 -238
  231. package/sdk-core/crates/sdk/src/app_data.rs +0 -37
  232. package/sdk-core/crates/sdk-core/tests/integ_tests/activity_functions.rs +0 -5
  233. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/appdata_propagation.rs +0 -61
@@ -1,10 +1,8 @@
1
1
  use crate::common::*;
2
- use futures_util::StreamExt;
3
2
  use std::sync::{
4
3
  Arc,
5
4
  atomic::{AtomicUsize, Ordering},
6
5
  };
7
- use temporalio_client::WorkflowOptions;
8
6
  use temporalio_common::protos::{
9
7
  DEFAULT_WORKFLOW_TYPE, TestHistoryBuilder,
10
8
  temporal::api::{
@@ -14,9 +12,31 @@ use temporalio_common::protos::{
14
12
  workflowservice::v1::GetWorkflowExecutionHistoryResponse,
15
13
  },
16
14
  };
17
- use temporalio_sdk::WfContext;
15
+ use temporalio_macros::{workflow, workflow_methods};
16
+ use temporalio_sdk::{SyncWorkflowContext, WorkflowContext, WorkflowResult};
18
17
  use temporalio_sdk_core::test_help::{MockPollCfg, ResponseType, mock_worker_client};
19
18
 
19
+ #[workflow]
20
+ struct WeirdPaginationWf {
21
+ sig_ctr: Arc<AtomicUsize>,
22
+ signal_count: usize,
23
+ }
24
+
25
+ #[workflow_methods(factory_only)]
26
+ impl WeirdPaginationWf {
27
+ #[run(name = DEFAULT_WORKFLOW_TYPE)]
28
+ async fn run(ctx: &mut WorkflowContext<Self>) -> WorkflowResult<()> {
29
+ ctx.wait_condition(|s| s.signal_count >= 2).await;
30
+ Ok(())
31
+ }
32
+
33
+ #[signal(name = "hi")]
34
+ fn hi(&mut self, _ctx: &mut SyncWorkflowContext<Self>, _: ()) {
35
+ self.signal_count += 1;
36
+ self.sig_ctr.fetch_add(1, Ordering::AcqRel);
37
+ }
38
+ }
39
+
20
40
  #[tokio::test]
21
41
  async fn weird_pagination_doesnt_drop_wft_events() {
22
42
  let wf_id = "fakeid";
@@ -97,7 +117,6 @@ async fn weird_pagination_doesnt_drop_wft_events() {
97
117
  })
98
118
  .times(1);
99
119
 
100
- let wf_type = DEFAULT_WORKFLOW_TYPE;
101
120
  let mh = MockPollCfg::from_resp_batches(wf_id, t, [ResponseType::Raw(wft_resp)], mock_client);
102
121
  let mut worker = mock_sdk_cfg(mh, |cfg| {
103
122
  cfg.max_cached_workflows = 2;
@@ -106,32 +125,36 @@ async fn weird_pagination_doesnt_drop_wft_events() {
106
125
 
107
126
  let sig_ctr = Arc::new(AtomicUsize::new(0));
108
127
  let sig_ctr_clone = sig_ctr.clone();
109
- worker.register_wf(wf_type.to_owned(), move |ctx: WfContext| {
110
- let sig_ctr_clone = sig_ctr_clone.clone();
111
- async move {
112
- let mut sigchan = ctx.make_signal_channel("hi");
113
- while sigchan.next().await.is_some() {
114
- if sig_ctr_clone.fetch_add(1, Ordering::AcqRel) == 1 {
115
- break;
116
- }
117
- }
118
- Ok(().into())
119
- }
128
+ worker.register_workflow_with_factory(move || WeirdPaginationWf {
129
+ sig_ctr: sig_ctr_clone.clone(),
130
+ signal_count: 0,
120
131
  });
121
132
 
122
- worker
123
- .submit_wf(
124
- wf_id.to_owned(),
125
- wf_type.to_owned(),
126
- vec![],
127
- WorkflowOptions::default(),
128
- )
129
- .await
130
- .unwrap();
131
133
  worker.run_until_done().await.unwrap();
132
134
  assert_eq!(sig_ctr.load(Ordering::Acquire), 2);
133
135
  }
134
136
 
137
+ #[workflow]
138
+ struct ExtremePaginationWf {
139
+ sig_ctr: Arc<AtomicUsize>,
140
+ signal_count: usize,
141
+ }
142
+
143
+ #[workflow_methods(factory_only)]
144
+ impl ExtremePaginationWf {
145
+ #[run(name = DEFAULT_WORKFLOW_TYPE)]
146
+ async fn run(ctx: &mut WorkflowContext<Self>) -> WorkflowResult<()> {
147
+ ctx.wait_condition(|s| s.signal_count >= 6).await;
148
+ Ok(())
149
+ }
150
+
151
+ #[signal(name = "hi")]
152
+ fn hi(&mut self, _ctx: &mut SyncWorkflowContext<Self>, _: ()) {
153
+ self.signal_count += 1;
154
+ self.sig_ctr.fetch_add(1, Ordering::AcqRel);
155
+ }
156
+ }
157
+
135
158
  #[tokio::test]
136
159
  async fn extreme_pagination_doesnt_drop_wft_events_worker() {
137
160
  let wf_id = "fakeid";
@@ -237,7 +260,6 @@ async fn extreme_pagination_doesnt_drop_wft_events_worker() {
237
260
  wft_resp.previous_started_event_id = 3;
238
261
  wft_resp.started_event_id = 15;
239
262
 
240
- let wf_type = DEFAULT_WORKFLOW_TYPE;
241
263
  let mh = MockPollCfg::from_resp_batches(wf_id, t, [ResponseType::Raw(wft_resp)], mock_client);
242
264
  let mut worker = mock_sdk_cfg(mh, |cfg| {
243
265
  cfg.max_cached_workflows = 2;
@@ -246,28 +268,11 @@ async fn extreme_pagination_doesnt_drop_wft_events_worker() {
246
268
 
247
269
  let sig_ctr = Arc::new(AtomicUsize::new(0));
248
270
  let sig_ctr_clone = sig_ctr.clone();
249
- worker.register_wf(wf_type.to_owned(), move |ctx: WfContext| {
250
- let sig_ctr_clone = sig_ctr_clone.clone();
251
- async move {
252
- let mut sigchan = ctx.make_signal_channel("hi");
253
- while sigchan.next().await.is_some() {
254
- if sig_ctr_clone.fetch_add(1, Ordering::AcqRel) == 5 {
255
- break;
256
- }
257
- }
258
- Ok(().into())
259
- }
271
+ worker.register_workflow_with_factory(move || ExtremePaginationWf {
272
+ sig_ctr: sig_ctr_clone.clone(),
273
+ signal_count: 0,
260
274
  });
261
275
 
262
- worker
263
- .submit_wf(
264
- wf_id.to_owned(),
265
- wf_type.to_owned(),
266
- vec![],
267
- WorkflowOptions::default(),
268
- )
269
- .await
270
- .unwrap();
271
276
  worker.run_until_done().await.unwrap();
272
277
  assert_eq!(sig_ctr.load(Ordering::Acquire), 6);
273
278
  }
@@ -1,9 +1,7 @@
1
- use crate::{
2
- common::{
3
- CoreWfStarter, INTEG_CLIENT_NAME, INTEG_CLIENT_VERSION, get_integ_server_options,
4
- init_core_and_create_wf, init_integ_telem, integ_dev_server_config, integ_worker_config,
5
- },
6
- integ_tests::activity_functions::echo,
1
+ use crate::common::{
2
+ CoreWfStarter, INTEG_CLIENT_NAME, INTEG_CLIENT_VERSION, activity_functions::StdActivities,
3
+ get_integ_client, init_core_and_create_wf, init_integ_telem, integ_dev_server_config,
4
+ integ_worker_config,
7
5
  };
8
6
  use assert_matches::assert_matches;
9
7
  use futures_util::{FutureExt, StreamExt, future::join_all};
@@ -15,12 +13,16 @@ use std::{
15
13
  },
16
14
  time::Duration,
17
15
  };
18
- use temporalio_client::{WfClientExt, WorkflowClientTrait, WorkflowOptions};
16
+ use temporalio_client::{
17
+ Client, Connection, ConnectionOptions, NamespacedClient, UntypedWorkflow,
18
+ WorkflowExecutionInfo, WorkflowStartOptions,
19
+ };
19
20
  use temporalio_common::{
20
- Worker, prost_dur,
21
+ data_converters::RawValue,
22
+ prost_dur,
21
23
  protos::{
22
24
  coresdk::{
23
- AsJsonPayloadExt, IntoCompletion,
25
+ IntoCompletion,
24
26
  activity_task::activity_task as act_task,
25
27
  workflow_activation::{FireTimer, WorkflowActivationJob, workflow_activation_job},
26
28
  workflow_commands::{ActivityCancellationType, RequestCancelActivity, StartTimer},
@@ -29,15 +31,14 @@ use temporalio_common::{
29
31
  temporal::api::enums::v1::EventType,
30
32
  test_utils::schedule_activity_cmd,
31
33
  },
32
- telemetry::{Logger, TelemetryOptionsBuilder},
33
- worker::PollerBehavior,
34
+ telemetry::{CoreLogStreamConsumer, Logger, TelemetryOptions},
34
35
  };
35
- use temporalio_sdk::{ActivityOptions, WfContext};
36
+ use temporalio_macros::{workflow, workflow_methods};
37
+ use temporalio_sdk::{ActivityOptions, WorkflowContext, WorkflowResult};
36
38
  use temporalio_sdk_core::{
37
- ClientOptions, CoreRuntime, RuntimeOptionsBuilder,
38
- ephemeral_server::{TemporalDevServerConfigBuilder, default_cached_download},
39
+ CoreRuntime, PollerBehavior, RuntimeOptions, TunerHolder,
40
+ ephemeral_server::{TemporalDevServerConfig, default_cached_download},
39
41
  init_worker,
40
- telemetry::CoreLogStreamConsumer,
41
42
  test_help::{NAMESPACE, WorkerTestHelpers, drain_pollers_and_shutdown},
42
43
  };
43
44
  use tokio::{sync::Notify, time::timeout};
@@ -125,15 +126,14 @@ async fn out_of_order_completion_doesnt_hang() {
125
126
  async fn switching_worker_client_changes_poll() {
126
127
  // Start two servers
127
128
  info!("Starting servers");
128
- let server_config = TemporalDevServerConfigBuilder::default()
129
+ let server_config = TemporalDevServerConfig::builder()
129
130
  .exe(default_cached_download())
130
131
  // We need to lower the poll timeout so the poll call rolls over
131
132
  .extra_args(vec![
132
133
  "--dynamic-config-value".to_string(),
133
134
  "matching.longPollExpirationInterval=\"1s\"".to_string(),
134
135
  ])
135
- .build()
136
- .unwrap();
136
+ .build();
137
137
  let mut server1 = server_config
138
138
  .start_server_with_output(Stdio::null(), Stdio::null())
139
139
  .await
@@ -146,93 +146,99 @@ async fn switching_worker_client_changes_poll() {
146
146
  let result = std::panic::AssertUnwindSafe(async {
147
147
  // Connect clients to both servers
148
148
  info!("Connecting clients");
149
- let client1 = ClientOptions::builder()
150
- .identity("integ_tester".to_owned())
151
- .client_name("temporal-core".to_owned())
152
- .client_version("0.1.0".to_owned())
153
- .target_url(Url::parse(&format!("http://{}", server1.target)).unwrap())
154
- .build()
155
- .connect("default", None)
156
- .await
157
- .unwrap();
158
- let client2 = ClientOptions::builder()
159
- .identity("integ_tester".to_owned())
160
- .client_name("temporal-core".to_owned())
161
- .client_version("0.1.0".to_owned())
162
- .target_url(Url::parse(&format!("http://{}", server2.target)).unwrap())
163
- .build()
164
- .connect("default", None)
165
- .await
166
- .unwrap();
149
+ let opts1 =
150
+ ConnectionOptions::new(Url::parse(&format!("http://{}", server1.target)).unwrap())
151
+ .identity("integ_tester".to_owned())
152
+ .client_name("temporal-core".to_owned())
153
+ .client_version("0.1.0".to_owned())
154
+ .build();
155
+ let connection1 = Connection::connect(opts1).await.unwrap();
156
+ let client_opts1 = temporalio_client::ClientOptions::new("default").build();
157
+ let client1 = Client::new(connection1, client_opts1).unwrap();
158
+
159
+ let opts2 =
160
+ ConnectionOptions::new(Url::parse(&format!("http://{}", server2.target)).unwrap())
161
+ .identity("integ_tester".to_owned())
162
+ .client_name("temporal-core".to_owned())
163
+ .client_version("0.1.0".to_owned())
164
+ .build();
165
+ let connection2 = Connection::connect(opts2).await.unwrap();
166
+ let client_opts2 = temporalio_client::ClientOptions::new("default").build();
167
+ let client2 = Client::new(connection2, client_opts2).unwrap();
167
168
 
168
169
  // Start a workflow on both servers
169
170
  info!("Starting workflows");
170
171
  let wf1 = client1
171
172
  .start_workflow(
172
- vec![],
173
- "my-task-queue".to_owned(),
174
- "my-workflow-1".to_owned(),
175
- "my-workflow-type".to_owned(),
176
- None,
177
- WorkflowOptions::default(),
173
+ UntypedWorkflow::new("my-workflow-type"),
174
+ RawValue::default(),
175
+ WorkflowStartOptions::new("my-task-queue".to_owned(), "my-workflow-1".to_owned())
176
+ .build(),
178
177
  )
179
178
  .await
180
179
  .unwrap();
180
+ let wf1_run_id = wf1.run_id().unwrap().to_string();
181
181
  let wf2 = client2
182
182
  .start_workflow(
183
- vec![],
184
- "my-task-queue".to_owned(),
185
- "my-workflow-2".to_owned(),
186
- "my-workflow-type".to_owned(),
187
- None,
188
- WorkflowOptions::default(),
183
+ UntypedWorkflow::new("my-workflow-type"),
184
+ RawValue::default(),
185
+ WorkflowStartOptions::new("my-task-queue".to_owned(), "my-workflow-2".to_owned())
186
+ .build(),
189
187
  )
190
188
  .await
191
189
  .unwrap();
190
+ let wf2_run_id = wf2.run_id().unwrap().to_string();
192
191
 
193
192
  // Create a worker only on the first server
193
+ let mut config = integ_worker_config("my-task-queue");
194
+ // We want a cache so we don't get extra remove-job activations
195
+ config.max_cached_workflows = 100_usize;
194
196
  let worker = init_worker(
195
197
  init_integ_telem().unwrap(),
196
- integ_worker_config("my-task-queue")
197
- // We want a cache so we don't get extra remove-job activations
198
- .max_cached_workflows(100_usize)
199
- .build()
200
- .unwrap(),
201
- client1.clone(),
198
+ config,
199
+ client1.connection().clone(),
202
200
  )
203
201
  .unwrap();
204
202
 
205
203
  // Poll for first task, confirm it's first wf, complete, and wait for complete
206
204
  info!("Doing initial poll");
207
205
  let act1 = worker.poll_workflow_activation().await.unwrap();
208
- assert_eq!(wf1.run_id, act1.run_id);
206
+ assert_eq!(wf1_run_id, act1.run_id);
209
207
  worker.complete_execution(&act1.run_id).await;
210
208
  worker.handle_eviction().await;
211
209
  info!("Waiting on first workflow complete");
212
- client1
213
- .get_untyped_workflow_handle("my-workflow-1", wf1.run_id)
214
- .get_workflow_result(Default::default())
215
- .await
216
- .unwrap();
210
+ WorkflowExecutionInfo {
211
+ namespace: client1.namespace(),
212
+ workflow_id: "my-workflow-1".into(),
213
+ run_id: Some(wf1_run_id.clone()),
214
+ first_execution_run_id: None,
215
+ }
216
+ .bind_untyped(client1.clone())
217
+ .get_result(Default::default())
218
+ .await
219
+ .unwrap();
217
220
 
218
221
  // Swap client, poll for next task, confirm it's second wf, and respond w/ empty
219
222
  info!("Replacing client and polling again");
220
- worker
221
- .replace_client(client2.get_client().inner().clone())
222
- .unwrap();
223
+ worker.replace_client(client2.connection().clone()).unwrap();
223
224
  let act2 = worker.poll_workflow_activation().await.unwrap();
224
- assert_eq!(wf2.run_id, act2.run_id);
225
+ assert_eq!(wf2_run_id, act2.run_id);
225
226
  worker.complete_execution(&act2.run_id).await;
226
227
  worker.handle_eviction().await;
227
228
  info!("Waiting on second workflow complete");
228
- client2
229
- .get_untyped_workflow_handle("my-workflow-2", wf2.run_id)
230
- .get_workflow_result(Default::default())
231
- .await
232
- .unwrap();
229
+ WorkflowExecutionInfo {
230
+ namespace: client2.namespace(),
231
+ workflow_id: "my-workflow-2".into(),
232
+ run_id: Some(wf2_run_id),
233
+ first_execution_run_id: None,
234
+ }
235
+ .bind_untyped(client2.clone())
236
+ .get_result(Default::default())
237
+ .await
238
+ .unwrap();
233
239
 
234
240
  // Shutdown workers and servers
235
- drain_pollers_and_shutdown(&(Arc::new(worker) as Arc<dyn Worker>)).await;
241
+ drain_pollers_and_shutdown(&worker).await;
236
242
  })
237
243
  .catch_unwind()
238
244
  .await;
@@ -246,60 +252,65 @@ async fn switching_worker_client_changes_poll() {
246
252
  }
247
253
  }
248
254
 
255
+ #[workflow]
256
+ #[derive(Default)]
257
+ struct OnlyOneWorkflowSlotAndTwoPollers;
258
+
259
+ #[workflow_methods]
260
+ impl OnlyOneWorkflowSlotAndTwoPollers {
261
+ #[run(name = "only_one_workflow_slot_and_two_pollers")]
262
+ async fn run(ctx: &mut WorkflowContext<Self>) -> WorkflowResult<()> {
263
+ for _ in 0..3 {
264
+ let _ = ctx
265
+ .start_activity(
266
+ StdActivities::echo,
267
+ "hi!".to_string(),
268
+ ActivityOptions {
269
+ start_to_close_timeout: Some(Duration::from_secs(5)),
270
+ ..Default::default()
271
+ },
272
+ )
273
+ .await;
274
+ }
275
+ Ok(())
276
+ }
277
+ }
278
+
249
279
  #[rstest::rstest]
250
280
  #[tokio::test]
251
281
  async fn small_workflow_slots_and_pollers(#[values(false, true)] use_autoscaling: bool) {
252
282
  let wf_name = "only_one_workflow_slot_and_two_pollers";
253
283
  let mut starter = CoreWfStarter::new(wf_name);
254
284
  if use_autoscaling {
255
- starter
256
- .worker_config
257
- .workflow_task_poller_behavior(PollerBehavior::Autoscaling {
258
- minimum: 1,
259
- maximum: 5,
260
- initial: 1,
261
- });
285
+ starter.sdk_config.workflow_task_poller_behavior = PollerBehavior::Autoscaling {
286
+ minimum: 1,
287
+ maximum: 5,
288
+ initial: 1,
289
+ };
262
290
  } else {
263
- starter
264
- .worker_config
265
- .workflow_task_poller_behavior(PollerBehavior::SimpleMaximum(2));
291
+ starter.sdk_config.workflow_task_poller_behavior = PollerBehavior::SimpleMaximum(2);
266
292
  }
267
- starter
268
- .worker_config
269
- .max_outstanding_workflow_tasks(2_usize)
270
- .max_outstanding_local_activities(1_usize)
271
- .activity_task_poller_behavior(PollerBehavior::SimpleMaximum(1))
272
- .max_outstanding_activities(1_usize);
293
+ starter.sdk_config.activity_task_poller_behavior = PollerBehavior::SimpleMaximum(1);
294
+ starter.sdk_config.tuner = Arc::new(TunerHolder::fixed_size(2, 1, 1, 1));
295
+ starter.sdk_config.register_activities(StdActivities);
273
296
  let mut worker = starter.worker().await;
274
- worker.register_wf(wf_name.to_owned(), |ctx: WfContext| async move {
275
- for _ in 0..3 {
276
- ctx.activity(ActivityOptions {
277
- activity_type: "echo_activity".to_string(),
278
- start_to_close_timeout: Some(Duration::from_secs(5)),
279
- input: "hi!".as_json_payload().expect("serializes fine"),
280
- ..Default::default()
281
- })
282
- .await;
283
- }
284
- Ok(().into())
285
- });
286
- worker.register_activity("echo_activity", echo);
297
+
298
+ worker.register_workflow::<OnlyOneWorkflowSlotAndTwoPollers>();
299
+ let task_queue = starter.get_task_queue().to_owned();
287
300
  worker
288
- .submit_wf(
289
- starter.get_task_queue(),
290
- wf_name.to_owned(),
291
- vec![],
292
- WorkflowOptions::default(),
301
+ .submit_workflow(
302
+ OnlyOneWorkflowSlotAndTwoPollers::run,
303
+ (),
304
+ WorkflowStartOptions::new(task_queue.clone(), task_queue.clone()).build(),
293
305
  )
294
306
  .await
295
307
  .unwrap();
296
308
  let wf2id = format!("{}-2", starter.get_task_queue());
297
309
  worker
298
- .submit_wf(
299
- wf2id.clone(),
300
- wf_name.to_owned(),
301
- vec![],
302
- WorkflowOptions::default(),
310
+ .submit_workflow(
311
+ OnlyOneWorkflowSlotAndTwoPollers::run,
312
+ (),
313
+ WorkflowStartOptions::new(task_queue.clone(), wf2id.clone()).build(),
303
314
  )
304
315
  .await
305
316
  .unwrap();
@@ -312,16 +323,15 @@ async fn small_workflow_slots_and_pollers(#[values(false, true)] use_autoscaling
312
323
  .iter()
313
324
  .any(|e| e.event_type() == EventType::WorkflowTaskTimedOut);
314
325
  assert!(!any_task_timeouts);
315
- let history = starter
326
+ let events = starter
316
327
  .get_client()
317
328
  .await
318
- .get_workflow_execution_history(wf2id, None, vec![])
329
+ .get_workflow_handle::<UntypedWorkflow>(&wf2id)
330
+ .fetch_history(Default::default())
319
331
  .await
320
332
  .unwrap()
321
- .history
322
- .unwrap();
323
- let any_task_timeouts = history
324
- .events
333
+ .into_events();
334
+ let any_task_timeouts = events
325
335
  .iter()
326
336
  .any(|e| e.event_type() == EventType::WorkflowTaskTimedOut);
327
337
  assert!(!any_task_timeouts);
@@ -330,14 +340,13 @@ async fn small_workflow_slots_and_pollers(#[values(false, true)] use_autoscaling
330
340
  #[tokio::test]
331
341
  async fn replace_client_works_after_polling_failure() {
332
342
  let (log_consumer, mut log_rx) = CoreLogStreamConsumer::new(100);
333
- let telem_opts = TelemetryOptionsBuilder::default()
343
+ let telem_opts = TelemetryOptions::builder()
334
344
  .logging(Logger::Push {
335
345
  filter: "OFF,temporalio_client=DEBUG".into(),
336
346
  consumer: Arc::new(log_consumer),
337
347
  })
338
- .build()
339
- .unwrap();
340
- let runtime_opts = RuntimeOptionsBuilder::default()
348
+ .build();
349
+ let runtime_opts = RuntimeOptions::builder()
341
350
  .telemetry_options(telem_opts)
342
351
  .build()
343
352
  .unwrap();
@@ -376,7 +385,7 @@ async fn replace_client_works_after_polling_failure() {
376
385
 
377
386
  // Starting a second dev server for the worker to connect to initially. Later this server will be shut down
378
387
  // and the worker client replaced with a client connected to the main integration test server.
379
- let initial_server_config = integ_dev_server_config(vec![]).build().unwrap();
388
+ let initial_server_config = integ_dev_server_config(vec![], false);
380
389
  let initial_server = Arc::new(Mutex::new(Some(
381
390
  initial_server_config
382
391
  .start_server_with_output(Stdio::null(), Stdio::null())
@@ -392,49 +401,40 @@ async fn replace_client_works_after_polling_failure() {
392
401
  "http://{}",
393
402
  initial_server.lock().unwrap().as_ref().unwrap().target
394
403
  );
395
- let client_for_initial_server = ClientOptions::builder()
404
+ let opts = ConnectionOptions::new(Url::parse(&initial_server_target).unwrap())
396
405
  .identity("client_for_initial_server".to_string())
397
- .target_url(Url::parse(&initial_server_target).unwrap())
398
406
  .client_name(INTEG_CLIENT_NAME.to_string())
399
407
  .client_version(INTEG_CLIENT_VERSION.to_string())
400
- .build()
401
- .connect(NAMESPACE, rt.telemetry().get_temporal_metric_meter())
402
- .await
403
- .unwrap();
408
+ .build();
409
+ let connection = Connection::connect(opts).await.unwrap();
410
+ let client_opts = temporalio_client::ClientOptions::new(NAMESPACE).build();
411
+ let client_for_initial_server = Client::new(connection, client_opts).unwrap();
404
412
 
405
413
  let wf_name = "replace_client_works_after_polling_failure";
406
414
  let task_queue = format!("{wf_name}_tq");
407
415
 
416
+ let mut config = integ_worker_config(&task_queue);
417
+ config.max_cached_workflows = 100_usize;
408
418
  let worker = Arc::new(
409
- init_worker(
410
- &rt,
411
- integ_worker_config(&task_queue)
412
- .max_cached_workflows(100_usize)
413
- .build()
414
- .unwrap(),
415
- client_for_initial_server.clone(),
416
- )
417
- .unwrap(),
419
+ init_worker(&rt, config, client_for_initial_server.connection().clone()).unwrap(),
418
420
  );
419
421
 
420
422
  // Polling the initial server the first time is successful.
421
423
  let wf_1 = client_for_initial_server
422
424
  .start_workflow(
423
- vec![],
424
- task_queue.clone(),
425
- wf_name.into(),
426
- wf_name.into(),
427
- None,
428
- WorkflowOptions::default(),
425
+ UntypedWorkflow::new(wf_name),
426
+ RawValue::default(),
427
+ WorkflowStartOptions::new(task_queue.clone(), wf_name.to_string()).build(),
429
428
  )
430
429
  .await
431
430
  .unwrap();
431
+ let wf_1_run_id = wf_1.run_id().unwrap().to_string();
432
432
  let act_1 =
433
433
  tokio::time::timeout(Duration::from_secs(60), worker.poll_workflow_activation())
434
434
  .await
435
435
  .unwrap()
436
436
  .unwrap();
437
- assert_eq!(act_1.run_id, wf_1.run_id);
437
+ assert_eq!(act_1.run_id, wf_1_run_id);
438
438
 
439
439
  // Initial server is shut down.
440
440
  let mut server = initial_server.lock().unwrap().take().unwrap();
@@ -457,34 +457,34 @@ async fn replace_client_works_after_polling_failure() {
457
457
  .unwrap();
458
458
 
459
459
  // Start a new WF on main integration server.
460
- let client_for_integ_server = get_integ_server_options()
461
- .connect(NAMESPACE, rt.telemetry().get_temporal_metric_meter())
462
- .await
463
- .unwrap();
460
+ let client_for_integ_server = get_integ_client(
461
+ NAMESPACE.to_string(),
462
+ rt.telemetry().get_temporal_metric_meter(),
463
+ )
464
+ .await;
464
465
  let wf_2 = client_for_integ_server
465
466
  .start_workflow(
466
- vec![],
467
- task_queue,
468
- wf_name.into(),
469
- wf_name.into(),
470
- None,
471
- WorkflowOptions {
472
- execution_timeout: Some(Duration::from_secs(60)),
473
- ..Default::default()
474
- },
467
+ UntypedWorkflow::new(wf_name),
468
+ RawValue::default(),
469
+ WorkflowStartOptions::new(task_queue, wf_name)
470
+ .execution_timeout(Duration::from_secs(60))
471
+ .build(),
475
472
  )
476
473
  .await
477
474
  .unwrap();
475
+ let wf_2_run_id = wf_2.run_id().unwrap().to_string();
478
476
 
479
477
  // Switch worker over to the main integration server.
480
478
  // The polling started on the initial server should complete with a task from the new server.
481
- worker.replace_client(client_for_integ_server).unwrap();
479
+ worker
480
+ .replace_client(client_for_integ_server.connection().clone())
481
+ .unwrap();
482
482
  let act_2 = tokio::time::timeout(Duration::from_secs(60), poll_join_handle)
483
483
  .await
484
484
  .unwrap()
485
485
  .unwrap()
486
486
  .unwrap();
487
- assert_eq!(act_2.run_id, wf_2.run_id);
487
+ assert_eq!(act_2.run_id, wf_2_run_id);
488
488
  })
489
489
  }
490
490
  .catch_unwind()