@temporalio/core-bridge 0.23.0 → 1.0.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 (135) hide show
  1. package/Cargo.lock +118 -15
  2. package/Cargo.toml +2 -1
  3. package/LICENSE.md +1 -1
  4. package/README.md +1 -1
  5. package/index.d.ts +47 -18
  6. package/package.json +7 -7
  7. package/releases/aarch64-apple-darwin/index.node +0 -0
  8. package/releases/aarch64-unknown-linux-gnu/index.node +0 -0
  9. package/releases/x86_64-apple-darwin/index.node +0 -0
  10. package/releases/x86_64-pc-windows-msvc/index.node +0 -0
  11. package/releases/x86_64-unknown-linux-gnu/index.node +0 -0
  12. package/sdk-core/.buildkite/docker/docker-compose.yaml +4 -2
  13. package/sdk-core/ARCHITECTURE.md +9 -7
  14. package/sdk-core/README.md +5 -1
  15. package/sdk-core/arch_docs/diagrams/workflow_internals.svg +1 -0
  16. package/sdk-core/bridge-ffi/src/wrappers.rs +0 -3
  17. package/sdk-core/client/src/lib.rs +26 -8
  18. package/sdk-core/client/src/raw.rs +166 -54
  19. package/sdk-core/client/src/retry.rs +9 -4
  20. package/sdk-core/client/src/workflow_handle/mod.rs +4 -2
  21. package/sdk-core/core/Cargo.toml +2 -0
  22. package/sdk-core/core/src/abstractions.rs +137 -16
  23. package/sdk-core/core/src/core_tests/activity_tasks.rs +258 -63
  24. package/sdk-core/core/src/core_tests/child_workflows.rs +1 -2
  25. package/sdk-core/core/src/core_tests/determinism.rs +2 -2
  26. package/sdk-core/core/src/core_tests/local_activities.rs +8 -7
  27. package/sdk-core/core/src/core_tests/queries.rs +146 -60
  28. package/sdk-core/core/src/core_tests/replay_flag.rs +1 -1
  29. package/sdk-core/core/src/core_tests/workers.rs +39 -23
  30. package/sdk-core/core/src/core_tests/workflow_cancels.rs +1 -1
  31. package/sdk-core/core/src/core_tests/workflow_tasks.rs +387 -280
  32. package/sdk-core/core/src/lib.rs +6 -4
  33. package/sdk-core/core/src/pollers/poll_buffer.rs +16 -10
  34. package/sdk-core/core/src/protosext/mod.rs +6 -6
  35. package/sdk-core/core/src/retry_logic.rs +1 -1
  36. package/sdk-core/core/src/telemetry/metrics.rs +21 -7
  37. package/sdk-core/core/src/telemetry/mod.rs +18 -4
  38. package/sdk-core/core/src/test_help/mod.rs +341 -109
  39. package/sdk-core/core/src/worker/activities/activity_heartbeat_manager.rs +18 -9
  40. package/sdk-core/core/src/worker/activities/local_activities.rs +19 -16
  41. package/sdk-core/core/src/worker/activities.rs +156 -29
  42. package/sdk-core/core/src/worker/client.rs +1 -0
  43. package/sdk-core/core/src/worker/mod.rs +132 -659
  44. package/sdk-core/core/src/{workflow → worker/workflow}/bridge.rs +1 -1
  45. package/sdk-core/core/src/{workflow → worker/workflow}/driven_workflow.rs +1 -1
  46. package/sdk-core/core/src/{workflow → worker/workflow}/history_update.rs +16 -2
  47. package/sdk-core/core/src/{workflow → worker/workflow}/machines/activity_state_machine.rs +39 -4
  48. package/sdk-core/core/src/{workflow → worker/workflow}/machines/cancel_external_state_machine.rs +5 -2
  49. package/sdk-core/core/src/{workflow → worker/workflow}/machines/cancel_workflow_state_machine.rs +1 -1
  50. package/sdk-core/core/src/{workflow → worker/workflow}/machines/child_workflow_state_machine.rs +2 -4
  51. package/sdk-core/core/src/{workflow → worker/workflow}/machines/complete_workflow_state_machine.rs +0 -0
  52. package/sdk-core/core/src/{workflow → worker/workflow}/machines/continue_as_new_workflow_state_machine.rs +1 -1
  53. package/sdk-core/core/src/{workflow → worker/workflow}/machines/fail_workflow_state_machine.rs +0 -0
  54. package/sdk-core/core/src/{workflow → worker/workflow}/machines/local_activity_state_machine.rs +2 -5
  55. package/sdk-core/core/src/{workflow → worker/workflow}/machines/mod.rs +1 -1
  56. package/sdk-core/core/src/{workflow → worker/workflow}/machines/mutable_side_effect_state_machine.rs +0 -0
  57. package/sdk-core/core/src/{workflow → worker/workflow}/machines/patch_state_machine.rs +1 -1
  58. package/sdk-core/core/src/{workflow → worker/workflow}/machines/side_effect_state_machine.rs +0 -0
  59. package/sdk-core/core/src/{workflow → worker/workflow}/machines/signal_external_state_machine.rs +4 -2
  60. package/sdk-core/core/src/{workflow → worker/workflow}/machines/timer_state_machine.rs +1 -2
  61. package/sdk-core/core/src/{workflow → worker/workflow}/machines/transition_coverage.rs +1 -1
  62. package/sdk-core/core/src/{workflow → worker/workflow}/machines/upsert_search_attributes_state_machine.rs +5 -7
  63. package/sdk-core/core/src/{workflow → worker/workflow}/machines/workflow_machines/local_acts.rs +2 -2
  64. package/sdk-core/core/src/{workflow → worker/workflow}/machines/workflow_machines.rs +40 -16
  65. package/sdk-core/core/src/{workflow → worker/workflow}/machines/workflow_task_state_machine.rs +0 -0
  66. package/sdk-core/core/src/worker/workflow/managed_run/managed_wf_test.rs +198 -0
  67. package/sdk-core/core/src/worker/workflow/managed_run.rs +627 -0
  68. package/sdk-core/core/src/worker/workflow/mod.rs +1115 -0
  69. package/sdk-core/core/src/worker/workflow/run_cache.rs +143 -0
  70. package/sdk-core/core/src/worker/workflow/wft_poller.rs +88 -0
  71. package/sdk-core/core/src/worker/workflow/workflow_stream.rs +936 -0
  72. package/sdk-core/core-api/src/errors.rs +3 -10
  73. package/sdk-core/core-api/src/lib.rs +2 -1
  74. package/sdk-core/core-api/src/worker.rs +26 -2
  75. package/sdk-core/etc/dynamic-config.yaml +2 -0
  76. package/sdk-core/integ-with-otel.sh +1 -1
  77. package/sdk-core/protos/api_upstream/Makefile +4 -4
  78. package/sdk-core/protos/api_upstream/api-linter.yaml +2 -0
  79. package/sdk-core/protos/api_upstream/buf.yaml +8 -9
  80. package/sdk-core/protos/api_upstream/temporal/api/cluster/v1/message.proto +83 -0
  81. package/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +7 -1
  82. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/cluster.proto +40 -0
  83. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +3 -0
  84. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/reset.proto +3 -1
  85. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/schedule.proto +60 -0
  86. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/workflow.proto +3 -0
  87. package/sdk-core/protos/api_upstream/temporal/api/errordetails/v1/message.proto +32 -4
  88. package/sdk-core/protos/api_upstream/temporal/api/history/v1/message.proto +69 -19
  89. package/sdk-core/protos/api_upstream/temporal/api/namespace/v1/message.proto +13 -0
  90. package/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +163 -0
  91. package/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/service.proto +97 -0
  92. package/sdk-core/protos/api_upstream/temporal/api/schedule/v1/message.proto +300 -0
  93. package/sdk-core/protos/api_upstream/temporal/api/workflow/v1/message.proto +25 -0
  94. package/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +180 -3
  95. package/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +53 -3
  96. package/sdk-core/protos/local/temporal/sdk/core/activity_result/activity_result.proto +2 -2
  97. package/sdk-core/protos/local/temporal/sdk/core/activity_task/activity_task.proto +6 -5
  98. package/sdk-core/protos/local/temporal/sdk/core/bridge/bridge.proto +0 -1
  99. package/sdk-core/protos/local/temporal/sdk/core/child_workflow/child_workflow.proto +2 -1
  100. package/sdk-core/protos/local/temporal/sdk/core/common/common.proto +0 -64
  101. package/sdk-core/protos/local/temporal/sdk/core/core_interface.proto +2 -1
  102. package/sdk-core/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +11 -8
  103. package/sdk-core/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +30 -25
  104. package/sdk-core/sdk/src/activity_context.rs +12 -5
  105. package/sdk-core/sdk/src/app_data.rs +37 -0
  106. package/sdk-core/sdk/src/lib.rs +76 -43
  107. package/sdk-core/sdk/src/workflow_context/options.rs +8 -6
  108. package/sdk-core/sdk/src/workflow_context.rs +14 -19
  109. package/sdk-core/sdk/src/workflow_future.rs +11 -6
  110. package/sdk-core/sdk-core-protos/src/history_builder.rs +19 -5
  111. package/sdk-core/sdk-core-protos/src/history_info.rs +11 -6
  112. package/sdk-core/sdk-core-protos/src/lib.rs +74 -176
  113. package/sdk-core/test-utils/src/lib.rs +85 -72
  114. package/sdk-core/tests/integ_tests/heartbeat_tests.rs +11 -9
  115. package/sdk-core/tests/integ_tests/polling_tests.rs +12 -0
  116. package/sdk-core/tests/integ_tests/queries_tests.rs +39 -22
  117. package/sdk-core/tests/integ_tests/workflow_tests/activities.rs +49 -4
  118. package/sdk-core/tests/integ_tests/workflow_tests/appdata_propagation.rs +61 -0
  119. package/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +1 -1
  120. package/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +74 -13
  121. package/sdk-core/tests/integ_tests/workflow_tests/replay.rs +19 -0
  122. package/sdk-core/tests/integ_tests/workflow_tests/resets.rs +1 -1
  123. package/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +6 -3
  124. package/sdk-core/tests/integ_tests/workflow_tests.rs +10 -23
  125. package/sdk-core/tests/load_tests.rs +8 -3
  126. package/sdk-core/tests/main.rs +2 -1
  127. package/src/conversions.rs +47 -39
  128. package/src/errors.rs +10 -21
  129. package/src/lib.rs +342 -325
  130. package/sdk-core/core/src/pending_activations.rs +0 -173
  131. package/sdk-core/core/src/worker/wft_delivery.rs +0 -81
  132. package/sdk-core/core/src/workflow/mod.rs +0 -478
  133. package/sdk-core/core/src/workflow/workflow_tasks/cache_manager.rs +0 -194
  134. package/sdk-core/core/src/workflow/workflow_tasks/concurrency_manager.rs +0 -418
  135. package/sdk-core/core/src/workflow/workflow_tasks/mod.rs +0 -989
@@ -9,17 +9,16 @@
9
9
  pub extern crate assert_matches;
10
10
  #[macro_use]
11
11
  extern crate tracing;
12
+ extern crate core;
12
13
 
13
14
  mod abstractions;
14
15
  mod log_export;
15
- mod pending_activations;
16
16
  mod pollers;
17
17
  mod protosext;
18
18
  pub mod replay;
19
19
  pub(crate) mod retry_logic;
20
20
  pub(crate) mod telemetry;
21
21
  mod worker;
22
- mod workflow;
23
22
 
24
23
  #[cfg(test)]
25
24
  mod core_tests;
@@ -69,11 +68,14 @@ where
69
68
  CT: Into<AnyClient>,
70
69
  {
71
70
  let as_enum = client.into();
72
- // TODO: Assert namespaces match
73
71
  let client = match as_enum {
74
72
  AnyClient::HighLevel(ac) => ac,
75
73
  AnyClient::LowLevel(ll) => {
76
- let client = Client::new(*ll, worker_config.namespace.clone());
74
+ let mut client = Client::new(*ll, worker_config.namespace.clone());
75
+ client.set_worker_build_id(worker_config.worker_build_id.clone());
76
+ if let Some(ref id_override) = worker_config.client_identity_override {
77
+ client.options_mut().identity = id_override.clone();
78
+ }
77
79
  let retry_client = RetryClient::new(client, RetryConfig::default());
78
80
  Arc::new(retry_client)
79
81
  }
@@ -17,14 +17,15 @@ use temporal_sdk_core_protos::temporal::api::workflowservice::v1::{
17
17
  use tokio::{
18
18
  sync::{
19
19
  mpsc::{channel, Receiver},
20
- watch, Mutex, Semaphore,
20
+ Mutex, Semaphore,
21
21
  },
22
22
  task::JoinHandle,
23
23
  };
24
+ use tokio_util::sync::CancellationToken;
24
25
 
25
26
  pub struct LongPollBuffer<T> {
26
27
  buffered_polls: Mutex<Receiver<pollers::Result<T>>>,
27
- shutdown: watch::Sender<bool>,
28
+ shutdown: CancellationToken,
28
29
  /// This semaphore exists to ensure that we only poll server as many times as core actually
29
30
  /// *asked* it to be polled - otherwise we might spin and buffer polls constantly. This also
30
31
  /// means unit tests can continue to function in a predictable manner when calling mocks.
@@ -56,6 +57,7 @@ where
56
57
  poll_fn: impl Fn() -> FT + Send + Sync + 'static,
57
58
  max_pollers: usize,
58
59
  buffer_size: usize,
60
+ shutdown: CancellationToken,
59
61
  ) -> Self
60
62
  where
61
63
  FT: Future<Output = pollers::Result<T>> + Send,
@@ -63,28 +65,27 @@ where
63
65
  let (tx, rx) = channel(buffer_size);
64
66
  let polls_requested = Arc::new(Semaphore::new(0));
65
67
  let active_pollers = Arc::new(AtomicUsize::new(0));
66
- let (shutdown_tx, shutdown_rx) = watch::channel(false);
67
68
  let join_handles = FuturesUnordered::new();
68
69
  let pf = Arc::new(poll_fn);
69
70
  for _ in 0..max_pollers {
70
71
  let tx = tx.clone();
71
72
  let pf = pf.clone();
72
- let mut shutdown = shutdown_rx.clone();
73
+ let shutdown = shutdown.clone();
73
74
  let polls_requested = polls_requested.clone();
74
75
  let ap = active_pollers.clone();
75
76
  let jh = tokio::spawn(async move {
76
77
  loop {
77
- if *shutdown.borrow() {
78
+ if shutdown.is_cancelled() {
78
79
  break;
79
80
  }
80
81
  let sp = tokio::select! {
81
82
  sp = polls_requested.acquire() => sp.expect("Polls semaphore not dropped"),
82
- _ = shutdown.changed() => continue,
83
+ _ = shutdown.cancelled() => continue,
83
84
  };
84
85
  let _active_guard = ActiveCounter::new(ap.as_ref());
85
86
  let r = tokio::select! {
86
87
  r = pf() => r,
87
- _ = shutdown.changed() => continue,
88
+ _ = shutdown.cancelled() => continue,
88
89
  };
89
90
  sp.forget();
90
91
  let _ = tx.send(r).await;
@@ -94,7 +95,7 @@ where
94
95
  }
95
96
  Self {
96
97
  buffered_polls: Mutex::new(rx),
97
- shutdown: shutdown_tx,
98
+ shutdown,
98
99
  polls_requested,
99
100
  join_handles,
100
101
  num_pollers_changed: None,
@@ -142,11 +143,11 @@ where
142
143
  }
143
144
 
144
145
  fn notify_shutdown(&self) {
145
- let _ = self.shutdown.send(true);
146
+ self.shutdown.cancel();
146
147
  }
147
148
 
148
149
  async fn shutdown(mut self) {
149
- let _ = self.shutdown.send(true);
150
+ self.notify_shutdown();
150
151
  while self.join_handles.next().await.is_some() {}
151
152
  }
152
153
 
@@ -203,6 +204,7 @@ pub(crate) fn new_workflow_task_buffer(
203
204
  is_sticky: bool,
204
205
  concurrent_pollers: usize,
205
206
  buffer_size: usize,
207
+ shutdown: CancellationToken,
206
208
  ) -> PollWorkflowTaskBuffer {
207
209
  LongPollBuffer::new(
208
210
  move || {
@@ -212,6 +214,7 @@ pub(crate) fn new_workflow_task_buffer(
212
214
  },
213
215
  concurrent_pollers,
214
216
  buffer_size,
217
+ shutdown,
215
218
  )
216
219
  }
217
220
 
@@ -222,6 +225,7 @@ pub(crate) fn new_activity_task_buffer(
222
225
  concurrent_pollers: usize,
223
226
  buffer_size: usize,
224
227
  max_tps: Option<f64>,
228
+ shutdown: CancellationToken,
225
229
  ) -> PollActivityTaskBuffer {
226
230
  LongPollBuffer::new(
227
231
  move || {
@@ -231,6 +235,7 @@ pub(crate) fn new_activity_task_buffer(
231
235
  },
232
236
  concurrent_pollers,
233
237
  buffer_size,
238
+ shutdown,
234
239
  )
235
240
  }
236
241
 
@@ -262,6 +267,7 @@ mod tests {
262
267
  false,
263
268
  1,
264
269
  1,
270
+ CancellationToken::new(),
265
271
  );
266
272
 
267
273
  // Poll a bunch of times, "interrupting" it each time, we should only actually have polled
@@ -1,6 +1,6 @@
1
1
  use crate::{
2
- worker::LocalActivityExecutionResult, workflow::LEGACY_QUERY_ID, CompleteActivityError,
3
- TaskToken,
2
+ worker::{LocalActivityExecutionResult, LEGACY_QUERY_ID},
3
+ CompleteActivityError, TaskToken,
4
4
  };
5
5
  use anyhow::anyhow;
6
6
  use std::{
@@ -15,7 +15,7 @@ use temporal_sdk_core_protos::{
15
15
  activity_result::{activity_execution_result, activity_execution_result::Status},
16
16
  common::{
17
17
  decode_change_marker_details, extract_local_activity_marker_data,
18
- extract_local_activity_marker_details, Payload as SDKPayload, RetryPolicy,
18
+ extract_local_activity_marker_details,
19
19
  },
20
20
  external_data::LocalActivityMarkerData,
21
21
  workflow_activation::{
@@ -28,7 +28,7 @@ use temporal_sdk_core_protos::{
28
28
  workflow_completion,
29
29
  },
30
30
  temporal::api::{
31
- common::v1::{Payload, WorkflowExecution},
31
+ common::v1::{Payload, RetryPolicy, WorkflowExecution},
32
32
  enums::v1::EventType,
33
33
  failure::v1::Failure,
34
34
  history::v1::{history_event, History, HistoryEvent, MarkerRecordedEventAttributes},
@@ -264,8 +264,8 @@ pub struct ValidScheduleLA {
264
264
  pub activity_type: String,
265
265
  pub attempt: u32,
266
266
  pub original_schedule_time: Option<SystemTime>,
267
- pub headers: HashMap<String, SDKPayload>,
268
- pub arguments: Vec<SDKPayload>,
267
+ pub headers: HashMap<String, Payload>,
268
+ pub arguments: Vec<Payload>,
269
269
  pub schedule_to_start_timeout: Option<Duration>,
270
270
  pub close_timeouts: LACloseTimeouts,
271
271
  pub retry_policy: RetryPolicy,
@@ -1,6 +1,6 @@
1
1
  use std::time::Duration;
2
2
  use temporal_sdk_core_protos::{
3
- coresdk::common::RetryPolicy, temporal::api::failure::v1::ApplicationFailureInfo,
3
+ temporal::api::{common::v1::RetryPolicy, failure::v1::ApplicationFailureInfo},
4
4
  utilities::TryIntoOrNone,
5
5
  };
6
6
 
@@ -1,4 +1,5 @@
1
1
  use super::TELEM_SERVICE_NAME;
2
+ use crate::telemetry::GLOBAL_TELEM_DAT;
2
3
  use opentelemetry::{
3
4
  global,
4
5
  metrics::{Counter, Descriptor, InstrumentKind, Meter, ValueRecorder},
@@ -16,9 +17,6 @@ use std::{borrow::Cow, sync::Arc, time::Duration};
16
17
  /// appropriate k/vs have already been set.
17
18
  #[derive(Default, Clone, Debug)]
18
19
  pub(crate) struct MetricsContext {
19
- // TODO: Ideally this would hold bound metrics, but using them is basically impossible because
20
- // of lifetime issues: https://github.com/open-telemetry/opentelemetry-rust/issues/629
21
- // Use once fixed.
22
20
  kvs: Arc<Vec<KeyValue>>,
23
21
  }
24
22
 
@@ -159,6 +157,18 @@ lazy_static::lazy_static! {
159
157
  global::meter(TELEM_SERVICE_NAME)
160
158
  };
161
159
  }
160
+ fn metric_prefix() -> &'static str {
161
+ GLOBAL_TELEM_DAT
162
+ .get()
163
+ .map(|gtd| {
164
+ if gtd.no_temporal_prefix_for_metrics {
165
+ ""
166
+ } else {
167
+ "temporal_"
168
+ }
169
+ })
170
+ .unwrap_or("")
171
+ }
162
172
 
163
173
  /// Define a temporal metric. All metrics are kept private to this file, and should be accessed
164
174
  /// through functions on the [MetricsContext]
@@ -166,14 +176,14 @@ macro_rules! tm {
166
176
  (ctr, $ident:ident, $name:expr) => {
167
177
  lazy_static::lazy_static! {
168
178
  static ref $ident: Counter<u64> = {
169
- METRIC_METER.u64_counter($name).init()
179
+ METRIC_METER.u64_counter(metric_prefix().to_string() + $name).init()
170
180
  };
171
181
  }
172
182
  };
173
183
  (vr_u64, $ident:ident, $name:expr) => {
174
184
  lazy_static::lazy_static! {
175
185
  static ref $ident: ValueRecorder<u64> = {
176
- METRIC_METER.u64_value_recorder($name).init()
186
+ METRIC_METER.u64_value_recorder(metric_prefix().to_string() + $name).init()
177
187
  };
178
188
  }
179
189
  };
@@ -334,8 +344,12 @@ impl AggregatorSelector for SDKAggSelector {
334
344
  }
335
345
 
336
346
  if *descriptor.instrument_kind() == InstrumentKind::ValueRecorder {
347
+ let dname = descriptor
348
+ .name()
349
+ .strip_prefix(metric_prefix())
350
+ .unwrap_or_else(|| descriptor.name());
337
351
  // Some recorders are just gauges
338
- match descriptor.name() {
352
+ match dname {
339
353
  STICKY_CACHE_SIZE_NAME | NUM_POLLERS_NAME | TASK_SLOTS_AVAILABLE_NAME => {
340
354
  return Some(Arc::new(last_value()))
341
355
  }
@@ -343,7 +357,7 @@ impl AggregatorSelector for SDKAggSelector {
343
357
  }
344
358
 
345
359
  // Other recorders will select their appropriate buckets
346
- let buckets = match descriptor.name() {
360
+ let buckets = match dname {
347
361
  WF_E2E_LATENCY_NAME => WF_LATENCY_MS_BUCKETS,
348
362
  WF_TASK_EXECUTION_LATENCY_NAME | WF_TASK_REPLAY_LATENCY_NAME => WF_TASK_MS_BUCKETS,
349
363
  WF_TASK_SCHED_TO_START_LATENCY_NAME | ACT_SCHED_TO_START_LATENCY_NAME => {
@@ -18,9 +18,12 @@ use opentelemetry::{
18
18
  };
19
19
  use opentelemetry_otlp::WithExportConfig;
20
20
  use parking_lot::{const_mutex, Mutex};
21
- use std::collections::HashMap;
22
- use std::convert::TryInto;
23
- use std::{collections::VecDeque, net::SocketAddr, time::Duration};
21
+ use std::{
22
+ collections::{HashMap, VecDeque},
23
+ convert::TryInto,
24
+ net::SocketAddr,
25
+ time::Duration,
26
+ };
24
27
  use temporal_sdk_core_api::CoreTelemetry;
25
28
  use tonic::metadata::MetadataMap;
26
29
  use tracing_subscriber::{filter::ParseError, layer::SubscriberExt, EnvFilter};
@@ -93,6 +96,11 @@ pub struct TelemetryOptions {
93
96
  /// Optional metrics exporter - set as None to disable.
94
97
  #[builder(setter(into, strip_option), default)]
95
98
  pub metrics: Option<MetricsExporter>,
99
+
100
+ /// If set true, do not prefix metrics with `temporal_`. Will be removed eventually as
101
+ /// the prefix is consistent with other SDKs.
102
+ #[builder(default)]
103
+ pub no_temporal_prefix_for_metrics: bool,
96
104
  }
97
105
 
98
106
  impl TelemetryOptions {
@@ -119,6 +127,7 @@ pub struct GlobalTelemDat {
119
127
  core_export_logger: Option<CoreExportLogger>,
120
128
  runtime: Option<tokio::runtime::Runtime>,
121
129
  prom_srv: Option<PromServer>,
130
+ no_temporal_prefix_for_metrics: bool,
122
131
  }
123
132
 
124
133
  impl GlobalTelemDat {
@@ -179,7 +188,10 @@ pub fn telemetry_init(opts: &TelemetryOptions) -> Result<&'static GlobalTelemDat
179
188
  .worker_threads(2)
180
189
  .enable_all()
181
190
  .build()?;
182
- let mut globaldat = GlobalTelemDat::default();
191
+ let mut globaldat = GlobalTelemDat {
192
+ no_temporal_prefix_for_metrics: opts.no_temporal_prefix_for_metrics,
193
+ ..Default::default()
194
+ };
183
195
 
184
196
  if let Some(ref logger) = opts.logging {
185
197
  match logger {
@@ -318,6 +330,7 @@ pub(crate) fn test_telem_console() {
318
330
  logging: Some(Logger::Console),
319
331
  tracing: None,
320
332
  metrics: None,
333
+ no_temporal_prefix_for_metrics: false,
321
334
  })
322
335
  .unwrap();
323
336
  }
@@ -333,6 +346,7 @@ pub(crate) fn test_telem_collector() {
333
346
  headers: Default::default(),
334
347
  })),
335
348
  metrics: None,
349
+ no_temporal_prefix_for_metrics: false,
336
350
  })
337
351
  .unwrap();
338
352
  }