@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,31 +1,44 @@
1
+ use crate::common::activity_functions::StdActivities;
1
2
  use std::time::Duration;
2
- use temporalio_common::{
3
- prost_dur,
4
- protos::{coresdk::AsJsonPayloadExt, temporal::api::common::v1::RetryPolicy},
5
- };
6
- use temporalio_sdk::{ActivityOptions, LocalActivityOptions, WfContext, WorkflowResult};
3
+ use temporalio_common::{prost_dur, protos::temporal::api::common::v1::RetryPolicy};
4
+ use temporalio_macros::{workflow, workflow_methods};
5
+ use temporalio_sdk::{ActivityOptions, LocalActivityOptions, WorkflowContext, WorkflowResult};
7
6
 
8
- pub(crate) async fn la_problem_workflow(ctx: WfContext) -> WorkflowResult<()> {
9
- ctx.local_activity(LocalActivityOptions {
10
- activity_type: "delay".to_string(),
11
- input: "hi".as_json_payload().expect("serializes fine"),
12
- retry_policy: RetryPolicy {
13
- initial_interval: Some(prost_dur!(from_micros(15))),
14
- backoff_coefficient: 1_000.,
15
- maximum_interval: Some(prost_dur!(from_millis(1500))),
16
- maximum_attempts: 4,
17
- non_retryable_error_types: vec![],
18
- },
19
- timer_backoff_threshold: Some(Duration::from_secs(1)),
20
- ..Default::default()
21
- })
22
- .await;
23
- ctx.activity(ActivityOptions {
24
- activity_type: "delay".to_string(),
25
- start_to_close_timeout: Some(Duration::from_secs(20)),
26
- input: "hi!".as_json_payload().expect("serializes fine"),
27
- ..Default::default()
28
- })
29
- .await;
30
- Ok(().into())
7
+ #[workflow]
8
+ #[derive(Default)]
9
+ pub(crate) struct LaProblemWorkflow;
10
+
11
+ #[workflow_methods]
12
+ impl LaProblemWorkflow {
13
+ #[run(name = "evict_while_la_running_no_interference")]
14
+ pub(crate) async fn run(ctx: &mut WorkflowContext<Self>) -> WorkflowResult<()> {
15
+ ctx.start_local_activity(
16
+ StdActivities::delay,
17
+ Duration::from_secs(15),
18
+ LocalActivityOptions {
19
+ retry_policy: RetryPolicy {
20
+ initial_interval: Some(prost_dur!(from_micros(15))),
21
+ backoff_coefficient: 1_000.,
22
+ maximum_interval: Some(prost_dur!(from_millis(1500))),
23
+ maximum_attempts: 4,
24
+ non_retryable_error_types: vec![],
25
+ },
26
+ timer_backoff_threshold: Some(Duration::from_secs(1)),
27
+ ..Default::default()
28
+ },
29
+ )
30
+ .await
31
+ .map_err(|e| anyhow::anyhow!("{e}"))?;
32
+ ctx.start_activity(
33
+ StdActivities::delay,
34
+ Duration::from_secs(15),
35
+ ActivityOptions {
36
+ start_to_close_timeout: Some(Duration::from_secs(20)),
37
+ ..Default::default()
38
+ },
39
+ )
40
+ .await
41
+ .map_err(|e| anyhow::anyhow!("{e}"))?;
42
+ Ok(())
43
+ }
31
44
  }
@@ -7,12 +7,10 @@ use common::CoreWfStarter;
7
7
  use parking_lot::Mutex;
8
8
  use std::{sync::Arc, time::Duration};
9
9
  use temporalio_common::telemetry::{
10
- Logger, OtelCollectorOptions, TelemetryOptions, metrics::CoreMeter,
11
- };
12
- use temporalio_sdk_core::{
13
- CoreRuntime,
14
- telemetry::{build_otlp_metric_exporter, construct_filter_string, telemetry_init_global},
10
+ Logger, OtelCollectorOptions, TelemetryOptions, build_otlp_metric_exporter,
11
+ construct_filter_string, metrics::CoreMeter, telemetry_init_global,
15
12
  };
13
+ use temporalio_sdk_core::CoreRuntime;
16
14
  use tracing::Level;
17
15
  use tracing_subscriber::fmt::MakeWriter;
18
16
 
@@ -1,13 +1,14 @@
1
- use crate::common::CoreWfStarter;
2
- use futures_util::{FutureExt, StreamExt, sink, stream::FuturesUnordered};
1
+ use crate::common::{CoreWfStarter, activity_functions::StdActivities};
2
+ use futures_util::{StreamExt, sink, stream::FuturesUnordered};
3
3
  use rand::{Rng, SeedableRng, prelude::Distribution, rngs::SmallRng};
4
- use std::{future, time::Duration};
5
- use temporalio_client::{WfClientExt, WorkflowClientTrait, WorkflowOptions};
6
- use temporalio_common::protos::coresdk::{AsJsonPayloadExt, FromJsonPayloadExt, IntoPayloadsExt};
7
- use temporalio_sdk::{
8
- ActContext, ActivityError, ActivityOptions, LocalActivityOptions, WfContext, WorkflowResult,
4
+ use std::{sync::Arc, time::Duration};
5
+ use temporalio_client::{
6
+ UntypedSignal, UntypedWorkflow, WorkflowSignalOptions, WorkflowStartOptions,
9
7
  };
10
- use tokio_util::sync::CancellationToken;
8
+ use temporalio_common::{data_converters::RawValue, protos::coresdk::AsJsonPayloadExt};
9
+ use temporalio_macros::{workflow, workflow_methods};
10
+ use temporalio_sdk::{ActivityOptions, LocalActivityOptions, WorkflowContext, WorkflowResult};
11
+ use temporalio_sdk_core::TunerHolder;
11
12
 
12
13
  const FUZZY_SIG: &str = "fuzzy_sig";
13
14
 
@@ -30,46 +31,50 @@ impl Distribution<FuzzyWfAction> for FuzzyWfActionSampler {
30
31
  }
31
32
  }
32
33
 
33
- async fn echo(_ctx: ActContext, echo_me: String) -> Result<String, ActivityError> {
34
- Ok(echo_me)
34
+ #[workflow]
35
+ #[derive(Default)]
36
+ struct FuzzyWf {
37
+ done: bool,
35
38
  }
36
39
 
37
- async fn fuzzy_wf_def(ctx: WfContext) -> WorkflowResult<()> {
38
- let sigchan = ctx
39
- .make_signal_channel(FUZZY_SIG)
40
- .map(|sd| FuzzyWfAction::from_json_payload(&sd.input[0]).expect("Can deserialize signal"));
41
- let done = CancellationToken::new();
42
- let done_setter = done.clone();
40
+ #[workflow_methods]
41
+ impl FuzzyWf {
42
+ #[run(name = "fuzzy_wf")]
43
+ async fn run(ctx: &mut WorkflowContext<Self>) -> WorkflowResult<()> {
44
+ ctx.wait_condition(|s| s.done).await;
45
+ Ok(())
46
+ }
43
47
 
44
- sigchan
45
- .take_until(done.cancelled())
46
- .for_each_concurrent(None, |action| match action {
47
- FuzzyWfAction::DoAct => ctx
48
- .activity(ActivityOptions {
49
- activity_type: "echo_activity".to_string(),
50
- start_to_close_timeout: Some(Duration::from_secs(5)),
51
- input: "hi!".as_json_payload().expect("serializes fine"),
52
- ..Default::default()
53
- })
54
- .map(|_| ())
55
- .boxed(),
56
- FuzzyWfAction::DoLocalAct => ctx
57
- .local_activity(LocalActivityOptions {
58
- activity_type: "echo_activity".to_string(),
59
- start_to_close_timeout: Some(Duration::from_secs(5)),
60
- input: "hi!".as_json_payload().expect("serializes fine"),
61
- ..Default::default()
62
- })
63
- .map(|_| ())
64
- .boxed(),
65
- FuzzyWfAction::Shutdown => {
66
- done_setter.cancel();
67
- future::ready(()).boxed()
48
+ #[signal(name = "fuzzy_sig")]
49
+ async fn fuzzy_signal(ctx: &mut WorkflowContext<Self>, action: FuzzyWfAction) {
50
+ match action {
51
+ FuzzyWfAction::Shutdown => ctx.state_mut(|s| s.done = true),
52
+ FuzzyWfAction::DoAct => {
53
+ let _ = ctx
54
+ .start_activity(
55
+ StdActivities::echo,
56
+ "hi!".to_string(),
57
+ ActivityOptions {
58
+ start_to_close_timeout: Some(Duration::from_secs(5)),
59
+ ..Default::default()
60
+ },
61
+ )
62
+ .await;
68
63
  }
69
- })
70
- .await;
71
-
72
- Ok(().into())
64
+ FuzzyWfAction::DoLocalAct => {
65
+ let _ = ctx
66
+ .start_local_activity(
67
+ StdActivities::echo,
68
+ "hi!".to_string(),
69
+ LocalActivityOptions {
70
+ start_to_close_timeout: Some(Duration::from_secs(5)),
71
+ ..Default::default()
72
+ },
73
+ )
74
+ .await;
75
+ }
76
+ }
77
+ }
73
78
  }
74
79
 
75
80
  #[tokio::test(flavor = "multi_thread", worker_threads = 4)]
@@ -77,27 +82,25 @@ async fn fuzzy_workflow() {
77
82
  let num_workflows = 200;
78
83
  let wf_name = "fuzzy_wf";
79
84
  let mut starter = CoreWfStarter::new("fuzzy_workflow");
80
- starter.worker_config.max_outstanding_workflow_tasks = Some(25);
81
- starter.worker_config.max_cached_workflows = 25;
82
- starter.worker_config.max_outstanding_activities = Some(25);
85
+ starter.sdk_config.max_cached_workflows = 25;
86
+ starter.sdk_config.tuner = Arc::new(TunerHolder::fixed_size(25, 25, 100, 100));
83
87
  let mut worker = starter.worker().await;
84
- worker.register_wf(wf_name.to_owned(), fuzzy_wf_def);
85
- worker.register_activity("echo_activity", echo);
88
+ worker.register_workflow::<FuzzyWf>();
89
+ worker.register_activities(StdActivities);
90
+
86
91
  let client = starter.get_client().await;
92
+ let task_queue = starter.get_task_queue().to_owned();
87
93
 
88
- let mut workflow_handles = vec![];
89
94
  for i in 0..num_workflows {
90
95
  let wfid = format!("{wf_name}_{i}");
91
- let rid = worker
92
- .submit_wf(
93
- wfid.clone(),
94
- wf_name.to_owned(),
95
- vec![],
96
- WorkflowOptions::default(),
96
+ worker
97
+ .submit_workflow(
98
+ FuzzyWf::run,
99
+ (),
100
+ WorkflowStartOptions::new(task_queue.clone(), wfid).build(),
97
101
  )
98
102
  .await
99
103
  .unwrap();
100
- workflow_handles.push(client.get_untyped_workflow_handle(wfid, rid));
101
104
  }
102
105
 
103
106
  let rng = SmallRng::seed_from_u64(523189);
@@ -108,13 +111,19 @@ async fn fuzzy_workflow() {
108
111
  for action in actions {
109
112
  let sends: FuturesUnordered<_> = (0..num_workflows)
110
113
  .map(|i| {
111
- client.signal_workflow_execution(
112
- format!("{wf_name}_{i}"),
113
- "".to_string(),
114
- FUZZY_SIG.to_string(),
115
- [action.as_json_payload().expect("Serializes ok")].into_payloads(),
116
- None,
117
- )
114
+ let handle =
115
+ client.get_workflow_handle::<UntypedWorkflow>(format!("{wf_name}_{i}"));
116
+ async move {
117
+ handle
118
+ .signal(
119
+ UntypedSignal::new(FUZZY_SIG),
120
+ RawValue::new(vec![
121
+ action.as_json_payload().expect("Serializes ok"),
122
+ ]),
123
+ WorkflowSignalOptions::default(),
124
+ )
125
+ .await
126
+ }
118
127
  })
119
128
  .collect();
120
129
  sends