@temporalio/core-bridge 1.15.0 → 1.16.1

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 (209) hide show
  1. package/Cargo.lock +172 -70
  2. package/lib/native.d.ts +1 -1
  3. package/package.json +2 -2
  4. package/releases/aarch64-apple-darwin/index.node +0 -0
  5. package/releases/aarch64-unknown-linux-gnu/index.node +0 -0
  6. package/releases/x86_64-apple-darwin/index.node +0 -0
  7. package/releases/x86_64-pc-windows-msvc/index.node +0 -0
  8. package/releases/x86_64-unknown-linux-gnu/index.node +0 -0
  9. package/sdk-core/.github/workflows/per-pr.yml +6 -6
  10. package/sdk-core/AGENTS.md +41 -30
  11. package/sdk-core/Cargo.toml +3 -0
  12. package/sdk-core/README.md +15 -9
  13. package/sdk-core/crates/client/Cargo.toml +4 -0
  14. package/sdk-core/crates/client/README.md +139 -0
  15. package/sdk-core/crates/client/src/async_activity_handle.rs +297 -0
  16. package/sdk-core/crates/client/src/callback_based.rs +7 -0
  17. package/sdk-core/crates/client/src/errors.rs +294 -0
  18. package/sdk-core/crates/client/src/{raw.rs → grpc.rs} +280 -159
  19. package/sdk-core/crates/client/src/lib.rs +920 -1326
  20. package/sdk-core/crates/client/src/metrics.rs +24 -33
  21. package/sdk-core/crates/client/src/options_structs.rs +457 -0
  22. package/sdk-core/crates/client/src/replaceable.rs +5 -4
  23. package/sdk-core/crates/client/src/request_extensions.rs +8 -9
  24. package/sdk-core/crates/client/src/retry.rs +99 -54
  25. package/sdk-core/crates/client/src/{worker/mod.rs → worker.rs} +1 -1
  26. package/sdk-core/crates/client/src/workflow_handle.rs +826 -0
  27. package/sdk-core/crates/common/Cargo.toml +61 -2
  28. package/sdk-core/crates/common/build.rs +742 -12
  29. package/sdk-core/crates/common/protos/api_upstream/.github/workflows/ci.yml +2 -0
  30. package/sdk-core/crates/common/protos/api_upstream/Makefile +2 -1
  31. package/sdk-core/crates/common/protos/api_upstream/buf.yaml +0 -3
  32. package/sdk-core/crates/common/protos/api_upstream/cmd/check-path-conflicts/main.go +137 -0
  33. package/sdk-core/crates/common/protos/api_upstream/openapi/openapiv2.json +1166 -770
  34. package/sdk-core/crates/common/protos/api_upstream/openapi/openapiv3.yaml +1243 -750
  35. package/sdk-core/crates/common/protos/api_upstream/temporal/api/deployment/v1/message.proto +2 -2
  36. package/sdk-core/crates/common/protos/api_upstream/temporal/api/enums/v1/workflow.proto +4 -3
  37. package/sdk-core/crates/common/protos/api_upstream/temporal/api/failure/v1/message.proto +1 -0
  38. package/sdk-core/crates/common/protos/api_upstream/temporal/api/history/v1/message.proto +4 -0
  39. package/sdk-core/crates/common/protos/api_upstream/temporal/api/namespace/v1/message.proto +6 -0
  40. package/sdk-core/crates/common/protos/api_upstream/temporal/api/nexus/v1/message.proto +16 -1
  41. package/sdk-core/crates/common/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +64 -6
  42. package/sdk-core/crates/common/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +88 -33
  43. package/sdk-core/crates/common/protos/local/temporal/sdk/core/nexus/nexus.proto +4 -2
  44. package/sdk-core/crates/common/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +4 -0
  45. package/sdk-core/crates/common/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +5 -5
  46. package/sdk-core/crates/common/src/activity_definition.rs +20 -0
  47. package/sdk-core/crates/common/src/data_converters.rs +770 -0
  48. package/sdk-core/crates/common/src/envconfig.rs +5 -0
  49. package/sdk-core/crates/common/src/lib.rs +15 -211
  50. package/sdk-core/crates/common/src/payload_visitor.rs +648 -0
  51. package/sdk-core/crates/common/src/priority.rs +110 -0
  52. package/sdk-core/crates/common/src/protos/canned_histories.rs +3 -0
  53. package/sdk-core/crates/common/src/protos/history_builder.rs +45 -0
  54. package/sdk-core/crates/common/src/protos/history_info.rs +2 -0
  55. package/sdk-core/crates/common/src/protos/mod.rs +122 -27
  56. package/sdk-core/crates/common/src/protos/task_token.rs +3 -3
  57. package/sdk-core/crates/common/src/protos/utilities.rs +11 -0
  58. package/sdk-core/crates/{sdk-core → common}/src/telemetry/log_export.rs +5 -7
  59. package/sdk-core/crates/common/src/telemetry/metrics/core.rs +125 -0
  60. package/sdk-core/crates/common/src/telemetry/metrics.rs +268 -223
  61. package/sdk-core/crates/{sdk-core → common}/src/telemetry/otel.rs +8 -13
  62. package/sdk-core/crates/{sdk-core → common}/src/telemetry/prometheus_meter.rs +49 -50
  63. package/sdk-core/crates/{sdk-core → common}/src/telemetry/prometheus_server.rs +2 -3
  64. package/sdk-core/crates/common/src/telemetry.rs +264 -4
  65. package/sdk-core/crates/common/src/worker.rs +68 -603
  66. package/sdk-core/crates/common/src/workflow_definition.rs +60 -0
  67. package/sdk-core/crates/macros/Cargo.toml +5 -1
  68. package/sdk-core/crates/macros/src/activities_definitions.rs +585 -0
  69. package/sdk-core/crates/macros/src/fsm_impl.rs +507 -0
  70. package/sdk-core/crates/macros/src/lib.rs +138 -512
  71. package/sdk-core/crates/macros/src/macro_utils.rs +106 -0
  72. package/sdk-core/crates/macros/src/workflow_definitions.rs +1224 -0
  73. package/sdk-core/crates/sdk/Cargo.toml +19 -6
  74. package/sdk-core/crates/sdk/README.md +415 -0
  75. package/sdk-core/crates/sdk/src/activities.rs +417 -0
  76. package/sdk-core/crates/sdk/src/interceptors.rs +1 -1
  77. package/sdk-core/crates/sdk/src/lib.rs +757 -442
  78. package/sdk-core/crates/sdk/src/workflow_context/options.rs +45 -35
  79. package/sdk-core/crates/sdk/src/workflow_context.rs +1033 -289
  80. package/sdk-core/crates/sdk/src/workflow_future.rs +277 -213
  81. package/sdk-core/crates/sdk/src/workflows.rs +711 -0
  82. package/sdk-core/crates/sdk-core/Cargo.toml +57 -64
  83. package/sdk-core/crates/sdk-core/benches/workflow_replay_bench.rs +41 -35
  84. package/sdk-core/crates/sdk-core/machine_coverage/ActivityMachine_Coverage.puml +1 -1
  85. package/sdk-core/crates/sdk-core/src/abstractions.rs +6 -10
  86. package/sdk-core/crates/sdk-core/src/core_tests/activity_tasks.rs +6 -5
  87. package/sdk-core/crates/sdk-core/src/core_tests/mod.rs +13 -15
  88. package/sdk-core/crates/sdk-core/src/core_tests/queries.rs +21 -25
  89. package/sdk-core/crates/sdk-core/src/core_tests/replay_flag.rs +7 -10
  90. package/sdk-core/crates/sdk-core/src/core_tests/updates.rs +14 -17
  91. package/sdk-core/crates/sdk-core/src/core_tests/workers.rs +493 -26
  92. package/sdk-core/crates/sdk-core/src/core_tests/workflow_tasks.rs +4 -8
  93. package/sdk-core/crates/sdk-core/src/ephemeral_server/mod.rs +7 -7
  94. package/sdk-core/crates/sdk-core/src/histfetch.rs +20 -10
  95. package/sdk-core/crates/sdk-core/src/lib.rs +41 -111
  96. package/sdk-core/crates/sdk-core/src/pollers/mod.rs +4 -9
  97. package/sdk-core/crates/sdk-core/src/pollers/poll_buffer.rs +118 -19
  98. package/sdk-core/crates/sdk-core/src/protosext/mod.rs +2 -2
  99. package/sdk-core/crates/sdk-core/src/replay/mod.rs +14 -5
  100. package/sdk-core/crates/sdk-core/src/telemetry/metrics.rs +179 -196
  101. package/sdk-core/crates/sdk-core/src/telemetry/mod.rs +3 -280
  102. package/sdk-core/crates/sdk-core/src/test_help/integ_helpers.rs +6 -9
  103. package/sdk-core/crates/sdk-core/src/test_help/unit_helpers.rs +3 -6
  104. package/sdk-core/crates/sdk-core/src/worker/activities/local_activities.rs +11 -14
  105. package/sdk-core/crates/sdk-core/src/worker/activities.rs +16 -19
  106. package/sdk-core/crates/sdk-core/src/worker/client/mocks.rs +9 -5
  107. package/sdk-core/crates/sdk-core/src/worker/client.rs +103 -81
  108. package/sdk-core/crates/sdk-core/src/worker/heartbeat.rs +7 -11
  109. package/sdk-core/crates/sdk-core/src/worker/mod.rs +1124 -229
  110. package/sdk-core/crates/sdk-core/src/worker/nexus.rs +145 -23
  111. package/sdk-core/crates/sdk-core/src/worker/slot_provider.rs +2 -2
  112. package/sdk-core/crates/sdk-core/src/worker/tuner/fixed_size.rs +2 -2
  113. package/sdk-core/crates/sdk-core/src/worker/tuner/resource_based.rs +13 -13
  114. package/sdk-core/crates/sdk-core/src/worker/tuner.rs +28 -8
  115. package/sdk-core/crates/sdk-core/src/worker/workflow/driven_workflow.rs +9 -3
  116. package/sdk-core/crates/sdk-core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +21 -22
  117. package/sdk-core/crates/sdk-core/src/worker/workflow/machines/workflow_machines.rs +19 -4
  118. package/sdk-core/crates/sdk-core/src/worker/workflow/managed_run.rs +14 -18
  119. package/sdk-core/crates/sdk-core/src/worker/workflow/mod.rs +4 -6
  120. package/sdk-core/crates/sdk-core/src/worker/workflow/run_cache.rs +4 -7
  121. package/sdk-core/crates/sdk-core/src/worker/workflow/wft_extraction.rs +2 -4
  122. package/sdk-core/crates/sdk-core/src/worker/workflow/wft_poller.rs +8 -9
  123. package/sdk-core/crates/sdk-core/src/worker/workflow/workflow_stream.rs +1 -3
  124. package/sdk-core/crates/sdk-core/tests/activities_procmacro.rs +6 -0
  125. package/sdk-core/crates/sdk-core/tests/activities_trybuild/basic_pass.rs +54 -0
  126. package/sdk-core/crates/sdk-core/tests/activities_trybuild/invalid_self_type_fail.rs +18 -0
  127. package/sdk-core/crates/sdk-core/tests/activities_trybuild/invalid_self_type_fail.stderr +5 -0
  128. package/sdk-core/crates/sdk-core/tests/activities_trybuild/missing_context_fail.rs +14 -0
  129. package/sdk-core/crates/sdk-core/tests/activities_trybuild/missing_context_fail.stderr +5 -0
  130. package/sdk-core/crates/sdk-core/tests/activities_trybuild/multi_arg_pass.rs +48 -0
  131. package/sdk-core/crates/sdk-core/tests/activities_trybuild/no_input_pass.rs +14 -0
  132. package/sdk-core/crates/sdk-core/tests/activities_trybuild/no_return_type_pass.rs +19 -0
  133. package/sdk-core/crates/sdk-core/tests/cloud_tests.rs +14 -5
  134. package/sdk-core/crates/sdk-core/tests/common/activity_functions.rs +55 -0
  135. package/sdk-core/crates/sdk-core/tests/common/mod.rs +241 -196
  136. package/sdk-core/crates/sdk-core/tests/common/workflows.rs +41 -28
  137. package/sdk-core/crates/sdk-core/tests/global_metric_tests.rs +3 -5
  138. package/sdk-core/crates/sdk-core/tests/heavy_tests/fuzzy_workflow.rs +73 -64
  139. package/sdk-core/crates/sdk-core/tests/heavy_tests.rs +298 -252
  140. package/sdk-core/crates/sdk-core/tests/integ_tests/async_activity_client_tests.rs +230 -0
  141. package/sdk-core/crates/sdk-core/tests/integ_tests/client_tests.rs +94 -57
  142. package/sdk-core/crates/sdk-core/tests/integ_tests/data_converter_tests.rs +381 -0
  143. package/sdk-core/crates/sdk-core/tests/integ_tests/ephemeral_server_tests.rs +16 -12
  144. package/sdk-core/crates/sdk-core/tests/integ_tests/heartbeat_tests.rs +48 -40
  145. package/sdk-core/crates/sdk-core/tests/integ_tests/metrics_tests.rs +327 -255
  146. package/sdk-core/crates/sdk-core/tests/integ_tests/pagination_tests.rs +50 -45
  147. package/sdk-core/crates/sdk-core/tests/integ_tests/polling_tests.rs +147 -126
  148. package/sdk-core/crates/sdk-core/tests/integ_tests/queries_tests.rs +103 -89
  149. package/sdk-core/crates/sdk-core/tests/integ_tests/update_tests.rs +609 -453
  150. package/sdk-core/crates/sdk-core/tests/integ_tests/visibility_tests.rs +80 -62
  151. package/sdk-core/crates/sdk-core/tests/integ_tests/worker_heartbeat_tests.rs +360 -231
  152. package/sdk-core/crates/sdk-core/tests/integ_tests/worker_tests.rs +248 -185
  153. package/sdk-core/crates/sdk-core/tests/integ_tests/worker_versioning_tests.rs +52 -43
  154. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_client_tests.rs +180 -0
  155. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/activities.rs +428 -315
  156. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +82 -56
  157. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +56 -28
  158. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +364 -243
  159. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/client_interactions.rs +552 -0
  160. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +101 -42
  161. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +243 -147
  162. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/eager.rs +98 -28
  163. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +1475 -1036
  164. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/modify_wf_properties.rs +73 -41
  165. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/nexus.rs +397 -238
  166. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/patches.rs +414 -189
  167. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/queries.rs +415 -0
  168. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/replay.rs +96 -36
  169. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/resets.rs +154 -137
  170. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/signals.rs +183 -105
  171. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +85 -38
  172. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/timers.rs +142 -40
  173. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +73 -54
  174. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests.rs +363 -226
  175. package/sdk-core/crates/sdk-core/tests/main.rs +17 -15
  176. package/sdk-core/crates/sdk-core/tests/manual_tests.rs +207 -152
  177. package/sdk-core/crates/sdk-core/tests/shared_tests/mod.rs +65 -34
  178. package/sdk-core/crates/sdk-core/tests/shared_tests/priority.rs +107 -84
  179. package/sdk-core/crates/sdk-core/tests/workflows_procmacro.rs +6 -0
  180. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/async_query_fail.rs +26 -0
  181. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/async_query_fail.stderr +5 -0
  182. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/basic_pass.rs +49 -0
  183. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/minimal_pass.rs +21 -0
  184. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/mut_query_fail.rs +26 -0
  185. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/mut_query_fail.stderr +5 -0
  186. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/sync_run_fail.rs +21 -0
  187. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/sync_run_fail.stderr +5 -0
  188. package/sdk-core/crates/sdk-core-c-bridge/Cargo.toml +7 -1
  189. package/sdk-core/crates/sdk-core-c-bridge/include/temporal-sdk-core-c-bridge.h +14 -14
  190. package/sdk-core/crates/sdk-core-c-bridge/src/client.rs +83 -74
  191. package/sdk-core/crates/sdk-core-c-bridge/src/metric.rs +9 -14
  192. package/sdk-core/crates/sdk-core-c-bridge/src/runtime.rs +1 -2
  193. package/sdk-core/crates/sdk-core-c-bridge/src/tests/context.rs +13 -13
  194. package/sdk-core/crates/sdk-core-c-bridge/src/tests/mod.rs +6 -6
  195. package/sdk-core/crates/sdk-core-c-bridge/src/tests/utils.rs +3 -4
  196. package/sdk-core/crates/sdk-core-c-bridge/src/worker.rs +62 -75
  197. package/sdk-core/rustfmt.toml +2 -1
  198. package/src/client.rs +205 -318
  199. package/src/metrics.rs +22 -30
  200. package/src/runtime.rs +4 -5
  201. package/src/worker.rs +16 -19
  202. package/ts/native.ts +1 -1
  203. package/sdk-core/crates/client/src/workflow_handle/mod.rs +0 -212
  204. package/sdk-core/crates/common/src/errors.rs +0 -85
  205. package/sdk-core/crates/common/tests/worker_task_types_test.rs +0 -129
  206. package/sdk-core/crates/sdk/src/activity_context.rs +0 -238
  207. package/sdk-core/crates/sdk/src/app_data.rs +0 -37
  208. package/sdk-core/crates/sdk-core/tests/integ_tests/activity_functions.rs +0 -5
  209. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/appdata_propagation.rs +0 -61
@@ -1,8 +1,4 @@
1
- use crate::{
2
- common::{CoreWfStarter, NAMESPACE},
3
- integ_tests::activity_functions::echo,
4
- };
5
- use futures_util::StreamExt;
1
+ use crate::common::{CoreWfStarter, NAMESPACE, activity_functions::StdActivities};
6
2
  use std::{
7
3
  sync::{
8
4
  Arc,
@@ -10,60 +6,73 @@ use std::{
10
6
  },
11
7
  time::Duration,
12
8
  };
13
- use temporalio_client::{WfClientExt, WorkflowClientTrait, WorkflowOptions, WorkflowService};
14
- use temporalio_common::protos::{
15
- coresdk::AsJsonPayloadExt,
16
- temporal::api::{
17
- common::v1::WorkflowExecution, workflowservice::v1::ResetWorkflowExecutionRequest,
18
- },
9
+ use temporalio_client::{
10
+ WorkflowSignalOptions, WorkflowStartOptions, errors::WorkflowGetResultError,
11
+ grpc::WorkflowService,
12
+ };
13
+ use temporalio_common::protos::temporal::api::{
14
+ common::v1::WorkflowExecution, workflowservice::v1::ResetWorkflowExecutionRequest,
19
15
  };
20
16
 
21
17
  use temporalio_common::worker::WorkerTaskTypes;
22
- use temporalio_sdk::{LocalActivityOptions, WfContext};
18
+ use temporalio_macros::{workflow, workflow_methods};
19
+ use temporalio_sdk::{LocalActivityOptions, SyncWorkflowContext, WorkflowContext, WorkflowResult};
23
20
  use tokio::sync::Notify;
24
21
  use tonic::IntoRequest;
25
22
 
23
+ const POST_FAIL_SIG: &str = "post-fail";
26
24
  const POST_RESET_SIG: &str = "post-reset";
27
25
 
26
+ #[workflow]
27
+ struct ResetMeWf {
28
+ notify: Arc<Notify>,
29
+ post_reset_received: bool,
30
+ }
31
+
32
+ #[workflow_methods(factory_only)]
33
+ impl ResetMeWf {
34
+ #[run(name = "reset_me_wf")]
35
+ async fn run(ctx: &mut WorkflowContext<Self>) -> WorkflowResult<()> {
36
+ ctx.timer(Duration::from_secs(1)).await;
37
+ ctx.timer(Duration::from_secs(1)).await;
38
+ ctx.state(|wf| wf.notify.notify_one());
39
+ ctx.wait_condition(|s| s.post_reset_received).await;
40
+ Ok(())
41
+ }
42
+
43
+ #[signal(name = POST_RESET_SIG)]
44
+ fn post_reset(&mut self, _ctx: &mut SyncWorkflowContext<Self>) {
45
+ self.post_reset_received = true;
46
+ }
47
+ }
48
+
28
49
  #[tokio::test]
29
50
  async fn reset_workflow() {
30
51
  let wf_name = "reset_me_wf";
31
52
  let mut starter = CoreWfStarter::new(wf_name);
32
- starter.worker_config.task_types = WorkerTaskTypes::workflow_only();
53
+ starter.sdk_config.task_types = WorkerTaskTypes::workflow_only();
33
54
  let mut worker = starter.worker().await;
34
55
  worker.fetch_results = false;
35
- let notify = Arc::new(Notify::new());
36
56
 
37
- let wf_notify = notify.clone();
38
- worker.register_wf(wf_name.to_owned(), move |ctx: WfContext| {
39
- let notify = wf_notify.clone();
40
- async move {
41
- // Make a couple workflow tasks
42
- ctx.timer(Duration::from_secs(1)).await;
43
- ctx.timer(Duration::from_secs(1)).await;
44
- // Tell outer scope to send the reset
45
- notify.notify_one();
46
- let _ = ctx
47
- .make_signal_channel(POST_RESET_SIG)
48
- .next()
49
- .await
50
- .unwrap();
51
- Ok(().into())
52
- }
57
+ let notify = Arc::new(Notify::new());
58
+ let notify_clone = notify.clone();
59
+ worker.register_workflow_with_factory(move || ResetMeWf {
60
+ notify: notify_clone.clone(),
61
+ post_reset_received: false,
53
62
  });
54
63
 
55
- let run_id = worker
56
- .submit_wf(
57
- wf_name.to_owned(),
58
- wf_name.to_owned(),
59
- vec![],
60
- WorkflowOptions::default(),
64
+ let task_queue = starter.get_task_queue().to_owned();
65
+ let handle = worker
66
+ .submit_workflow(
67
+ ResetMeWf::run,
68
+ (),
69
+ WorkflowStartOptions::new(task_queue, wf_name).build(),
61
70
  )
62
71
  .await
63
72
  .unwrap();
73
+ let run_id = handle.info().run_id.clone().unwrap();
64
74
 
65
75
  let mut client = starter.get_client().await;
66
- let client = Arc::make_mut(&mut client);
67
76
  let resetter_fut = async {
68
77
  notify.notified().await;
69
78
  // Do the reset
@@ -73,7 +82,7 @@ async fn reset_workflow() {
73
82
  namespace: NAMESPACE.to_owned(),
74
83
  workflow_execution: Some(WorkflowExecution {
75
84
  workflow_id: wf_name.to_owned(),
76
- run_id: run_id.clone(),
85
+ run_id,
77
86
  }),
78
87
  // End of first WFT
79
88
  workflow_task_finish_event_id: 4,
@@ -86,24 +95,15 @@ async fn reset_workflow() {
86
95
  .unwrap();
87
96
 
88
97
  // Unblock the workflow by sending the signal. Run ID will have changed after reset so
89
- // we use empty run id
90
- WorkflowClientTrait::signal_workflow_execution(
91
- client,
92
- wf_name.to_owned(),
93
- "".to_owned(),
94
- POST_RESET_SIG.to_owned(),
95
- None,
96
- None,
97
- )
98
- .await
99
- .unwrap();
100
-
101
- // Wait for the now-reset workflow to finish
102
- client
103
- .get_untyped_workflow_handle(wf_name.to_owned(), "")
104
- .get_workflow_result(Default::default())
98
+ // we re-obtain handle.
99
+ let handle = client.get_workflow_handle::<reset_me_wf::Run>(wf_name.to_owned());
100
+ handle
101
+ .signal(ResetMeWf::post_reset, (), WorkflowSignalOptions::default())
105
102
  .await
106
103
  .unwrap();
104
+
105
+ // Wait for the now-reset workflow to finish
106
+ handle.get_result(Default::default()).await.unwrap();
107
107
  starter.shutdown().await;
108
108
  };
109
109
  let run_fut = worker.run_until_done();
@@ -111,11 +111,72 @@ async fn reset_workflow() {
111
111
  rr.unwrap();
112
112
  }
113
113
 
114
+ #[workflow]
115
+ struct ResetRandomseedWf {
116
+ did_fail: Arc<AtomicBool>,
117
+ rand_seed: Arc<AtomicU64>,
118
+ notify: Arc<Notify>,
119
+ post_fail_received: bool,
120
+ post_reset_received: bool,
121
+ }
122
+
123
+ #[workflow_methods(factory_only)]
124
+ impl ResetRandomseedWf {
125
+ #[run(name = "reset_randomseed")]
126
+ async fn run(ctx: &mut WorkflowContext<Self>) -> WorkflowResult<()> {
127
+ let _ = ctx.state(|wf| {
128
+ wf.rand_seed.compare_exchange(
129
+ 0,
130
+ ctx.random_seed(),
131
+ Ordering::Relaxed,
132
+ Ordering::Relaxed,
133
+ )
134
+ });
135
+ ctx.timer(Duration::from_millis(100)).await;
136
+ ctx.timer(Duration::from_millis(100)).await;
137
+ if ctx
138
+ .state(|wf| {
139
+ wf.did_fail
140
+ .compare_exchange(false, true, Ordering::Relaxed, Ordering::Relaxed)
141
+ })
142
+ .is_ok()
143
+ {
144
+ ctx.state(|wf| wf.notify.notify_one());
145
+ panic!("Ahh");
146
+ }
147
+ if ctx.state(|wf| wf.rand_seed.load(Ordering::Relaxed)) == ctx.random_seed() {
148
+ ctx.timer(Duration::from_millis(100)).await;
149
+ } else {
150
+ ctx.start_local_activity(
151
+ StdActivities::echo,
152
+ "hi!".to_string(),
153
+ LocalActivityOptions::default(),
154
+ )
155
+ .await
156
+ .map_err(|e| anyhow::anyhow!("{e}"))?;
157
+ }
158
+ ctx.wait_condition(|s| s.post_fail_received).await;
159
+ ctx.state(|wf| wf.notify.notify_one());
160
+ ctx.wait_condition(|s| s.post_reset_received).await;
161
+ Ok(())
162
+ }
163
+
164
+ #[signal(name = POST_FAIL_SIG)]
165
+ fn post_fail(&mut self, _ctx: &mut SyncWorkflowContext<Self>) {
166
+ self.post_fail_received = true;
167
+ }
168
+
169
+ #[signal(name = POST_RESET_SIG)]
170
+ fn post_reset(&mut self, _ctx: &mut SyncWorkflowContext<Self>) {
171
+ self.post_reset_received = true;
172
+ }
173
+ }
174
+
114
175
  #[tokio::test]
115
176
  async fn reset_randomseed() {
116
177
  let wf_name = "reset_randomseed";
117
178
  let mut starter = CoreWfStarter::new(wf_name);
118
- starter.worker_config.task_types = WorkerTaskTypes {
179
+ starter.sdk_config.task_types = WorkerTaskTypes {
119
180
  enable_workflows: true,
120
181
  enable_local_activities: true,
121
182
  enable_remote_activities: false,
@@ -123,82 +184,42 @@ async fn reset_randomseed() {
123
184
  };
124
185
  let mut worker = starter.worker().await;
125
186
  worker.fetch_results = false;
126
- let notify = Arc::new(Notify::new());
127
187
 
128
- const POST_FAIL_SIG: &str = "post-fail";
129
- static DID_FAIL: AtomicBool = AtomicBool::new(false);
130
- static RAND_SEED: AtomicU64 = AtomicU64::new(0);
131
-
132
- let wf_notify = notify.clone();
133
- worker.register_wf(wf_name.to_owned(), move |ctx: WfContext| {
134
- let notify = wf_notify.clone();
135
- async move {
136
- let _ = RAND_SEED.compare_exchange(
137
- 0,
138
- ctx.random_seed(),
139
- Ordering::Relaxed,
140
- Ordering::Relaxed,
141
- );
142
- // Make a couple workflow tasks
143
- ctx.timer(Duration::from_millis(100)).await;
144
- ctx.timer(Duration::from_millis(100)).await;
145
- if DID_FAIL
146
- .compare_exchange(false, true, Ordering::Relaxed, Ordering::Relaxed)
147
- .is_ok()
148
- {
149
- // Tell outer scope to send the post-task-failure-signal
150
- notify.notify_one();
151
- panic!("Ahh");
152
- }
153
- // Make a command that is one thing with the initial seed, but another after reset
154
- if RAND_SEED.load(Ordering::Relaxed) == ctx.random_seed() {
155
- ctx.timer(Duration::from_millis(100)).await;
156
- } else {
157
- ctx.local_activity(LocalActivityOptions {
158
- activity_type: "echo".to_string(),
159
- input: "hi!".as_json_payload().expect("serializes fine"),
160
- ..Default::default()
161
- })
162
- .await;
163
- }
164
- // Wait for the post-task-fail signal
165
- let _ = ctx.make_signal_channel(POST_FAIL_SIG).next().await.unwrap();
166
- // Tell outer scope to send the reset
167
- notify.notify_one();
168
- let _ = ctx
169
- .make_signal_channel(POST_RESET_SIG)
170
- .next()
171
- .await
172
- .unwrap();
173
- Ok(().into())
174
- }
188
+ let did_fail = Arc::new(AtomicBool::new(false));
189
+ let rand_seed = Arc::new(AtomicU64::new(0));
190
+ let notify = Arc::new(Notify::new());
191
+ let notify_clone = notify.clone();
192
+ worker.register_workflow_with_factory(move || ResetRandomseedWf {
193
+ did_fail: did_fail.clone(),
194
+ rand_seed: rand_seed.clone(),
195
+ notify: notify_clone.clone(),
196
+ post_fail_received: false,
197
+ post_reset_received: false,
175
198
  });
176
- worker.register_activity("echo", echo);
177
-
178
- let run_id = worker
179
- .submit_wf(
180
- wf_name.to_owned(),
181
- wf_name.to_owned(),
182
- vec![],
183
- WorkflowOptions::default(),
199
+ worker.register_activities(StdActivities);
200
+
201
+ let task_queue = starter.get_task_queue().to_owned();
202
+ let handle = worker
203
+ .submit_workflow(
204
+ ResetRandomseedWf::run,
205
+ (),
206
+ WorkflowStartOptions::new(task_queue, wf_name).build(),
184
207
  )
185
208
  .await
186
209
  .unwrap();
210
+ let run_id = handle.info().run_id.clone().unwrap();
187
211
 
188
212
  let mut client = starter.get_client().await;
189
- let client = Arc::make_mut(&mut client);
190
213
  let client_fur = async {
191
214
  notify.notified().await;
192
- WorkflowClientTrait::signal_workflow_execution(
193
- client,
194
- wf_name.to_owned(),
195
- run_id.clone(),
196
- POST_FAIL_SIG.to_string(),
197
- None,
198
- None,
199
- )
200
- .await
201
- .unwrap();
215
+ handle
216
+ .signal(
217
+ ResetRandomseedWf::post_fail,
218
+ (),
219
+ WorkflowSignalOptions::default(),
220
+ )
221
+ .await
222
+ .unwrap();
202
223
  notify.notified().await;
203
224
  // Reset the workflow to be after first timer has fired
204
225
  client
@@ -219,24 +240,20 @@ async fn reset_randomseed() {
219
240
  .unwrap();
220
241
 
221
242
  // Unblock the workflow by sending the signal. Run ID will have changed after reset so
222
- // we use empty run id
223
- WorkflowClientTrait::signal_workflow_execution(
224
- client,
225
- wf_name.to_owned(),
226
- "".to_owned(),
227
- POST_RESET_SIG.to_owned(),
228
- None,
229
- None,
230
- )
231
- .await
232
- .unwrap();
233
-
234
- // Wait for the now-reset workflow to finish
243
+ // we re-obtain the handle.
235
244
  client
236
- .get_untyped_workflow_handle(wf_name.to_owned(), "")
237
- .get_workflow_result(Default::default())
245
+ .get_workflow_handle::<reset_randomseed_wf::Run>(wf_name.to_owned())
246
+ .signal(
247
+ ResetRandomseedWf::post_reset,
248
+ (),
249
+ WorkflowSignalOptions::default(),
250
+ )
238
251
  .await
239
252
  .unwrap();
253
+
254
+ // Wait for the now-reset workflow to finish
255
+ let result = handle.get_result(Default::default()).await;
256
+ assert_matches!(result, Err(WorkflowGetResultError::Terminated { .. }));
240
257
  starter.shutdown().await;
241
258
  };
242
259
  let run_fut = worker.run_until_done();