@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,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, OtelCollectorOptionsBuilder, TelemetryOptionsBuilder, 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
 
@@ -58,28 +56,25 @@ async fn otel_errors_logged_as_errors() {
58
56
  .with_env_filter("debug")
59
57
  .finish(),
60
58
  );
61
- let opts = OtelCollectorOptionsBuilder::default()
59
+ let opts = OtelCollectorOptions::builder()
62
60
  .url("https://localhost:12345/v1/metrics".parse().unwrap()) // Nothing bound on that port
63
- .build()
64
- .unwrap();
61
+ .build();
65
62
  let exporter = build_otlp_metric_exporter(opts).unwrap();
66
63
 
67
64
  // Global initialization is needed to capture (some) otel logging.
68
65
  telemetry_init_global(
69
- TelemetryOptionsBuilder::default()
66
+ TelemetryOptions::builder()
70
67
  .subscriber_override(subscriber)
71
- .build()
72
- .unwrap(),
68
+ .build(),
73
69
  )
74
70
  .unwrap();
75
- let telemopts = TelemetryOptionsBuilder::default()
71
+ let telemopts = TelemetryOptions::builder()
76
72
  .metrics(Arc::new(exporter) as Arc<dyn CoreMeter>)
77
73
  // Importantly, _not_ using subscriber override, is using console.
78
74
  .logging(Logger::Console {
79
75
  filter: construct_filter_string(Level::INFO, Level::WARN),
80
76
  })
81
- .build()
82
- .unwrap();
77
+ .build();
83
78
 
84
79
  let rt = CoreRuntime::new_assume_tokio(get_integ_runtime_options(telemopts)).unwrap();
85
80
  let mut starter = CoreWfStarter::new_with_runtime("otel_errors_logged_as_errors", rt);
@@ -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,29 +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
81
- .worker_config
82
- .max_outstanding_workflow_tasks(25_usize)
83
- .max_cached_workflows(25_usize)
84
- .max_outstanding_activities(25_usize);
85
+ starter.sdk_config.max_cached_workflows = 25;
86
+ starter.sdk_config.tuner = Arc::new(TunerHolder::fixed_size(25, 25, 100, 100));
85
87
  let mut worker = starter.worker().await;
86
- worker.register_wf(wf_name.to_owned(), fuzzy_wf_def);
87
- worker.register_activity("echo_activity", echo);
88
+ worker.register_workflow::<FuzzyWf>();
89
+ worker.register_activities(StdActivities);
90
+
88
91
  let client = starter.get_client().await;
92
+ let task_queue = starter.get_task_queue().to_owned();
89
93
 
90
- let mut workflow_handles = vec![];
91
94
  for i in 0..num_workflows {
92
95
  let wfid = format!("{wf_name}_{i}");
93
- let rid = worker
94
- .submit_wf(
95
- wfid.clone(),
96
- wf_name.to_owned(),
97
- vec![],
98
- WorkflowOptions::default(),
96
+ worker
97
+ .submit_workflow(
98
+ FuzzyWf::run,
99
+ (),
100
+ WorkflowStartOptions::new(task_queue.clone(), wfid).build(),
99
101
  )
100
102
  .await
101
103
  .unwrap();
102
- workflow_handles.push(client.get_untyped_workflow_handle(wfid, rid));
103
104
  }
104
105
 
105
106
  let rng = SmallRng::seed_from_u64(523189);
@@ -110,13 +111,19 @@ async fn fuzzy_workflow() {
110
111
  for action in actions {
111
112
  let sends: FuturesUnordered<_> = (0..num_workflows)
112
113
  .map(|i| {
113
- client.signal_workflow_execution(
114
- format!("{wf_name}_{i}"),
115
- "".to_string(),
116
- FUZZY_SIG.to_string(),
117
- [action.as_json_payload().expect("Serializes ok")].into_payloads(),
118
- None,
119
- )
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
+ }
120
127
  })
121
128
  .collect();
122
129
  sends