@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,290 +1,12 @@
1
1
  //! This module helps with the initialization and management of telemetry. IE: Metrics and tracing.
2
2
  //! Logs from core are all traces, which may be exported to the console, in memory, or externally.
3
3
 
4
- mod log_export;
5
- pub(crate) mod metrics;
6
- #[cfg(feature = "otel")]
7
- mod otel;
8
- #[cfg(feature = "prom")]
9
- mod prometheus_meter;
10
- #[cfg(feature = "prom")]
11
- mod prometheus_server;
12
-
13
- // Always export bucket configuration function since it's used by both OTel and Prometheus
14
- pub use metrics::default_buckets_for;
15
-
16
- #[cfg(feature = "otel")]
17
- pub use metrics::{
18
- ACTIVITY_EXEC_LATENCY_HISTOGRAM_NAME, ACTIVITY_SCHED_TO_START_LATENCY_HISTOGRAM_NAME,
19
- MetricsCallBuffer, WORKFLOW_E2E_LATENCY_HISTOGRAM_NAME,
20
- WORKFLOW_TASK_EXECUTION_LATENCY_HISTOGRAM_NAME, WORKFLOW_TASK_REPLAY_LATENCY_HISTOGRAM_NAME,
21
- WORKFLOW_TASK_SCHED_TO_START_LATENCY_HISTOGRAM_NAME,
22
- };
23
- #[cfg(feature = "otel")]
24
- pub use otel::build_otlp_metric_exporter;
25
- #[cfg(feature = "prom")]
26
- pub use prometheus_server::start_prometheus_metric_exporter;
27
-
28
- pub use log_export::{CoreLogBuffer, CoreLogBufferedConsumer, CoreLogStreamConsumer};
29
-
30
- use crate::telemetry::{log_export::CoreLogConsumerLayer, metrics::PrefixedMetricsMeter};
31
4
  use itertools::Itertools;
32
- use parking_lot::Mutex;
33
- use std::{
34
- cell::RefCell,
35
- collections::VecDeque,
36
- env,
37
- sync::{
38
- Arc,
39
- atomic::{AtomicBool, Ordering},
40
- },
41
- };
42
- use temporalio_common::telemetry::{
43
- CoreLog, CoreTelemetry, Logger, TaskQueueLabelStrategy, TelemetryOptions,
44
- TelemetryOptionsBuilder,
45
- metrics::{CoreMeter, MetricKeyValue, NewAttributes, TemporalMeter},
46
- };
47
- use tracing::{Level, Subscriber};
48
- use tracing_subscriber::{EnvFilter, Layer, layer::SubscriberExt};
49
-
50
- const TELEM_SERVICE_NAME: &str = "temporal-core-sdk";
51
-
52
- const FORWARD_LOG_BUFFER_SIZE: usize = 2048;
53
-
54
- /// Help you construct an [EnvFilter] compatible filter string which will forward all core module
55
- /// traces at `core_level` and all others (from 3rd party modules, etc) at `other_level`.
56
- pub fn construct_filter_string(core_level: Level, other_level: Level) -> String {
57
- format!(
58
- "{other_level},temporalio_sdk_core={core_level},temporalio_client={core_level},temporalio_sdk={core_level}"
59
- )
60
- }
61
-
62
- /// Holds initialized tracing/metrics exporters, etc
63
- pub struct TelemetryInstance {
64
- metric_prefix: String,
65
- logs_out: Option<Mutex<CoreLogBuffer>>,
66
- metrics: Option<Arc<dyn CoreMeter + 'static>>,
67
- /// The tracing subscriber which is associated with this telemetry instance. May be `None` if
68
- /// the user has not opted into any tracing configuration.
69
- trace_subscriber: Option<Arc<dyn Subscriber + Send + Sync>>,
70
- attach_service_name: bool,
71
- task_queue_label_strategy: TaskQueueLabelStrategy,
72
- }
73
-
74
- impl TelemetryInstance {
75
- fn new(
76
- trace_subscriber: Option<Arc<dyn Subscriber + Send + Sync>>,
77
- logs_out: Option<Mutex<CoreLogBuffer>>,
78
- metric_prefix: String,
79
- metrics: Option<Arc<dyn CoreMeter + 'static>>,
80
- attach_service_name: bool,
81
- task_queue_label_strategy: TaskQueueLabelStrategy,
82
- ) -> Self {
83
- Self {
84
- metric_prefix,
85
- logs_out,
86
- metrics,
87
- trace_subscriber,
88
- attach_service_name,
89
- task_queue_label_strategy,
90
- }
91
- }
92
-
93
- /// Return the trace subscriber associated with the telemetry options/instance. Can be used
94
- /// to manually set the default for a thread or globally using the `tracing` crate, or with
95
- /// [set_trace_subscriber_for_current_thread].
96
- pub fn trace_subscriber(&self) -> Option<Arc<dyn Subscriber + Send + Sync>> {
97
- self.trace_subscriber.clone()
98
- }
99
-
100
- /// Some metric meters cannot be initialized until after a tokio runtime has started and after
101
- /// other telemetry has initted (ex: prometheus). They can be attached here.
102
- pub fn attach_late_init_metrics(&mut self, meter: Arc<dyn CoreMeter + 'static>) {
103
- self.metrics = Some(meter);
104
- }
105
-
106
- /// Returns our wrapper for metric meters, including the `metric_prefix` from
107
- /// [TelemetryOptions]. This should be used to initialize clients or for any other
108
- /// temporal-owned metrics. User defined metrics should use [Self::get_metric_meter].
109
- pub fn get_temporal_metric_meter(&self) -> Option<TemporalMeter> {
110
- self.metrics.clone().map(|m| {
111
- let kvs = self.default_kvs();
112
- let attribs = NewAttributes::new(kvs);
113
- TemporalMeter::new(
114
- Arc::new(PrefixedMetricsMeter::new(self.metric_prefix.clone(), m))
115
- as Arc<dyn CoreMeter>,
116
- attribs,
117
- self.task_queue_label_strategy,
118
- )
119
- })
120
- }
121
-
122
- /// Returns our wrapper for metric meters, including attaching the service name if enabled.
123
- pub fn get_metric_meter(&self) -> Option<TemporalMeter> {
124
- self.metrics.clone().map(|m| {
125
- let kvs = self.default_kvs();
126
- let attribs = NewAttributes::new(kvs);
127
- TemporalMeter::new(m, attribs, self.task_queue_label_strategy)
128
- })
129
- }
130
-
131
- fn default_kvs(&self) -> Vec<MetricKeyValue> {
132
- if self.attach_service_name {
133
- vec![MetricKeyValue::new("service_name", TELEM_SERVICE_NAME)]
134
- } else {
135
- vec![]
136
- }
137
- }
138
- }
139
-
140
- thread_local! {
141
- static SUB_GUARD: RefCell<Option<tracing::subscriber::DefaultGuard>> =
142
- const { RefCell::new(None) };
143
- }
144
- /// Set the trace subscriber for the current thread. This must be done in every thread which uses
145
- /// core stuff, otherwise traces/logs will not be collected on that thread. For example, if using
146
- /// a multithreaded Tokio runtime, you should ensure that said runtime uses
147
- /// [on_thread_start](https://docs.rs/tokio/latest/tokio/runtime/struct.Builder.html#method.on_thread_start)
148
- /// or a similar mechanism to call this for each thread within the runtime.
149
- pub fn set_trace_subscriber_for_current_thread(sub: impl Subscriber + Send + Sync + 'static) {
150
- SUB_GUARD.with(|sg| {
151
- if sg.borrow().is_none() {
152
- let g = tracing::subscriber::set_default(sub);
153
- *sg.borrow_mut() = Some(g);
154
- }
155
- })
156
- }
157
-
158
- /// Undoes [set_trace_subscriber_for_current_thread]
159
- pub fn remove_trace_subscriber_for_current_thread() {
160
- SUB_GUARD.take();
161
- }
162
-
163
- impl CoreTelemetry for TelemetryInstance {
164
- fn fetch_buffered_logs(&self) -> Vec<CoreLog> {
165
- if let Some(logs_out) = self.logs_out.as_ref() {
166
- logs_out.lock().drain()
167
- } else {
168
- vec![]
169
- }
170
- }
171
- }
172
-
173
- /// Initialize tracing subscribers/output and logging export, returning a [TelemetryInstance]
174
- /// which can be used to register default / global tracing subscribers.
175
- ///
176
- /// You should only call this once per unique [TelemetryOptions]
177
- ///
178
- /// See [TelemetryOptions] docs for more on configuration.
179
- pub fn telemetry_init(opts: TelemetryOptions) -> Result<TelemetryInstance, anyhow::Error> {
180
- let mut logs_out = None;
5
+ use std::collections::VecDeque;
181
6
 
182
- // Tracing subscriber layers =========
183
- let mut console_pretty_layer = None;
184
- let mut console_compact_layer = None;
185
- let mut forward_layer = None;
186
- // ===================================
187
-
188
- let tracing_sub = if let Some(ts) = opts.subscriber_override {
189
- Some(ts)
190
- } else {
191
- opts.logging.map(|logger| {
192
- match logger {
193
- Logger::Console { filter } => {
194
- // This is silly dupe but can't be avoided without boxing.
195
- if env::var("TEMPORAL_CORE_PRETTY_LOGS").is_ok() {
196
- console_pretty_layer = Some(
197
- tracing_subscriber::fmt::layer()
198
- .with_target(false)
199
- .event_format(
200
- tracing_subscriber::fmt::format()
201
- .pretty()
202
- .with_source_location(false),
203
- )
204
- .with_filter(EnvFilter::new(filter)),
205
- )
206
- } else {
207
- console_compact_layer = Some(
208
- tracing_subscriber::fmt::layer()
209
- .with_target(false)
210
- .event_format(
211
- tracing_subscriber::fmt::format()
212
- .compact()
213
- .with_source_location(false),
214
- )
215
- .with_filter(EnvFilter::new(filter)),
216
- )
217
- }
218
- }
219
- Logger::Forward { filter } => {
220
- let (export_layer, lo) =
221
- CoreLogConsumerLayer::new_buffered(FORWARD_LOG_BUFFER_SIZE);
222
- logs_out = Some(Mutex::new(lo));
223
- forward_layer = Some(export_layer.with_filter(EnvFilter::new(filter)));
224
- }
225
- Logger::Push { filter, consumer } => {
226
- forward_layer = Some(
227
- CoreLogConsumerLayer::new(consumer).with_filter(EnvFilter::new(filter)),
228
- );
229
- }
230
- };
231
- let reg = tracing_subscriber::registry()
232
- .with(console_pretty_layer)
233
- .with(console_compact_layer)
234
- .with(forward_layer);
235
-
236
- #[cfg(feature = "tokio-console")]
237
- let reg = reg.with(console_subscriber::spawn());
238
- Arc::new(reg) as Arc<dyn Subscriber + Send + Sync>
239
- })
240
- };
241
-
242
- Ok(TelemetryInstance::new(
243
- tracing_sub,
244
- logs_out,
245
- opts.metric_prefix,
246
- opts.metrics,
247
- opts.attach_service_name,
248
- opts.task_queue_label_strategy,
249
- ))
250
- }
251
-
252
- /// WARNING: Calling can cause panics because of <https://github.com/tokio-rs/tracing/issues/1656>
253
- /// Lang must not start using until resolved
254
- ///
255
- /// Initialize telemetry/tracing globally. Useful for testing. Only takes affect when called
256
- /// the first time. Subsequent calls are ignored.
257
- pub fn telemetry_init_global(opts: TelemetryOptions) -> Result<(), anyhow::Error> {
258
- static INITTED: AtomicBool = AtomicBool::new(false);
259
- if INITTED
260
- .compare_exchange(false, true, Ordering::Acquire, Ordering::Relaxed)
261
- .is_ok()
262
- {
263
- let ti = telemetry_init(opts)?;
264
- if let Some(ts) = ti.trace_subscriber() {
265
- tracing::subscriber::set_global_default(ts)?;
266
- }
267
- }
268
- Ok(())
269
- }
7
+ pub(crate) mod metrics;
270
8
 
271
- /// WARNING: Calling can cause panics because of <https://github.com/tokio-rs/tracing/issues/1656>
272
- /// Lang must not start using until resolved
273
- ///
274
- /// Initialize the fallback global handler. All lang SDKs should call this somewhere, once, at
275
- /// startup, as it initializes a fallback handler for any dependencies (looking at you, otel) that
276
- /// don't provide good ways to customize their tracing usage. It sets a WARN-level global filter
277
- /// that uses the default console logger.
278
- pub fn telemetry_init_fallback() -> Result<(), anyhow::Error> {
279
- telemetry_init_global(
280
- TelemetryOptionsBuilder::default()
281
- .logging(Logger::Console {
282
- filter: construct_filter_string(Level::DEBUG, Level::WARN),
283
- })
284
- .build()?,
285
- )?;
286
- Ok(())
287
- }
9
+ pub use metrics::MetricsCallBuffer;
288
10
 
289
11
  /// A trait for using [Display] on the contents of vecs, etc, which don't implement it.
290
12
  ///
@@ -8,14 +8,16 @@ pub use crate::{
8
8
  };
9
9
 
10
10
  use crate::{
11
- TaskToken, Worker, WorkerConfig, WorkerConfigBuilder,
11
+ PollError, PollerBehavior, TaskToken, Worker, WorkerConfig, WorkerConfigBuilder,
12
+ WorkerVersioningStrategy,
12
13
  pollers::{BoxedPoller, MockManualPoller},
13
14
  protosext::ValidPollWFTQResponse,
14
15
  replay::TestHistoryBuilder,
15
16
  sticky_q_name_for_worker,
16
17
  worker::{
17
- TaskPollers,
18
+ TaskPollers, WorkerTelemetry,
18
19
  client::{LegacyQueryResult, MockWorkerClient, WorkerClient, WorkflowTaskCompletion},
20
+ worker_config_builder,
19
21
  },
20
22
  };
21
23
  use assert_matches::assert_matches;
@@ -36,9 +38,8 @@ use std::{
36
38
  task::{Context, Poll},
37
39
  time::Duration,
38
40
  };
41
+ pub use temporalio_common::telemetry::metrics::TemporalMeter;
39
42
  use temporalio_common::{
40
- Worker as WorkerTrait,
41
- errors::PollError,
42
43
  protos::{
43
44
  coresdk::{
44
45
  workflow_activation::{WorkflowActivationJob, workflow_activation_job},
@@ -58,7 +59,7 @@ use temporalio_common::{
58
59
  },
59
60
  utilities::pack_any,
60
61
  },
61
- worker::{PollerBehavior, WorkerTaskTypes, WorkerVersioningStrategy},
62
+ worker::WorkerTaskTypes,
62
63
  };
63
64
  use tokio::sync::{Notify, mpsc::unbounded_channel};
64
65
  use tokio_stream::wrappers::UnboundedReceiverStream;
@@ -68,7 +69,7 @@ use uuid::Uuid;
68
69
  pub const NAMESPACE: &str = "default";
69
70
 
70
71
  /// Initiate shutdown, drain the pollers (handling evictions), and wait for shutdown to complete.
71
- pub async fn drain_pollers_and_shutdown(worker: &dyn WorkerTrait) {
72
+ pub async fn drain_pollers_and_shutdown(worker: &Worker) {
72
73
  worker.initiate_shutdown();
73
74
  tokio::join!(
74
75
  async {
@@ -97,9 +98,20 @@ pub async fn drain_pollers_and_shutdown(worker: &dyn WorkerTrait) {
97
98
  worker.shutdown().await;
98
99
  }
99
100
 
100
- pub fn test_worker_cfg() -> WorkerConfigBuilder {
101
- let mut wcb = WorkerConfigBuilder::default();
102
- wcb.namespace(NAMESPACE)
101
+ #[allow(clippy::type_complexity)]
102
+ pub fn test_worker_cfg() -> WorkerConfigBuilder<
103
+ worker_config_builder::SetWorkflowTaskPollerBehavior<
104
+ worker_config_builder::SetTaskTypes<
105
+ worker_config_builder::SetIgnoreEvictsOnShutdown<
106
+ worker_config_builder::SetVersioningStrategy<
107
+ worker_config_builder::SetTaskQueue<worker_config_builder::SetNamespace>,
108
+ >,
109
+ >,
110
+ >,
111
+ >,
112
+ > {
113
+ WorkerConfig::builder()
114
+ .namespace(NAMESPACE)
103
115
  .task_queue(Uuid::new_v4().to_string())
104
116
  .versioning_strategy(WorkerVersioningStrategy::None {
105
117
  build_id: "test_bin_id".to_string(),
@@ -107,8 +119,7 @@ pub fn test_worker_cfg() -> WorkerConfigBuilder {
107
119
  .ignore_evicts_on_shutdown(true)
108
120
  .task_types(WorkerTaskTypes::all())
109
121
  // Serial polling since it makes mocking much easier.
110
- .workflow_task_poller_behavior(PollerBehavior::SimpleMaximum(1_usize));
111
- wcb
122
+ .workflow_task_poller_behavior(PollerBehavior::SimpleMaximum(1_usize))
112
123
  }
113
124
 
114
125
  /// When constructing responses for mocks, indicates how a given response should be built
@@ -204,7 +215,7 @@ pub fn mock_worker(mocks: MocksHolder) -> Worker {
204
215
  act_poller,
205
216
  nexus_poller,
206
217
  },
207
- None,
218
+ mocks.worker_telemetry,
208
219
  None,
209
220
  false,
210
221
  )
@@ -222,6 +233,7 @@ pub struct MocksHolder {
222
233
  client: Arc<dyn WorkerClient>,
223
234
  inputs: MockWorkerInputs,
224
235
  pub outstanding_task_map: Option<OutstandingWFTMap>,
236
+ worker_telemetry: Option<WorkerTelemetry>,
225
237
  }
226
238
 
227
239
  impl MocksHolder {
@@ -255,6 +267,10 @@ impl MocksHolder {
255
267
  self.inputs.nexus_poller = Some(nexus_poller);
256
268
  }
257
269
 
270
+ pub fn set_temporal_meter(&mut self, meter: TemporalMeter) {
271
+ self.worker_telemetry = Some(WorkerTelemetry::from_meter(meter));
272
+ }
273
+
258
274
  /// Can be used for tests that need to avoid auto-shutdown due to running out of mock responses
259
275
  pub fn make_wft_stream_interminable(&mut self) {
260
276
  if let Some(old_stream) = self.inputs.wft_stream.take() {
@@ -298,6 +314,7 @@ impl MocksHolder {
298
314
  client: Arc::new(client),
299
315
  inputs: mock_worker,
300
316
  outstanding_task_map: None,
317
+ worker_telemetry: None,
301
318
  }
302
319
  }
303
320
 
@@ -321,6 +338,7 @@ impl MocksHolder {
321
338
  client: Arc::new(client),
322
339
  inputs: mock_worker,
323
340
  outstanding_task_map: None,
341
+ worker_telemetry: None,
324
342
  }
325
343
  }
326
344
 
@@ -344,6 +362,7 @@ impl MocksHolder {
344
362
  client: Arc::new(client),
345
363
  inputs: mock_worker,
346
364
  outstanding_task_map: None,
365
+ worker_telemetry: None,
347
366
  }
348
367
  }
349
368
 
@@ -381,6 +400,7 @@ impl MocksHolder {
381
400
  client: Arc::new(client),
382
401
  inputs: mock_worker,
383
402
  outstanding_task_map: None,
403
+ worker_telemetry: None,
384
404
  }
385
405
  }
386
406
 
@@ -406,6 +426,7 @@ impl MocksHolder {
406
426
  client: Arc::new(client),
407
427
  inputs: mock_worker,
408
428
  outstanding_task_map: None,
429
+ worker_telemetry: None,
409
430
  }
410
431
  }
411
432
  }
@@ -816,6 +837,7 @@ pub fn build_mock_pollers(mut cfg: MockPollCfg) -> MocksHolder {
816
837
  client: Arc::new(cfg.mock_client),
817
838
  inputs: mock_worker,
818
839
  outstanding_task_map: Some(outstanding_wf_task_tokens),
840
+ worker_telemetry: None,
819
841
  };
820
842
  if let Some(activity_responses) = cfg.activity_responses {
821
843
  let act_poller = mock_poller_from_resps(activity_responses);
@@ -1015,10 +1037,7 @@ pub trait WorkerTestHelpers {
1015
1037
  }
1016
1038
 
1017
1039
  #[async_trait::async_trait]
1018
- impl<T> WorkerTestHelpers for T
1019
- where
1020
- T: WorkerTrait + ?Sized,
1021
- {
1040
+ impl WorkerTestHelpers for Worker {
1022
1041
  async fn complete_execution(&self, run_id: &str) {
1023
1042
  self.complete_workflow_activation(WorkflowActivationCompletion::from_cmds(
1024
1043
  run_id.to_string(),
@@ -2,12 +2,9 @@
2
2
 
3
3
  use futures_util::{StreamExt, stream::FuturesUnordered};
4
4
  use std::{collections::HashSet, future::Future};
5
- use temporalio_common::{
6
- Worker as CoreWorker,
7
- protos::coresdk::{
8
- workflow_activation::workflow_activation_job,
9
- workflow_completion::{WorkflowActivationCompletion, workflow_activation_completion},
10
- },
5
+ use temporalio_common::protos::coresdk::{
6
+ workflow_activation::workflow_activation_job,
7
+ workflow_completion::{WorkflowActivationCompletion, workflow_activation_completion},
11
8
  };
12
9
 
13
10
  /// Given a desired number of concurrent executions and a provided function that produces a future,
@@ -595,6 +595,7 @@ mod test {
595
595
  details: vec![Payload {
596
596
  metadata: Default::default(),
597
597
  data: vec![payload_data],
598
+ external_payloads: Default::default(),
598
599
  }],
599
600
  },
600
601
  // Mimic the same delay we would apply in activity task manager
@@ -3,7 +3,7 @@ use crate::{
3
3
  abstractions::{MeteredPermitDealer, OwnedMeteredSemPermit, UsedMeteredSemPermit, dbg_panic},
4
4
  protosext::ValidScheduleLA,
5
5
  telemetry::metrics::{activity_type, should_record_failure_metric, workflow_type},
6
- worker::workflow::HeartbeatTimeoutMsg,
6
+ worker::{LocalActivitySlotKind, workflow::HeartbeatTimeoutMsg},
7
7
  };
8
8
  use futures_util::{
9
9
  Stream, StreamExt, future, future::AbortRegistration, stream, stream::BoxStream,
@@ -17,20 +17,17 @@ use std::{
17
17
  task::{Context, Poll},
18
18
  time::{Duration, Instant, SystemTime},
19
19
  };
20
- use temporalio_common::{
21
- protos::{
22
- coresdk::{
23
- LocalActivitySlotInfo,
24
- activity_result::{Cancellation, Failure as ActFail, Success},
25
- activity_task::{ActivityCancelReason, ActivityTask, Start, activity_task},
26
- },
27
- temporal::api::{
28
- common::v1::WorkflowExecution,
29
- enums::v1::TimeoutType,
30
- failure::v1::{Failure as APIFailure, TimeoutFailureInfo, failure},
31
- },
20
+ use temporalio_common::protos::{
21
+ coresdk::{
22
+ LocalActivitySlotInfo,
23
+ activity_result::{Cancellation, Failure as ActFail, Success},
24
+ activity_task::{ActivityCancelReason, ActivityTask, Start, activity_task},
25
+ },
26
+ temporal::api::{
27
+ common::v1::WorkflowExecution,
28
+ enums::v1::TimeoutType,
29
+ failure::v1::{Failure as APIFailure, TimeoutFailureInfo, failure},
32
30
  },
33
- worker::LocalActivitySlotKind,
34
31
  };
35
32
  use tokio::{
36
33
  sync::{
@@ -7,7 +7,7 @@ pub(crate) use local_activities::{
7
7
  };
8
8
 
9
9
  use crate::{
10
- PollError, TaskToken,
10
+ TaskToken,
11
11
  abstractions::{
12
12
  ClosableMeteredPermitDealer, MeteredPermitDealer, TrackedOwnedMeteredSemPermit,
13
13
  UsedMeteredSemPermit,
@@ -17,6 +17,7 @@ use crate::{
17
17
  MetricsContext, activity_type, eager, should_record_failure_metric, workflow_type,
18
18
  },
19
19
  worker::{
20
+ ActivitySlotKind, PollError,
20
21
  activities::activity_heartbeat_manager::ActivityHeartbeatError, client::WorkerClient,
21
22
  },
22
23
  };
@@ -35,21 +36,16 @@ use std::{
35
36
  },
36
37
  time::{Duration, Instant, SystemTime},
37
38
  };
38
- use temporalio_common::{
39
- protos::{
40
- coresdk::{
41
- ActivityHeartbeat, ActivitySlotInfo,
42
- activity_result::{self as ar, activity_execution_result as aer},
43
- activity_task::{ActivityCancelReason, ActivityCancellationDetails, ActivityTask},
44
- },
45
- temporal::api::{
46
- failure::v1::{
47
- ApplicationFailureInfo, CanceledFailureInfo, Failure, failure::FailureInfo,
48
- },
49
- workflowservice::v1::PollActivityTaskQueueResponse,
50
- },
39
+ use temporalio_common::protos::{
40
+ coresdk::{
41
+ ActivityHeartbeat, ActivitySlotInfo,
42
+ activity_result::{self as ar, activity_execution_result as aer},
43
+ activity_task::{ActivityCancelReason, ActivityCancellationDetails, ActivityTask},
44
+ },
45
+ temporal::api::{
46
+ failure::v1::{ApplicationFailureInfo, CanceledFailureInfo, Failure, failure::FailureInfo},
47
+ workflowservice::v1::PollActivityTaskQueueResponse,
51
48
  },
52
- worker::ActivitySlotKind,
53
49
  };
54
50
  use tokio::{
55
51
  join,
@@ -737,12 +733,10 @@ mod tests {
737
733
  abstractions::tests::fixed_size_permit_dealer,
738
734
  pollers::{ActivityTaskOptions, LongPollBuffer},
739
735
  prost_dur,
740
- worker::client::mocks::mock_worker_client,
736
+ worker::{PollerBehavior, client::mocks::mock_worker_client},
741
737
  };
742
738
  use crossbeam_utils::atomic::AtomicCell;
743
- use temporalio_common::{
744
- protos::coresdk::activity_result::ActivityExecutionResult, worker::PollerBehavior,
745
- };
739
+ use temporalio_common::protos::coresdk::activity_result::ActivityExecutionResult;
746
740
 
747
741
  #[tokio::test]
748
742
  async fn per_worker_ratelimit() {
@@ -787,6 +781,7 @@ mod tests {
787
781
  max_tps: None,
788
782
  },
789
783
  Arc::new(AtomicCell::new(None)),
784
+ Arc::new(AtomicBool::new(false)),
790
785
  );
791
786
  let atm = WorkerActivityTasks::new(
792
787
  sem.clone(),
@@ -879,6 +874,7 @@ mod tests {
879
874
  max_tps: None,
880
875
  },
881
876
  Arc::new(AtomicCell::new(None)),
877
+ Arc::new(AtomicBool::new(false)),
882
878
  );
883
879
  let atm = WorkerActivityTasks::new(
884
880
  sem.clone(),
@@ -953,6 +949,7 @@ mod tests {
953
949
  max_tps: None,
954
950
  },
955
951
  Arc::new(AtomicCell::new(None)),
952
+ Arc::new(AtomicBool::new(false)),
956
953
  );
957
954
  let atm = WorkerActivityTasks::new(
958
955
  sem.clone(),
@@ -1,5 +1,5 @@
1
1
  use super::*;
2
- use futures_util::Future;
2
+ use futures_util::{Future, FutureExt};
3
3
  use std::sync::{Arc, LazyLock};
4
4
  use temporalio_client::worker::ClientWorkerSet;
5
5
 
@@ -30,12 +30,13 @@ pub fn mock_worker_client() -> MockWorkerClient {
30
30
  .returning(|| DEFAULT_WORKERS_REGISTRY.clone());
31
31
  r.expect_is_mock().returning(|| true);
32
32
  r.expect_shutdown_worker()
33
- .returning(|_, _| Ok(ShutdownWorkerResponse {}));
33
+ .returning(|_, _, _, _| Ok(ShutdownWorkerResponse {}));
34
34
  r.expect_sdk_name_and_version()
35
35
  .returning(|| ("test-core".to_string(), "0.0.0".to_string()));
36
36
  r.expect_identity()
37
37
  .returning(|| "test-identity".to_string());
38
38
  r.expect_worker_grouping_key().returning(Uuid::new_v4);
39
+ r.expect_worker_instance_key().returning(Uuid::new_v4);
39
40
  r.expect_set_heartbeat_client_fields().returning(|hb| {
40
41
  hb.sdk_name = "test-core".to_string();
41
42
  hb.sdk_version = "0.0.0".to_string();
@@ -53,10 +54,14 @@ pub(crate) fn mock_manual_worker_client() -> MockManualWorkerClient {
53
54
  r.expect_workers()
54
55
  .returning(|| DEFAULT_WORKERS_REGISTRY.clone());
55
56
  r.expect_is_mock().returning(|| true);
57
+ r.expect_shutdown_worker()
58
+ .returning(|_, _, _, _| async { Ok(ShutdownWorkerResponse {}) }.boxed());
56
59
  r.expect_sdk_name_and_version()
57
60
  .returning(|| ("test-core".to_string(), "0.0.0".to_string()));
58
61
  r.expect_identity()
59
62
  .returning(|| "test-identity".to_string());
63
+ r.expect_worker_grouping_key().returning(Uuid::new_v4);
64
+ r.expect_worker_instance_key().returning(Uuid::new_v4);
60
65
  r
61
66
  }
62
67
 
@@ -124,7 +129,7 @@ mockall::mock! {
124
129
  fn fail_nexus_task<'a, 'b>(
125
130
  &self,
126
131
  task_token: TaskToken,
127
- error: nexus::v1::HandlerError,
132
+ error: NexusTaskFailure,
128
133
  ) -> impl Future<Output = Result<RespondNexusTaskFailedResponse>> + Send + 'b
129
134
  where 'a: 'b, Self: 'b;
130
135
 
@@ -154,7 +159,7 @@ mockall::mock! {
154
159
  impl Future<Output = Result<DescribeNamespaceResponse>> + Send + 'b
155
160
  where 'a: 'b, Self: 'b;
156
161
 
157
- fn shutdown_worker<'a, 'b>(&self, sticky_task_queue: String, worker_heartbeat: Option<WorkerHeartbeat>) -> impl Future<Output = Result<ShutdownWorkerResponse>> + Send + 'b
162
+ fn shutdown_worker<'a, 'b>(&self, sticky_task_queue: String, task_queue: String, task_queue_types: Vec<TaskQueueType>, worker_heartbeat: Option<WorkerHeartbeat>) -> impl Future<Output = Result<ShutdownWorkerResponse>> + Send + 'b
158
163
  where 'a: 'b, Self: 'b;
159
164
 
160
165
  fn record_worker_heartbeat<'a, 'b>(
@@ -163,13 +168,14 @@ mockall::mock! {
163
168
  heartbeat: Vec<WorkerHeartbeat>
164
169
  ) -> impl Future<Output = Result<RecordWorkerHeartbeatResponse>> + Send + 'b where 'a: 'b, Self: 'b;
165
170
 
166
- fn replace_client(&self, new_client: Client);
171
+ fn replace_connection(&self, new_connection: Connection);
167
172
  fn capabilities(&self) -> Option<Capabilities>;
168
173
  fn workers(&self) -> Arc<ClientWorkerSet>;
169
174
  fn is_mock(&self) -> bool;
170
175
  fn sdk_name_and_version(&self) -> (String, String);
171
176
  fn identity(&self) -> String;
172
177
  fn worker_grouping_key(&self) -> Uuid;
178
+ fn worker_instance_key(&self) -> Uuid;
173
179
  fn set_heartbeat_client_fields(&self, heartbeat: &mut WorkerHeartbeat);
174
180
  }
175
181
  }