@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
@@ -12,8 +12,9 @@ mod shared_tests;
12
12
 
13
13
  #[cfg(test)]
14
14
  mod integ_tests {
15
- mod activity_functions;
15
+ mod async_activity_client_tests;
16
16
  mod client_tests;
17
+ mod data_converter_tests;
17
18
  mod ephemeral_server_tests;
18
19
  mod heartbeat_tests;
19
20
  mod metrics_tests;
@@ -25,6 +26,7 @@ mod integ_tests {
25
26
  mod worker_heartbeat_tests;
26
27
  mod worker_tests;
27
28
  mod worker_versioning_tests;
29
+ mod workflow_client_tests;
28
30
  mod workflow_tests;
29
31
 
30
32
  use crate::common::{
@@ -32,16 +34,19 @@ mod integ_tests {
32
34
  get_integ_telem_options, rand_6_chars,
33
35
  };
34
36
  use std::time::Duration;
35
- use temporalio_client::{NamespacedClient, WorkflowService};
37
+ use temporalio_client::{
38
+ Connection, NamespacedClient,
39
+ grpc::{OperatorService, WorkflowService},
40
+ };
36
41
  use temporalio_common::{
37
42
  protos::temporal::api::{
38
43
  nexus::v1::{EndpointSpec, EndpointTarget, endpoint_target},
39
44
  operatorservice::v1::CreateNexusEndpointRequest,
40
45
  workflowservice::v1::ListNamespacesRequest,
41
46
  },
42
- worker::WorkerConfigBuilder,
47
+ worker::WorkerTaskTypes,
43
48
  };
44
- use temporalio_sdk_core::{CoreRuntime, init_worker};
49
+ use temporalio_sdk_core::{CoreRuntime, WorkerConfig, WorkerVersioningStrategy, init_worker};
45
50
  use tonic::IntoRequest;
46
51
 
47
52
  // Create a worker like a bridge would (unwraps aside)
@@ -52,25 +57,25 @@ mod integ_tests {
52
57
  let runtime =
53
58
  CoreRuntime::new_assume_tokio(get_integ_runtime_options(get_integ_telem_options()))
54
59
  .unwrap();
55
- let mut retrying_client = opts
56
- .connect_no_namespace(runtime.telemetry().get_temporal_metric_meter())
57
- .await
58
- .unwrap();
60
+ let mut connection = Connection::connect(opts).await.unwrap();
59
61
 
60
62
  let _worker = init_worker(
61
63
  &runtime,
62
- WorkerConfigBuilder::default()
64
+ WorkerConfig::builder()
63
65
  .namespace("default")
64
66
  .task_queue("Wheee!")
67
+ .task_types(WorkerTaskTypes::all())
68
+ .versioning_strategy(WorkerVersioningStrategy::None {
69
+ build_id: "test".to_owned(),
70
+ })
65
71
  .build()
66
72
  .unwrap(),
67
- // clone the client if you intend to use it later. Strip off the retry wrapper since
68
- // worker will assert its own
69
- retrying_client.clone(),
73
+ // clone the connection if you intend to use it later
74
+ connection.clone(),
70
75
  );
71
76
 
72
- // Do things with worker or client
73
- let _ = retrying_client
77
+ // Do things with worker or connection
78
+ let _ = connection
74
79
  .list_namespaces(ListNamespacesRequest::default().into_request())
75
80
  .await;
76
81
  }
@@ -78,8 +83,9 @@ mod integ_tests {
78
83
  pub(crate) async fn mk_nexus_endpoint(starter: &mut CoreWfStarter) -> String {
79
84
  let client = starter.get_client().await;
80
85
  let endpoint = format!("mycoolendpoint-{}", rand_6_chars());
81
- let mut op_client = client.get_client().inner().operator_svc();
82
- op_client
86
+ client
87
+ .connection()
88
+ .clone()
83
89
  .create_nexus_endpoint(
84
90
  CreateNexusEndpointRequest {
85
91
  spec: Some(EndpointSpec {
@@ -17,20 +17,114 @@ use rand::{Rng, SeedableRng};
17
17
  use std::{
18
18
  mem,
19
19
  net::SocketAddr,
20
+ sync::Arc,
20
21
  time::{Duration, Instant},
21
22
  };
22
23
  use temporalio_client::{
23
- GetWorkflowResultOptions, WfClientExt, WorkflowClientTrait, WorkflowOptions,
24
+ NamespacedClient, UntypedSignal, UntypedWorkflow, WorkflowExecutionInfo,
25
+ WorkflowGetResultOptions, WorkflowSignalOptions, WorkflowStartOptions,
24
26
  };
25
27
  use temporalio_common::{
26
- protos::coresdk::AsJsonPayloadExt,
27
- telemetry::PrometheusExporterOptionsBuilder,
28
- worker::{PollerBehavior, WorkerTaskTypes},
28
+ data_converters::RawValue, telemetry::PrometheusExporterOptions, worker::WorkerTaskTypes,
29
29
  };
30
- use temporalio_sdk::{ActContext, ActivityOptions, WfContext};
31
- use temporalio_sdk_core::CoreRuntime;
30
+ use temporalio_macros::{activities, workflow, workflow_methods};
31
+ use temporalio_sdk::{
32
+ ActivityOptions, SyncWorkflowContext, WorkflowContext, WorkflowResult,
33
+ activities::{ActivityContext, ActivityError},
34
+ };
35
+ use temporalio_sdk_core::{CoreRuntime, PollerBehavior, TunerHolder};
32
36
  use tracing::info;
33
37
 
38
+ struct JitteryEchoActivities;
39
+ #[activities]
40
+ impl JitteryEchoActivities {
41
+ #[activity]
42
+ async fn echo(_ctx: ActivityContext, echo: String) -> Result<String, ActivityError> {
43
+ // Add some jitter to completions
44
+ let rand_millis = rand::rng().random_range(0..500);
45
+ tokio::time::sleep(Duration::from_millis(rand_millis)).await;
46
+ Ok(echo)
47
+ }
48
+ }
49
+
50
+ #[workflow]
51
+ #[derive(Default)]
52
+ struct PollerLoadSpikyWf;
53
+
54
+ #[workflow_methods]
55
+ impl PollerLoadSpikyWf {
56
+ #[run(name = "poller_load")]
57
+ async fn run(ctx: &mut WorkflowContext<Self>) -> WorkflowResult<()> {
58
+ for _ in 0..5 {
59
+ let _ = ctx
60
+ .start_activity(
61
+ JitteryEchoActivities::echo,
62
+ "hi!".to_string(),
63
+ ActivityOptions {
64
+ start_to_close_timeout: Some(Duration::from_secs(5)),
65
+ ..Default::default()
66
+ },
67
+ )
68
+ .await;
69
+ }
70
+
71
+ Ok(())
72
+ }
73
+
74
+ #[signal(name = "signame")]
75
+ fn drain_signal(&mut self, _ctx: &mut SyncWorkflowContext<Self>, _: ()) {}
76
+ }
77
+
78
+ #[workflow]
79
+ #[derive(Default)]
80
+ struct PollerLoadSustainedWf;
81
+
82
+ #[workflow_methods]
83
+ impl PollerLoadSustainedWf {
84
+ #[run(name = "poller_load")]
85
+ async fn run(ctx: &mut WorkflowContext<Self>) -> WorkflowResult<()> {
86
+ let rs = ctx.random_seed();
87
+ let mut rand = rand::rngs::SmallRng::seed_from_u64(rs);
88
+ for _ in 0..100 {
89
+ let jitterms = rand.random_range(1000..3000);
90
+ ctx.timer(Duration::from_millis(jitterms)).await;
91
+ }
92
+
93
+ Ok(())
94
+ }
95
+
96
+ #[signal(name = "signame")]
97
+ fn drain_signal(&mut self, _ctx: &mut SyncWorkflowContext<Self>, _: ()) {}
98
+ }
99
+
100
+ #[workflow]
101
+ #[derive(Default)]
102
+ struct PollerLoadSpikeThenSustainedWf;
103
+
104
+ #[workflow_methods]
105
+ impl PollerLoadSpikeThenSustainedWf {
106
+ #[run(name = "poller_load")]
107
+ async fn run(ctx: &mut WorkflowContext<Self>) -> WorkflowResult<()> {
108
+ for _ in 0..5 {
109
+ let _ = ctx
110
+ .start_activity(
111
+ JitteryEchoActivities::echo,
112
+ "hi!".to_string(),
113
+ ActivityOptions {
114
+ start_to_close_timeout: Some(Duration::from_secs(5)),
115
+ ..Default::default()
116
+ },
117
+ )
118
+ .await;
119
+ }
120
+
121
+ Ok(())
122
+ }
123
+
124
+ #[signal(name = "signame")]
125
+ fn drain_signal(&mut self, _ctx: &mut SyncWorkflowContext<Self>, _: ()) {}
126
+ }
127
+
34
128
  #[tokio::test]
35
129
  async fn poller_load_spiky() {
36
130
  const SIGNAME: &str = "signame";
@@ -39,62 +133,34 @@ async fn poller_load_spiky() {
39
133
  let (telemopts, addr, _aborter) =
40
134
  if std::env::var("PAR_JOBNUM").unwrap_or("1".to_string()) == "1" {
41
135
  prom_metrics(Some(
42
- PrometheusExporterOptionsBuilder::default()
136
+ PrometheusExporterOptions::builder()
43
137
  .socket_addr(SocketAddr::V4("0.0.0.0:9999".parse().unwrap()))
44
- .build()
45
- .unwrap(),
138
+ .build(),
46
139
  ))
47
140
  } else {
48
141
  prom_metrics(None)
49
142
  };
50
143
  let rt = CoreRuntime::new_assume_tokio(get_integ_runtime_options(telemopts)).unwrap();
51
144
  let mut starter = CoreWfStarter::new_with_runtime("poller_load", rt);
52
- starter
53
- .worker_config
54
- .max_cached_workflows(5000_usize)
55
- .max_outstanding_workflow_tasks(1000_usize)
56
- .max_outstanding_activities(1000_usize)
57
- .workflow_task_poller_behavior(PollerBehavior::Autoscaling {
58
- minimum: 1,
59
- maximum: 200,
60
- initial: 5,
61
- })
62
- .activity_task_poller_behavior(PollerBehavior::Autoscaling {
63
- minimum: 1,
64
- maximum: 200,
65
- initial: 5,
66
- });
145
+ starter.sdk_config.max_cached_workflows = 5000;
146
+ starter.sdk_config.tuner = Arc::new(TunerHolder::fixed_size(1000, 1000, 100, 100));
147
+ starter.sdk_config.workflow_task_poller_behavior = PollerBehavior::Autoscaling {
148
+ minimum: 1,
149
+ maximum: 200,
150
+ initial: 5,
151
+ };
152
+ starter.sdk_config.activity_task_poller_behavior = PollerBehavior::Autoscaling {
153
+ minimum: 1,
154
+ maximum: 200,
155
+ initial: 5,
156
+ };
67
157
  let mut worker = starter.worker().await;
68
158
  let submitter = worker.get_submitter_handle();
69
- worker.register_wf(wf_name.to_owned(), |ctx: WfContext| async move {
70
- let sigchan = ctx.make_signal_channel(SIGNAME).map(Ok);
71
- let drained_fut = sigchan.forward(sink::drain());
72
-
73
- let real_stuff = async move {
74
- for _ in 0..5 {
75
- ctx.activity(ActivityOptions {
76
- activity_type: "echo".to_string(),
77
- start_to_close_timeout: Some(Duration::from_secs(5)),
78
- input: "hi!".as_json_payload().expect("serializes fine"),
79
- ..Default::default()
80
- })
81
- .await;
82
- }
83
- };
84
- tokio::select! {
85
- _ = drained_fut => {}
86
- _ = real_stuff => {}
87
- }
88
159
 
89
- Ok(().into())
90
- });
91
- worker.register_activity("echo", |_: ActContext, echo: String| async move {
92
- // Add some jitter to completions
93
- let rand_millis = rand::rng().random_range(0..500);
94
- tokio::time::sleep(Duration::from_millis(rand_millis)).await;
95
- Ok(echo)
96
- });
160
+ worker.register_activities(JitteryEchoActivities);
161
+ worker.register_workflow::<PollerLoadSpikyWf>();
97
162
  let client = starter.get_client().await;
163
+ let tq = starter.get_task_queue().to_owned();
98
164
 
99
165
  info!("Prom bound to {:?}", addr);
100
166
 
@@ -104,17 +170,23 @@ async fn poller_load_spiky() {
104
170
  let wfid = format!("{wf_name}_{i}-{}", rand_6_chars());
105
171
  let rid = worker
106
172
  .submit_wf(
107
- wfid.clone(),
108
173
  wf_name.to_owned(),
109
174
  vec![],
110
- WorkflowOptions {
111
- execution_timeout: Some(Duration::from_secs(120)),
112
- ..Default::default()
113
- },
175
+ WorkflowStartOptions::new(tq.clone(), wfid.clone())
176
+ .execution_timeout(Duration::from_secs(120))
177
+ .build(),
114
178
  )
115
179
  .await
116
180
  .unwrap();
117
- workflow_handles.push(client.get_untyped_workflow_handle(wfid, rid));
181
+ workflow_handles.push(
182
+ WorkflowExecutionInfo {
183
+ namespace: client.namespace(),
184
+ workflow_id: wfid,
185
+ run_id: Some(rid),
186
+ first_execution_run_id: None,
187
+ }
188
+ .bind_untyped(client.clone()),
189
+ );
118
190
  }
119
191
  info!("Done starting workflows");
120
192
  let start_processing = Instant::now();
@@ -123,9 +195,7 @@ async fn poller_load_spiky() {
123
195
  let all_workflows_are_done = async {
124
196
  stream::iter(mem::take(&mut workflow_handles))
125
197
  .for_each_concurrent(25, |handle| async move {
126
- let _ = handle
127
- .get_workflow_result(GetWorkflowResultOptions::default())
128
- .await;
198
+ let _ = handle.get_result(WorkflowGetResultOptions::default()).await;
129
199
  })
130
200
  .await;
131
201
  info!("Initial load ran for {:?}", start_processing.elapsed());
@@ -138,23 +208,27 @@ async fn poller_load_spiky() {
138
208
  let wfid = format!("{wf_name}_2_{i}-{}", rand_6_chars());
139
209
  let rid = submitter
140
210
  .submit_wf(
141
- wfid.clone(),
142
211
  wf_name.to_owned(),
143
212
  vec![],
144
- WorkflowOptions {
145
- execution_timeout: Some(Duration::from_secs(120)),
146
- ..Default::default()
147
- },
213
+ WorkflowStartOptions::new(tq.clone(), wfid.clone())
214
+ .execution_timeout(Duration::from_secs(120))
215
+ .build(),
148
216
  )
149
217
  .await
150
218
  .unwrap();
151
- workflow_handles.push(client.get_untyped_workflow_handle(wfid, rid));
219
+ workflow_handles.push(
220
+ WorkflowExecutionInfo {
221
+ namespace: client.namespace(),
222
+ workflow_id: wfid,
223
+ run_id: Some(rid),
224
+ first_execution_run_id: None,
225
+ }
226
+ .bind_untyped(client.clone()),
227
+ );
152
228
  }
153
229
  stream::iter(workflow_handles)
154
230
  .for_each_concurrent(25, |handle| async move {
155
- let _ = handle
156
- .get_workflow_result(GetWorkflowResultOptions::default())
157
- .await;
231
+ let _ = handle.get_result(WorkflowGetResultOptions::default()).await;
158
232
  })
159
233
  .await;
160
234
  info!("Second load ran for {:?}", start_processing.elapsed());
@@ -167,13 +241,17 @@ async fn poller_load_spiky() {
167
241
  loop {
168
242
  let sends: FuturesUnordered<_> = (0..num_workflows)
169
243
  .map(|i| {
170
- client.signal_workflow_execution(
171
- format!("{wf_name}_{i}"),
172
- "".to_string(),
173
- SIGNAME.to_string(),
174
- None,
175
- None,
176
- )
244
+ let handle =
245
+ client.get_workflow_handle::<UntypedWorkflow>(format!("{wf_name}_{i}"));
246
+ async move {
247
+ handle
248
+ .signal(
249
+ UntypedSignal::new(SIGNAME),
250
+ RawValue::empty(),
251
+ WorkflowSignalOptions::default(),
252
+ )
253
+ .await
254
+ }
177
255
  })
178
256
  .collect();
179
257
  sends
@@ -192,53 +270,32 @@ async fn poller_load_spiky() {
192
270
 
193
271
  #[tokio::test]
194
272
  async fn poller_load_sustained() {
195
- const SIGNAME: &str = "signame";
196
273
  let num_workflows = 150;
197
274
  let wf_name = "poller_load";
198
275
  let (telemopts, addr, _aborter) =
199
276
  if std::env::var("PAR_JOBNUM").unwrap_or("1".to_string()) == "1" {
200
277
  prom_metrics(Some(
201
- PrometheusExporterOptionsBuilder::default()
278
+ PrometheusExporterOptions::builder()
202
279
  .socket_addr(SocketAddr::V4("0.0.0.0:9999".parse().unwrap()))
203
- .build()
204
- .unwrap(),
280
+ .build(),
205
281
  ))
206
282
  } else {
207
283
  prom_metrics(None)
208
284
  };
209
285
  let rt = CoreRuntime::new_assume_tokio(get_integ_runtime_options(telemopts)).unwrap();
210
286
  let mut starter = CoreWfStarter::new_with_runtime("poller_load", rt);
211
- starter
212
- .worker_config
213
- .max_cached_workflows(5000_usize)
214
- .max_outstanding_workflow_tasks(1000_usize)
215
- .workflow_task_poller_behavior(PollerBehavior::Autoscaling {
216
- minimum: 1,
217
- maximum: 200,
218
- initial: 5,
219
- })
220
- .task_types(WorkerTaskTypes::workflow_only());
287
+ starter.sdk_config.max_cached_workflows = 5000;
288
+ starter.sdk_config.tuner = Arc::new(TunerHolder::fixed_size(1000, 100, 100, 100));
289
+ starter.sdk_config.workflow_task_poller_behavior = PollerBehavior::Autoscaling {
290
+ minimum: 1,
291
+ maximum: 200,
292
+ initial: 5,
293
+ };
294
+ starter.sdk_config.task_types = WorkerTaskTypes::workflow_only();
221
295
  let mut worker = starter.worker().await;
222
- worker.register_wf(wf_name.to_owned(), |ctx: WfContext| async move {
223
- let sigchan = ctx.make_signal_channel(SIGNAME).map(Ok);
224
- let drained_fut = sigchan.forward(sink::drain());
225
-
226
- let real_stuff = async move {
227
- let rs = ctx.random_seed();
228
- let mut rand = rand::rngs::SmallRng::seed_from_u64(rs);
229
- for _ in 0..100 {
230
- let jitterms = rand.random_range(1000..3000);
231
- ctx.timer(Duration::from_millis(jitterms)).await;
232
- }
233
- };
234
- tokio::select! {
235
- _ = drained_fut => {}
236
- _ = real_stuff => {}
237
- }
238
-
239
- Ok(().into())
240
- });
296
+ worker.register_workflow::<PollerLoadSustainedWf>();
241
297
  let client = starter.get_client().await;
298
+ let tq = starter.get_task_queue().to_owned();
242
299
 
243
300
  info!("Prom bound to {:?}", addr);
244
301
 
@@ -248,17 +305,23 @@ async fn poller_load_sustained() {
248
305
  let wfid = format!("{wf_name}_{i}-{}", rand_6_chars());
249
306
  let rid = worker
250
307
  .submit_wf(
251
- wfid.clone(),
252
308
  wf_name.to_owned(),
253
309
  vec![],
254
- WorkflowOptions {
255
- execution_timeout: Some(Duration::from_secs(800)),
256
- ..Default::default()
257
- },
310
+ WorkflowStartOptions::new(tq.clone(), wfid.clone())
311
+ .execution_timeout(Duration::from_secs(800))
312
+ .build(),
258
313
  )
259
314
  .await
260
315
  .unwrap();
261
- workflow_handles.push(client.get_untyped_workflow_handle(wfid, rid));
316
+ workflow_handles.push(
317
+ WorkflowExecutionInfo {
318
+ namespace: client.namespace(),
319
+ workflow_id: wfid,
320
+ run_id: Some(rid),
321
+ first_execution_run_id: None,
322
+ }
323
+ .bind_untyped(client.clone()),
324
+ );
262
325
  }
263
326
  info!("Done starting workflows");
264
327
  let start_processing = Instant::now();
@@ -266,9 +329,7 @@ async fn poller_load_sustained() {
266
329
  let all_workflows_are_done = async {
267
330
  stream::iter(mem::take(&mut workflow_handles))
268
331
  .for_each_concurrent(25, |handle| async move {
269
- let _ = handle
270
- .get_workflow_result(GetWorkflowResultOptions::default())
271
- .await;
332
+ let _ = handle.get_result(WorkflowGetResultOptions::default()).await;
272
333
  })
273
334
  .await;
274
335
  info!("Initial load ran for {:?}", start_processing.elapsed());
@@ -289,61 +350,34 @@ async fn poller_load_spike_then_sustained() {
289
350
  let (telemopts, addr, _aborter) =
290
351
  if std::env::var("PAR_JOBNUM").unwrap_or("1".to_string()) == "1" {
291
352
  prom_metrics(Some(
292
- PrometheusExporterOptionsBuilder::default()
353
+ PrometheusExporterOptions::builder()
293
354
  .socket_addr(SocketAddr::V4("0.0.0.0:9999".parse().unwrap()))
294
- .build()
295
- .unwrap(),
355
+ .build(),
296
356
  ))
297
357
  } else {
298
358
  prom_metrics(None)
299
359
  };
300
360
  let rt = CoreRuntime::new_assume_tokio(get_integ_runtime_options(telemopts)).unwrap();
301
361
  let mut starter = CoreWfStarter::new_with_runtime("poller_load", rt);
302
- starter
303
- .worker_config
304
- .max_cached_workflows(5000_usize)
305
- .max_outstanding_workflow_tasks(1000_usize)
306
- .workflow_task_poller_behavior(PollerBehavior::Autoscaling {
307
- minimum: 1,
308
- maximum: 200,
309
- initial: 5,
310
- })
311
- .activity_task_poller_behavior(PollerBehavior::Autoscaling {
312
- minimum: 1,
313
- maximum: 200,
314
- initial: 5,
315
- });
362
+ starter.sdk_config.max_cached_workflows = 5000;
363
+ starter.sdk_config.tuner = Arc::new(TunerHolder::fixed_size(1000, 100, 100, 100));
364
+ starter.sdk_config.workflow_task_poller_behavior = PollerBehavior::Autoscaling {
365
+ minimum: 1,
366
+ maximum: 200,
367
+ initial: 5,
368
+ };
369
+ starter.sdk_config.activity_task_poller_behavior = PollerBehavior::Autoscaling {
370
+ minimum: 1,
371
+ maximum: 200,
372
+ initial: 5,
373
+ };
316
374
  let mut worker = starter.worker().await;
317
375
  let submitter = worker.get_submitter_handle();
318
- worker.register_wf(wf_name.to_owned(), |ctx: WfContext| async move {
319
- let sigchan = ctx.make_signal_channel(SIGNAME).map(Ok);
320
- let drained_fut = sigchan.forward(sink::drain());
321
-
322
- let real_stuff = async move {
323
- for _ in 0..5 {
324
- ctx.activity(ActivityOptions {
325
- activity_type: "echo".to_string(),
326
- start_to_close_timeout: Some(Duration::from_secs(5)),
327
- input: "hi!".as_json_payload().expect("serializes fine"),
328
- ..Default::default()
329
- })
330
- .await;
331
- }
332
- };
333
- tokio::select! {
334
- _ = drained_fut => {}
335
- _ = real_stuff => {}
336
- }
337
376
 
338
- Ok(().into())
339
- });
340
- worker.register_activity("echo", |_: ActContext, echo: String| async move {
341
- // Add some jitter to completions
342
- let rand_millis = rand::rng().random_range(0..500);
343
- tokio::time::sleep(Duration::from_millis(rand_millis)).await;
344
- Ok(echo)
345
- });
377
+ worker.register_activities(JitteryEchoActivities);
378
+ worker.register_workflow::<PollerLoadSpikeThenSustainedWf>();
346
379
  let client = starter.get_client().await;
380
+ let tq = starter.get_task_queue().to_owned();
347
381
 
348
382
  info!("Prom bound to {:?}", addr);
349
383
 
@@ -353,17 +387,23 @@ async fn poller_load_spike_then_sustained() {
353
387
  let wfid = format!("{wf_name}_{i}-{}", rand_6_chars());
354
388
  let rid = worker
355
389
  .submit_wf(
356
- wfid.clone(),
357
390
  wf_name.to_owned(),
358
391
  vec![],
359
- WorkflowOptions {
360
- execution_timeout: Some(Duration::from_secs(100)),
361
- ..Default::default()
362
- },
392
+ WorkflowStartOptions::new(tq.clone(), wfid.clone())
393
+ .execution_timeout(Duration::from_secs(100))
394
+ .build(),
363
395
  )
364
396
  .await
365
397
  .unwrap();
366
- workflow_handles.push(client.get_untyped_workflow_handle(wfid, rid));
398
+ workflow_handles.push(
399
+ WorkflowExecutionInfo {
400
+ namespace: client.namespace(),
401
+ workflow_id: wfid,
402
+ run_id: Some(rid),
403
+ first_execution_run_id: None,
404
+ }
405
+ .bind_untyped(client.clone()),
406
+ );
367
407
  }
368
408
  info!("Done starting workflows");
369
409
  let start_processing = Instant::now();
@@ -372,9 +412,7 @@ async fn poller_load_spike_then_sustained() {
372
412
  let all_workflows_are_done = async {
373
413
  stream::iter(mem::take(&mut workflow_handles))
374
414
  .for_each_concurrent(25, |handle| async move {
375
- let _ = handle
376
- .get_workflow_result(GetWorkflowResultOptions::default())
377
- .await;
415
+ let _ = handle.get_result(WorkflowGetResultOptions::default()).await;
378
416
  })
379
417
  .await;
380
418
  info!("Initial load ran for {:?}", start_processing.elapsed());
@@ -386,24 +424,28 @@ async fn poller_load_spike_then_sustained() {
386
424
  let wfid = format!("{wf_name}_2_{i}-{}", rand_6_chars());
387
425
  let rid = submitter
388
426
  .submit_wf(
389
- wfid.clone(),
390
427
  wf_name.to_owned(),
391
428
  vec![],
392
- WorkflowOptions {
393
- execution_timeout: Some(Duration::from_secs(100)),
394
- ..Default::default()
395
- },
429
+ WorkflowStartOptions::new(tq.clone(), wfid.clone())
430
+ .execution_timeout(Duration::from_secs(100))
431
+ .build(),
396
432
  )
397
433
  .await
398
434
  .unwrap();
399
- workflow_handles.push(client.get_untyped_workflow_handle(wfid, rid));
435
+ workflow_handles.push(
436
+ WorkflowExecutionInfo {
437
+ namespace: client.namespace(),
438
+ workflow_id: wfid,
439
+ run_id: Some(rid),
440
+ first_execution_run_id: None,
441
+ }
442
+ .bind_untyped(client.clone()),
443
+ );
400
444
  tokio::time::sleep(Duration::from_secs(1)).await;
401
445
  }
402
446
  stream::iter(workflow_handles)
403
447
  .for_each_concurrent(25, |handle| async move {
404
- let _ = handle
405
- .get_workflow_result(GetWorkflowResultOptions::default())
406
- .await;
448
+ let _ = handle.get_result(WorkflowGetResultOptions::default()).await;
407
449
  })
408
450
  .await;
409
451
  info!("Second load ran for {:?}", start_processing.elapsed());
@@ -416,13 +458,17 @@ async fn poller_load_spike_then_sustained() {
416
458
  loop {
417
459
  let sends: FuturesUnordered<_> = (0..num_workflows)
418
460
  .map(|i| {
419
- client.signal_workflow_execution(
420
- format!("{wf_name}_{i}"),
421
- "".to_string(),
422
- SIGNAME.to_string(),
423
- None,
424
- None,
425
- )
461
+ let handle =
462
+ client.get_workflow_handle::<UntypedWorkflow>(format!("{wf_name}_{i}"));
463
+ async move {
464
+ handle
465
+ .signal(
466
+ UntypedSignal::new(SIGNAME),
467
+ RawValue::empty(),
468
+ WorkflowSignalOptions::default(),
469
+ )
470
+ .await
471
+ }
426
472
  })
427
473
  .collect();
428
474
  sends