Skip to content

Commit 72a6d4b

Browse files
gruebelcijothomas
andauthored
Replace once_cell with OnceLock (#152)
Co-authored-by: Cijo Thomas <[email protected]>
1 parent f253035 commit 72a6d4b

File tree

9 files changed

+45
-31
lines changed

9 files changed

+45
-31
lines changed

opentelemetry-aws/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ detector-aws-lambda = ["dep:opentelemetry-semantic-conventions"]
2525
internal-logs = ["tracing"]
2626

2727
[dependencies]
28-
once_cell = "1.12"
2928
opentelemetry = { workspace = true }
3029
opentelemetry_sdk = { workspace = true, optional = true }
3130
opentelemetry-semantic-conventions = { workspace = true, optional = true }

opentelemetry-aws/src/trace/xray_propagator.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
//! }
3939
//! ```
4040
41-
use once_cell::sync::Lazy;
4241
use opentelemetry::{
4342
otel_error,
4443
propagation::{text_map_propagator::FieldIter, Extractor, Injector, TextMapPropagator},
@@ -47,6 +46,7 @@ use opentelemetry::{
4746
};
4847
use std::borrow::Cow;
4948
use std::convert::TryFrom;
49+
use std::sync::OnceLock;
5050

5151
const AWS_XRAY_TRACE_HEADER: &str = "x-amzn-trace-id";
5252
const AWS_XRAY_VERSION_KEY: &str = "1";
@@ -60,7 +60,12 @@ const REQUESTED_SAMPLE_DECISION: &str = "?";
6060

6161
const TRACE_FLAG_DEFERRED: TraceFlags = TraceFlags::new(0x02);
6262

63-
static AWS_XRAY_HEADER_FIELD: Lazy<[String; 1]> = Lazy::new(|| [AWS_XRAY_TRACE_HEADER.to_owned()]);
63+
// TODO Replace this with LazyLock when MSRV is 1.80+
64+
static TRACE_CONTEXT_HEADER_FIELDS: OnceLock<[String; 1]> = OnceLock::new();
65+
66+
fn trace_context_header_fields() -> &'static [String; 1] {
67+
TRACE_CONTEXT_HEADER_FIELDS.get_or_init(|| [AWS_XRAY_TRACE_HEADER.to_owned()])
68+
}
6469

6570
/// Extracts and injects `SpanContext`s into `Extractor`s or `Injector`s using AWS X-Ray header format.
6671
///
@@ -220,7 +225,7 @@ impl TextMapPropagator for XrayPropagator {
220225
}
221226

222227
fn fields(&self) -> FieldIter<'_> {
223-
FieldIter::new(AWS_XRAY_HEADER_FIELD.as_ref())
228+
FieldIter::new(trace_context_header_fields())
224229
}
225230
}
226231

opentelemetry-contrib/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ async-trait = { version = "0.1", optional = true }
3434
base64 = { version = "0.13", optional = true }
3535
futures-core = { version = "0.3", optional = true }
3636
futures-util = { version = "0.3", optional = true, default-features = false }
37-
once_cell = "1.17.1"
3837
opentelemetry = { workspace = true }
3938
opentelemetry_sdk = { workspace = true, optional = true }
4039
opentelemetry-semantic-conventions = { workspace = true, optional = true }

opentelemetry-contrib/src/trace/propagator/trace_context_response.rs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,24 @@
1111
//! See the [w3c trace-context docs] for more details.
1212
//!
1313
//! [w3c trace-context docs]: https://w3c.github.io/trace-context/#traceresponse-header
14-
use once_cell::sync::Lazy;
14+
1515
use opentelemetry::{
1616
propagation::{text_map_propagator::FieldIter, Extractor, Injector, TextMapPropagator},
1717
trace::{SpanContext, SpanId, TraceContextExt, TraceFlags, TraceId, TraceState},
1818
Context,
1919
};
20+
use std::sync::OnceLock;
2021

2122
const SUPPORTED_VERSION: u8 = 0;
2223
const MAX_VERSION: u8 = 254;
2324
const TRACERESPONSE_HEADER: &str = "traceresponse";
2425

25-
static TRACE_CONTEXT_HEADER_FIELDS: Lazy<[String; 1]> =
26-
Lazy::new(|| [TRACERESPONSE_HEADER.to_owned()]);
26+
// TODO Replace this with LazyLock when MSRV is 1.80+
27+
static TRACE_CONTEXT_HEADER_FIELDS: OnceLock<[String; 1]> = OnceLock::new();
28+
29+
fn trace_context_header_fields() -> &'static [String; 1] {
30+
TRACE_CONTEXT_HEADER_FIELDS.get_or_init(|| [TRACERESPONSE_HEADER.to_owned()])
31+
}
2732

2833
/// Propagates trace response using the [W3C TraceContext] format
2934
///
@@ -124,7 +129,7 @@ impl TextMapPropagator for TraceContextResponsePropagator {
124129
}
125130

126131
fn fields(&self) -> FieldIter<'_> {
127-
FieldIter::new(TRACE_CONTEXT_HEADER_FIELDS.as_ref())
132+
FieldIter::new(trace_context_header_fields())
128133
}
129134
}
130135

opentelemetry-contrib/src/trace/tracer_source.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//! Abstracts away details for acquiring a `Tracer` by instrumented libraries.
2-
use once_cell::sync::OnceCell;
32
use opentelemetry::global::BoxedTracer;
43
use std::fmt::Debug;
4+
use std::sync::OnceLock;
55

66
/// Holds either a borrowed `BoxedTracer` or a factory that can produce one when
77
/// and if needed.
@@ -11,7 +11,7 @@ use std::fmt::Debug;
1111
#[derive(Debug)]
1212
pub struct TracerSource<'a> {
1313
variant: Variant<'a>,
14-
tracer: OnceCell<BoxedTracer>,
14+
tracer: OnceLock<BoxedTracer>,
1515
}
1616

1717
enum Variant<'a> {
@@ -24,7 +24,7 @@ impl<'a> TracerSource<'a> {
2424
pub fn borrowed(tracer: &'a BoxedTracer) -> Self {
2525
Self {
2626
variant: Variant::Borrowed(tracer),
27-
tracer: OnceCell::new(),
27+
tracer: OnceLock::new(),
2828
}
2929
}
3030

@@ -33,7 +33,7 @@ impl<'a> TracerSource<'a> {
3333
pub fn lazy(factory: &'a dyn Fn() -> BoxedTracer) -> Self {
3434
Self {
3535
variant: Variant::Lazy(factory),
36-
tracer: OnceCell::new(),
36+
tracer: OnceLock::new(),
3737
}
3838
}
3939

opentelemetry-datadog/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ intern-std = []
2626

2727
[dependencies]
2828
indexmap = "2.0"
29-
once_cell = "1.12"
3029
opentelemetry = { workspace = true }
3130
opentelemetry_sdk = { workspace = true, features = ["trace"] }
3231
opentelemetry-http = { workspace = true }

opentelemetry-datadog/src/lib.rs

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -145,12 +145,12 @@ pub use exporter::{
145145
pub use propagator::{DatadogPropagator, DatadogTraceState, DatadogTraceStateBuilder};
146146

147147
mod propagator {
148-
use once_cell::sync::Lazy;
149148
use opentelemetry::{
150149
propagation::{text_map_propagator::FieldIter, Extractor, Injector, TextMapPropagator},
151150
trace::{SpanContext, SpanId, TraceContextExt, TraceFlags, TraceId, TraceState},
152151
Context,
153152
};
153+
use std::sync::OnceLock;
154154

155155
const DATADOG_TRACE_ID_HEADER: &str = "x-datadog-trace-id";
156156
const DATADOG_PARENT_ID_HEADER: &str = "x-datadog-parent-id";
@@ -163,13 +163,18 @@ mod propagator {
163163
const TRACE_STATE_TRUE_VALUE: &str = "1";
164164
const TRACE_STATE_FALSE_VALUE: &str = "0";
165165

166-
static DATADOG_HEADER_FIELDS: Lazy<[String; 3]> = Lazy::new(|| {
167-
[
168-
DATADOG_TRACE_ID_HEADER.to_string(),
169-
DATADOG_PARENT_ID_HEADER.to_string(),
170-
DATADOG_SAMPLING_PRIORITY_HEADER.to_string(),
171-
]
172-
});
166+
// TODO Replace this with LazyLock when MSRV is 1.80+
167+
static TRACE_CONTEXT_HEADER_FIELDS: OnceLock<[String; 3]> = OnceLock::new();
168+
169+
fn trace_context_header_fields() -> &'static [String; 3] {
170+
TRACE_CONTEXT_HEADER_FIELDS.get_or_init(|| {
171+
[
172+
DATADOG_TRACE_ID_HEADER.to_owned(),
173+
DATADOG_PARENT_ID_HEADER.to_owned(),
174+
DATADOG_SAMPLING_PRIORITY_HEADER.to_owned(),
175+
]
176+
})
177+
}
173178

174179
#[derive(Default)]
175180
pub struct DatadogTraceStateBuilder {
@@ -449,7 +454,7 @@ mod propagator {
449454
}
450455

451456
fn fields(&self) -> FieldIter<'_> {
452-
FieldIter::new(DATADOG_HEADER_FIELDS.as_ref())
457+
FieldIter::new(trace_context_header_fields())
453458
}
454459
}
455460

opentelemetry-stackdriver/Cargo.toml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ prost = "0.13"
2121
prost-types = "0.13"
2222
thiserror = "2.0"
2323
tonic = { version = "0.12", default-features = false, features = ["channel", "codegen", "gzip", "prost", "tls"] }
24-
once_cell = { version = "1.19", optional = true }
2524
tracing = { version = "0.1", optional = true }
2625

2726
# Futures
@@ -34,7 +33,7 @@ default = ["gcp-authorizer", "tls-native-roots", "internal-logs"]
3433
gcp-authorizer = ["dep:gcp_auth"]
3534
tls-native-roots = ["tonic/tls-roots"]
3635
tls-webpki-roots = ["tonic/tls-webpki-roots"]
37-
propagator = ["once_cell"]
36+
propagator = []
3837
internal-logs = ["tracing"]
3938

4039
[dev-dependencies]

opentelemetry-stackdriver/src/google_trace_context_propagator.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
use std::str::FromStr;
2-
3-
use once_cell::sync::Lazy;
41
use opentelemetry::propagation::text_map_propagator::FieldIter;
52
use opentelemetry::propagation::{Extractor, Injector, TextMapPropagator};
63
use opentelemetry::trace::{SpanContext, SpanId, TraceContextExt, TraceFlags, TraceId, TraceState};
74
use opentelemetry::Context;
5+
use std::str::FromStr;
6+
use std::sync::OnceLock;
87

98
/// Propagates span context in the Google Cloud Trace format,
109
/// using the __X-Cloud-Trace-Context__ header.
@@ -27,8 +26,12 @@ pub struct GoogleTraceContextPropagator {
2726

2827
const CLOUD_TRACE_CONTEXT_HEADER: &str = "X-Cloud-Trace-Context";
2928

30-
static TRACE_CONTEXT_HEADER_FIELDS: Lazy<[String; 1]> =
31-
Lazy::new(|| [CLOUD_TRACE_CONTEXT_HEADER.to_owned()]);
29+
// TODO Replace this with LazyLock when MSRV is 1.80+
30+
static TRACE_CONTEXT_HEADER_FIELDS: OnceLock<[String; 1]> = OnceLock::new();
31+
32+
fn trace_context_header_fields() -> &'static [String; 1] {
33+
TRACE_CONTEXT_HEADER_FIELDS.get_or_init(|| [CLOUD_TRACE_CONTEXT_HEADER.to_owned()])
34+
}
3235

3336
impl GoogleTraceContextPropagator {
3437
fn extract_span_context(&self, extractor: &dyn Extractor) -> Result<SpanContext, ()> {
@@ -85,7 +88,7 @@ impl TextMapPropagator for GoogleTraceContextPropagator {
8588
}
8689

8790
fn fields(&self) -> FieldIter<'_> {
88-
FieldIter::new(TRACE_CONTEXT_HEADER_FIELDS.as_ref())
91+
FieldIter::new(trace_context_header_fields())
8992
}
9093
}
9194

0 commit comments

Comments
 (0)