@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,103 +1,127 @@
1
1
  use crate::common::{CoreWfStarter, build_fake_sdk};
2
- use temporalio_client::{GetWorkflowResultOptions, WfClientExt, WorkflowOptions};
2
+ use temporalio_client::{
3
+ NamespacedClient, WorkflowExecutionInfo, WorkflowGetResultOptions, WorkflowStartOptions,
4
+ };
3
5
  use temporalio_common::{
4
6
  protos::{
5
7
  DEFAULT_WORKFLOW_TYPE, TestHistoryBuilder,
6
- coresdk::{FromJsonPayloadExt, common::NamespacedWorkflowExecution},
8
+ coresdk::{AsJsonPayloadExt, FromJsonPayloadExt, common::NamespacedWorkflowExecution},
7
9
  temporal::api::enums::v1::{CommandType, EventType},
8
10
  },
9
11
  worker::WorkerTaskTypes,
10
12
  };
11
- use temporalio_sdk::{WfContext, WorkflowResult};
13
+ use temporalio_macros::{workflow, workflow_methods};
14
+ use temporalio_sdk::{WorkflowContext, WorkflowResult};
12
15
  use temporalio_sdk_core::test_help::MockPollCfg;
13
16
 
14
17
  const RECEIVER_WFID: &str = "sends-cancel-receiver";
15
18
 
16
- async fn cancel_sender(ctx: WfContext) -> WorkflowResult<()> {
17
- let run_id = std::str::from_utf8(&ctx.get_args()[0].data)?.to_owned();
18
- let sigres = ctx
19
- .cancel_external(
20
- NamespacedWorkflowExecution {
21
- workflow_id: RECEIVER_WFID.to_string(),
22
- run_id,
23
- namespace: ctx.namespace().to_string(),
24
- },
25
- "cancel-reason".to_string(),
26
- )
27
- .await;
28
- if ctx.get_args().get(1).is_some() {
29
- // We expect failure
30
- assert!(sigres.is_err());
31
- } else {
19
+ #[workflow]
20
+ #[derive(Default)]
21
+ struct CancelSender;
22
+
23
+ #[workflow_methods]
24
+ impl CancelSender {
25
+ #[run]
26
+ async fn run(ctx: &mut WorkflowContext<Self>, run_id: String) -> WorkflowResult<()> {
27
+ let sigres = ctx
28
+ .cancel_external(
29
+ NamespacedWorkflowExecution {
30
+ workflow_id: RECEIVER_WFID.to_string(),
31
+ run_id,
32
+ namespace: ctx.namespace().to_string(),
33
+ },
34
+ "cancel-reason".to_string(),
35
+ )
36
+ .await;
32
37
  sigres.unwrap();
38
+ Ok(())
33
39
  }
34
- Ok(().into())
35
40
  }
36
41
 
37
- async fn cancel_receiver(ctx: WfContext) -> WorkflowResult<String> {
38
- let r = ctx.cancelled().await;
39
- Ok(r.into())
42
+ #[workflow]
43
+ #[derive(Default)]
44
+ struct CancelReceiver;
45
+
46
+ #[workflow_methods]
47
+ impl CancelReceiver {
48
+ #[run]
49
+ async fn run(ctx: &mut WorkflowContext<Self>) -> WorkflowResult<String> {
50
+ let r = ctx.cancelled().await;
51
+ Ok(r)
52
+ }
40
53
  }
41
54
 
42
55
  #[tokio::test]
43
56
  async fn sends_cancel_to_other_wf() {
44
57
  let mut starter = CoreWfStarter::new("sends_cancel_to_other_wf");
45
- starter
46
- .worker_config
47
- .task_types(WorkerTaskTypes::workflow_only());
58
+ starter.sdk_config.task_types = WorkerTaskTypes::workflow_only();
48
59
  let mut worker = starter.worker().await;
49
- worker.register_wf("sender", cancel_sender);
50
- worker.register_wf("receiver", cancel_receiver);
60
+ worker.register_workflow::<CancelSender>();
61
+ worker.register_workflow::<CancelReceiver>();
51
62
 
63
+ let task_queue = starter.get_task_queue().to_owned();
52
64
  let receiver_run_id = worker
53
65
  .submit_wf(
54
- RECEIVER_WFID,
55
- "receiver",
56
- vec![],
57
- WorkflowOptions::default(),
66
+ "CancelReceiver",
67
+ vec![().as_json_payload().unwrap()],
68
+ WorkflowStartOptions::new(task_queue.clone(), RECEIVER_WFID).build(),
58
69
  )
59
70
  .await
60
71
  .unwrap();
61
72
  worker
62
73
  .submit_wf(
63
- "sends-cancel-sender",
64
- "sender",
65
- vec![receiver_run_id.clone().into()],
66
- WorkflowOptions::default(),
74
+ "CancelSender",
75
+ vec![receiver_run_id.clone().as_json_payload().unwrap()],
76
+ WorkflowStartOptions::new(task_queue, "sends-cancel-sender").build(),
67
77
  )
68
78
  .await
69
79
  .unwrap();
70
80
  worker.run_until_done().await.unwrap();
71
- let h = starter
72
- .get_client()
73
- .await
74
- .get_untyped_workflow_handle(RECEIVER_WFID, receiver_run_id);
81
+ let client = starter.get_client().await;
82
+ let h = WorkflowExecutionInfo {
83
+ namespace: client.namespace(),
84
+ workflow_id: RECEIVER_WFID.into(),
85
+ run_id: Some(receiver_run_id),
86
+ first_execution_run_id: None,
87
+ }
88
+ .bind_untyped(client.clone());
75
89
  let res = String::from_json_payload(
76
- &h.get_workflow_result(GetWorkflowResultOptions::default())
90
+ h.get_result(WorkflowGetResultOptions::default())
77
91
  .await
78
92
  .unwrap()
79
- .unwrap_success()[0],
93
+ .payloads
94
+ .first()
95
+ .unwrap(),
80
96
  )
81
97
  .unwrap();
82
98
  assert!(res.contains("Cancel requested by workflow"));
83
99
  assert!(res.contains("cancel-reason"));
84
100
  }
85
101
 
86
- async fn cancel_sender_canned(ctx: WfContext) -> WorkflowResult<()> {
87
- let res = ctx
88
- .cancel_external(
89
- NamespacedWorkflowExecution {
90
- namespace: "some_namespace".to_string(),
91
- workflow_id: "fake_wid".to_string(),
92
- run_id: "fake_rid".to_string(),
93
- },
94
- "cancel reason".to_string(),
95
- )
96
- .await;
97
- if res.is_err() {
98
- Err(anyhow::anyhow!("Cancel fail!"))
99
- } else {
100
- Ok(().into())
102
+ #[workflow]
103
+ #[derive(Default)]
104
+ struct CancelSenderCanned;
105
+
106
+ #[workflow_methods]
107
+ impl CancelSenderCanned {
108
+ #[run(name = DEFAULT_WORKFLOW_TYPE)]
109
+ async fn run(ctx: &mut WorkflowContext<Self>) -> WorkflowResult<()> {
110
+ let res = ctx
111
+ .cancel_external(
112
+ NamespacedWorkflowExecution {
113
+ namespace: "some_namespace".to_string(),
114
+ workflow_id: "fake_wid".to_string(),
115
+ run_id: "fake_rid".to_string(),
116
+ },
117
+ "cancel reason".to_string(),
118
+ )
119
+ .await;
120
+ if res.is_err() {
121
+ Err(anyhow::anyhow!("Cancel fail!").into())
122
+ } else {
123
+ Ok(())
124
+ }
101
125
  }
102
126
  }
103
127
 
@@ -150,6 +174,6 @@ async fn sends_cancel_canned(#[case] fails: bool) {
150
174
  });
151
175
  });
152
176
  let mut worker = build_fake_sdk(mock_cfg);
153
- worker.register_wf(DEFAULT_WORKFLOW_TYPE, cancel_sender_canned);
177
+ worker.register_workflow::<CancelSenderCanned>();
154
178
  worker.run().await.unwrap();
155
179
  }
@@ -1,6 +1,8 @@
1
1
  use crate::common::{ActivationAssertionsInterceptor, CoreWfStarter, build_fake_sdk};
2
2
  use std::time::Duration;
3
- use temporalio_client::WorkflowClientTrait;
3
+ use temporalio_client::{
4
+ UntypedWorkflow, WorkflowCancelOptions, WorkflowDescribeOptions, WorkflowStartOptions,
5
+ };
4
6
  use temporalio_common::{
5
7
  protos::{
6
8
  DEFAULT_WORKFLOW_TYPE, canned_histories,
@@ -9,25 +11,34 @@ use temporalio_common::{
9
11
  },
10
12
  worker::WorkerTaskTypes,
11
13
  };
12
- use temporalio_sdk::{WfContext, WfExitValue, WorkflowResult};
14
+ use temporalio_macros::{workflow, workflow_methods};
15
+ use temporalio_sdk::{WorkflowContext, WorkflowResult, WorkflowTermination};
13
16
  use temporalio_sdk_core::test_help::MockPollCfg;
14
17
 
15
- async fn cancelled_wf(ctx: WfContext) -> WorkflowResult<()> {
16
- let mut reason = "".to_string();
17
- let cancelled = tokio::select! {
18
- _ = ctx.timer(Duration::from_secs(500)) => false,
19
- r = ctx.cancelled() => {
20
- reason = r;
21
- true
22
- }
23
- };
18
+ #[workflow]
19
+ #[derive(Default)]
20
+ struct CancelledWf;
24
21
 
25
- assert_eq!(reason, "Dieee");
22
+ #[workflow_methods]
23
+ impl CancelledWf {
24
+ #[run]
25
+ async fn run(ctx: &mut WorkflowContext<Self>) -> WorkflowResult<()> {
26
+ let mut reason = "".to_string();
27
+ let cancelled = temporalio_sdk::workflows::select! {
28
+ _ = ctx.timer(Duration::from_secs(500)) => false,
29
+ r = ctx.cancelled() => {
30
+ reason = r;
31
+ true
32
+ }
33
+ };
26
34
 
27
- if cancelled {
28
- Ok(WfExitValue::Cancelled)
29
- } else {
30
- panic!("Should have been cancelled")
35
+ assert_eq!(reason, "Dieee");
36
+
37
+ if cancelled {
38
+ Err(WorkflowTermination::Cancelled)
39
+ } else {
40
+ panic!("Should have been cancelled")
41
+ }
31
42
  }
32
43
  }
33
44
 
@@ -35,20 +46,26 @@ async fn cancelled_wf(ctx: WfContext) -> WorkflowResult<()> {
35
46
  async fn cancel_during_timer() {
36
47
  let wf_name = "cancel_during_timer";
37
48
  let mut starter = CoreWfStarter::new(wf_name);
38
- starter
39
- .worker_config
40
- .task_types(WorkerTaskTypes::workflow_only());
49
+ starter.sdk_config.task_types = WorkerTaskTypes::workflow_only();
41
50
  let mut worker = starter.worker().await;
42
51
  let client = starter.get_client().await;
43
- worker.register_wf(wf_name.to_string(), cancelled_wf);
44
- starter.start_with_worker(wf_name, &mut worker).await;
45
- let wf_id = starter.get_task_queue().to_string();
52
+ worker.register_workflow::<CancelledWf>();
53
+ let task_queue = starter.get_task_queue().to_owned();
54
+ let wf_id = task_queue.clone();
55
+ let wf_handle = worker
56
+ .submit_workflow(
57
+ CancelledWf::run,
58
+ (),
59
+ WorkflowStartOptions::new(task_queue, wf_id.clone()).build(),
60
+ )
61
+ .await
62
+ .unwrap();
46
63
 
47
64
  let canceller = async {
48
65
  tokio::time::sleep(Duration::from_millis(500)).await;
49
66
  // Cancel the workflow externally
50
- client
51
- .cancel_workflow_execution(wf_id.clone(), None, "Dieee".to_string(), None)
67
+ wf_handle
68
+ .cancel(WorkflowCancelOptions::builder().reason("Dieee").build())
52
69
  .await
53
70
  .unwrap();
54
71
  };
@@ -56,19 +73,28 @@ async fn cancel_during_timer() {
56
73
  let (_, res) = tokio::join!(canceller, worker.run_until_done());
57
74
  res.unwrap();
58
75
  let desc = client
59
- .describe_workflow_execution(wf_id, None)
76
+ .get_workflow_handle::<UntypedWorkflow>(wf_id)
77
+ .describe(WorkflowDescribeOptions::default())
60
78
  .await
61
79
  .unwrap();
62
80
 
63
81
  assert_eq!(
64
- desc.workflow_execution_info.unwrap().status,
82
+ desc.raw_description.workflow_execution_info.unwrap().status,
65
83
  WorkflowExecutionStatus::Canceled as i32
66
84
  );
67
85
  }
68
86
 
69
- async fn wf_with_timer(ctx: WfContext) -> WorkflowResult<()> {
70
- ctx.timer(Duration::from_millis(500)).await;
71
- Ok(WfExitValue::Cancelled)
87
+ #[workflow]
88
+ #[derive(Default)]
89
+ struct WfWithTimer;
90
+
91
+ #[workflow_methods]
92
+ impl WfWithTimer {
93
+ #[run(name = DEFAULT_WORKFLOW_TYPE)]
94
+ async fn run(ctx: &mut WorkflowContext<Self>) -> WorkflowResult<()> {
95
+ ctx.timer(Duration::from_millis(500)).await;
96
+ Err(WorkflowTermination::Cancelled)
97
+ }
72
98
  }
73
99
 
74
100
  #[tokio::test]
@@ -115,7 +141,7 @@ async fn wf_completing_with_cancelled() {
115
141
  });
116
142
 
117
143
  let mut worker = build_fake_sdk(mock_cfg);
118
- worker.register_wf(DEFAULT_WORKFLOW_TYPE, wf_with_timer);
144
+ worker.register_workflow::<WfWithTimer>();
119
145
  worker.set_worker_interceptor(aai);
120
146
  worker.run().await.unwrap();
121
147
  }