Skip to content

Commit 9b3d790

Browse files
Remove Cow from InstrumentationScope
1 parent 91f44ff commit 9b3d790

File tree

11 files changed

+46
-58
lines changed

11 files changed

+46
-58
lines changed

opentelemetry-proto/src/transform/common.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ pub mod tonic {
6464
}
6565
} else {
6666
InstrumentationScope {
67-
name: library.name.into_owned(),
68-
version: library.version.map(Cow::into_owned).unwrap_or_default(),
67+
name: library.name,
68+
version: library.version.unwrap_or_default(),
6969
attributes: Attributes::from(library.attributes).0,
7070
..Default::default()
7171
}

opentelemetry-proto/src/transform/logs.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ pub mod tonic {
196196
let key = log_record
197197
.target
198198
.clone()
199-
.unwrap_or_else(|| Cow::Owned(instrumentation.name.clone().into_owned()));
199+
.unwrap_or_else(|| Cow::Owned(instrumentation.name.clone()));
200200
scope_map
201201
.entry(key)
202202
.or_default()

opentelemetry-sdk/src/logs/log_emitter.rs

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,11 @@ use opentelemetry::{
1010
#[cfg(feature = "logs_level_enabled")]
1111
use opentelemetry::logs::Severity;
1212

13-
use std::time::SystemTime;
14-
use std::{
15-
borrow::Cow,
16-
sync::{
17-
atomic::{AtomicBool, Ordering},
18-
Arc,
19-
},
13+
use std::sync::{
14+
atomic::{AtomicBool, Ordering},
15+
Arc,
2016
};
17+
use std::time::SystemTime;
2118

2219
use once_cell::sync::Lazy;
2320

@@ -54,11 +51,11 @@ const DEFAULT_COMPONENT_NAME: &str = "rust.opentelemetry.io/sdk/logger";
5451
impl opentelemetry::logs::LoggerProvider for LoggerProvider {
5552
type Logger = Logger;
5653

57-
fn logger(&self, name: impl Into<Cow<'static, str>>) -> Self::Logger {
54+
fn logger(&self, name: impl Into<String>) -> Self::Logger {
5855
let mut name = name.into();
5956

6057
if name.is_empty() {
61-
name = Cow::Borrowed(DEFAULT_COMPONENT_NAME)
58+
name = DEFAULT_COMPONENT_NAME.into();
6259
};
6360

6461
let scope = InstrumentationScope::builder(name).build();

opentelemetry-sdk/src/metrics/instrument.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -160,13 +160,11 @@ impl Instrument {
160160
}
161161

162162
pub(crate) fn matches_scope(&self, other: &Instrument) -> bool {
163-
(self.scope.name.is_empty() || self.scope.name.as_ref() == other.scope.name.as_ref())
163+
(self.scope.name.is_empty() || self.scope.name == other.scope.name)
164164
&& (self.scope.version.is_none()
165-
|| self.scope.version.as_ref().map(AsRef::as_ref)
166-
== other.scope.version.as_ref().map(AsRef::as_ref))
165+
|| self.scope.version.as_ref() == other.scope.version.as_ref())
167166
&& (self.scope.schema_url.is_none()
168-
|| self.scope.schema_url.as_ref().map(AsRef::as_ref)
169-
== other.scope.schema_url.as_ref().map(AsRef::as_ref))
167+
|| self.scope.schema_url.as_ref() == other.scope.schema_url.as_ref())
170168
}
171169
}
172170

opentelemetry-sdk/src/metrics/meter.rs

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ impl SdkMeter {
7676
if let Err(err) = validation_result {
7777
otel_error!(
7878
name: "InstrumentCreationFailed",
79-
meter_name = self.scope.name.as_ref(),
79+
meter_name = &self.scope.name,
8080
instrument_name = builder.name.as_ref(),
8181
message = "Measurements from this Counter will be ignored.",
8282
reason = format!("{}", err)
@@ -98,7 +98,7 @@ impl SdkMeter {
9898
Err(err) => {
9999
otel_error!(
100100
name: "InstrumentCreationFailed",
101-
meter_name = self.scope.name.as_ref(),
101+
meter_name = &self.scope.name,
102102
instrument_name = builder.name.as_ref(),
103103
message = "Measurements from this Counter will be ignored.",
104104
reason = format!("{}", err)
@@ -120,7 +120,7 @@ impl SdkMeter {
120120
if let Err(err) = validation_result {
121121
otel_error!(
122122
name: "InstrumentCreationFailed",
123-
meter_name = self.scope.name.as_ref(),
123+
meter_name = &self.scope.name,
124124
instrument_name = builder.name.as_ref(),
125125
message = "Callbacks for this ObservableCounter will not be invoked.",
126126
reason = format!("{}", err));
@@ -138,7 +138,7 @@ impl SdkMeter {
138138
if ms.is_empty() {
139139
otel_error!(
140140
name: "InstrumentCreationFailed",
141-
meter_name = self.scope.name.as_ref(),
141+
meter_name = &self.scope.name,
142142
instrument_name = builder.name.as_ref(),
143143
message = "Callbacks for this ObservableCounter will not be invoked. Check View Configuration."
144144
);
@@ -158,7 +158,7 @@ impl SdkMeter {
158158
Err(err) => {
159159
otel_error!(
160160
name: "InstrumentCreationFailed",
161-
meter_name = self.scope.name.as_ref(),
161+
meter_name = &self.scope.name,
162162
instrument_name = builder.name.as_ref(),
163163
message = "Callbacks for this ObservableCounter will not be invoked.",
164164
reason = format!("{}", err));
@@ -179,7 +179,7 @@ impl SdkMeter {
179179
if let Err(err) = validation_result {
180180
otel_error!(
181181
name: "InstrumentCreationFailed",
182-
meter_name = self.scope.name.as_ref(),
182+
meter_name = &self.scope.name,
183183
instrument_name = builder.name.as_ref(),
184184
message = "Callbacks for this ObservableUpDownCounter will not be invoked.",
185185
reason = format!("{}", err));
@@ -197,7 +197,7 @@ impl SdkMeter {
197197
if ms.is_empty() {
198198
otel_error!(
199199
name: "InstrumentCreationFailed",
200-
meter_name = self.scope.name.as_ref(),
200+
meter_name = &self.scope.name,
201201
instrument_name = builder.name.as_ref(),
202202
message = "Callbacks for this ObservableUpDownCounter will not be invoked. Check View Configuration."
203203
);
@@ -217,7 +217,7 @@ impl SdkMeter {
217217
Err(err) => {
218218
otel_error!(
219219
name: "InstrumentCreationFailed",
220-
meter_name = self.scope.name.as_ref(),
220+
meter_name = &self.scope.name,
221221
instrument_name = builder.name.as_ref(),
222222
message = "Callbacks for this ObservableUpDownCounter will not be invoked.",
223223
reason = format!("{}", err));
@@ -238,7 +238,7 @@ impl SdkMeter {
238238
if let Err(err) = validation_result {
239239
otel_error!(
240240
name: "InstrumentCreationFailed",
241-
meter_name = self.scope.name.as_ref(),
241+
meter_name = &self.scope.name,
242242
instrument_name = builder.name.as_ref(),
243243
message = "Callbacks for this ObservableGauge will not be invoked.",
244244
reason = format!("{}", err));
@@ -256,7 +256,7 @@ impl SdkMeter {
256256
if ms.is_empty() {
257257
otel_error!(
258258
name: "InstrumentCreationFailed",
259-
meter_name = self.scope.name.as_ref(),
259+
meter_name = &self.scope.name,
260260
instrument_name = builder.name.as_ref(),
261261
message = "Callbacks for this ObservableGauge will not be invoked. Check View Configuration."
262262
);
@@ -276,7 +276,7 @@ impl SdkMeter {
276276
Err(err) => {
277277
otel_error!(
278278
name: "InstrumentCreationFailed",
279-
meter_name = self.scope.name.as_ref(),
279+
meter_name = &self.scope.name,
280280
instrument_name = builder.name.as_ref(),
281281
message = "Callbacks for this ObservableGauge will not be invoked.",
282282
reason = format!("{}", err));
@@ -297,7 +297,7 @@ impl SdkMeter {
297297
if let Err(err) = validation_result {
298298
otel_error!(
299299
name: "InstrumentCreationFailed",
300-
meter_name = self.scope.name.as_ref(),
300+
meter_name = &self.scope.name,
301301
instrument_name = builder.name.as_ref(),
302302
message = "Measurements from this UpDownCounter will be ignored.",
303303
reason = format!("{}", err)
@@ -319,7 +319,7 @@ impl SdkMeter {
319319
Err(err) => {
320320
otel_error!(
321321
name: "InstrumentCreationFailed",
322-
meter_name = self.scope.name.as_ref(),
322+
meter_name = &self.scope.name,
323323
instrument_name = builder.name.as_ref(),
324324
message = "Measurements from this UpDownCounter will be ignored.",
325325
reason = format!("{}", err)
@@ -341,7 +341,7 @@ impl SdkMeter {
341341
if let Err(err) = validation_result {
342342
otel_error!(
343343
name: "InstrumentCreationFailed",
344-
meter_name = self.scope.name.as_ref(),
344+
meter_name = &self.scope.name,
345345
instrument_name = builder.name.as_ref(),
346346
message = "Measurements from this Gauge will be ignored.",
347347
reason = format!("{}", err)
@@ -363,7 +363,7 @@ impl SdkMeter {
363363
Err(err) => {
364364
otel_error!(
365365
name: "InstrumentCreationFailed",
366-
meter_name = self.scope.name.as_ref(),
366+
meter_name = &self.scope.name,
367367
instrument_name = builder.name.as_ref(),
368368
message = "Measurements from this Gauge will be ignored.",
369369
reason = format!("{}", err)
@@ -385,7 +385,7 @@ impl SdkMeter {
385385
if let Err(err) = validation_result {
386386
otel_error!(
387387
name: "InstrumentCreationFailed",
388-
meter_name = self.scope.name.as_ref(),
388+
meter_name = &self.scope.name,
389389
instrument_name = builder.name.as_ref(),
390390
message = "Measurements from this Histogram will be ignored.",
391391
reason = format!("{}", err)
@@ -407,7 +407,7 @@ impl SdkMeter {
407407
Err(err) => {
408408
otel_error!(
409409
name: "InstrumentCreationFailed",
410-
meter_name = self.scope.name.as_ref(),
410+
meter_name = &self.scope.name,
411411
instrument_name = builder.name.as_ref(),
412412
message = "Measurements from this Histogram will be ignored.",
413413
reason = format!("{}", err)

opentelemetry-sdk/src/metrics/mod.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,6 @@ mod tests {
137137
use opentelemetry::InstrumentationScope;
138138
use opentelemetry::{metrics::MeterProvider as _, KeyValue};
139139
use rand::{rngs, Rng, SeedableRng};
140-
use std::borrow::Cow;
141140
use std::cmp::{max, min};
142141
use std::sync::atomic::{AtomicBool, Ordering};
143142
use std::sync::{Arc, Mutex};
@@ -683,8 +682,8 @@ mod tests {
683682

684683
let scope = &resource_metrics[0].scope_metrics[0].scope;
685684
assert_eq!(scope.name, "test.meter");
686-
assert_eq!(scope.version, Some(Cow::Borrowed("v0.1.0")));
687-
assert_eq!(scope.schema_url, Some(Cow::Borrowed("http://example.com")));
685+
assert_eq!(scope.version, Some("v0.1.0".into()));
686+
assert_eq!(scope.schema_url, Some("http://example.com".into()));
688687

689688
// This is validating current behavior, but it is not guaranteed to be the case in the future,
690689
// as this is a user error and SDK reserves right to change this behavior.

opentelemetry-sdk/src/trace/provider.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -254,11 +254,11 @@ impl opentelemetry::trace::TracerProvider for TracerProvider {
254254
/// This implementation of `TracerProvider` produces `Tracer` instances.
255255
type Tracer = Tracer;
256256

257-
fn tracer(&self, name: impl Into<Cow<'static, str>>) -> Self::Tracer {
257+
fn tracer(&self, name: impl Into<String>) -> Self::Tracer {
258258
let mut name = name.into();
259259

260260
if name.is_empty() {
261-
name = Cow::Borrowed(DEFAULT_COMPONENT_NAME)
261+
name = DEFAULT_COMPONENT_NAME.into()
262262
};
263263

264264
let scope = InstrumentationScope::builder(name).build();

opentelemetry-stdout/src/common.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -236,8 +236,8 @@ pub(crate) struct Scope {
236236
impl From<opentelemetry::InstrumentationScope> for Scope {
237237
fn from(value: opentelemetry::InstrumentationScope) -> Self {
238238
Scope {
239-
name: value.name,
240-
version: value.version,
239+
name: Cow::Owned(value.name),
240+
version: value.version.map(Cow::Owned),
241241
attributes: value.attributes.into_iter().map(Into::into).collect(),
242242
dropped_attributes_count: 0,
243243
}

opentelemetry/src/common.rs

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -419,15 +419,15 @@ pub struct InstrumentationScope {
419419
/// The library name.
420420
///
421421
/// This should be the name of the crate providing the instrumentation.
422-
pub name: Cow<'static, str>,
422+
pub name: String,
423423

424424
/// The library version.
425-
pub version: Option<Cow<'static, str>>,
425+
pub version: Option<String>,
426426

427427
/// [Schema URL] used by this library.
428428
///
429429
/// [Schema URL]: https://github.com/open-telemetry/opentelemetry-specification/blob/v1.9.0/specification/schemas/overview.md#schema-url
430-
pub schema_url: Option<Cow<'static, str>>,
430+
pub schema_url: Option<String>,
431431

432432
/// Specifies the instrumentation scope attributes to associate with emitted telemetry.
433433
pub attributes: Vec<KeyValue>,
@@ -454,7 +454,7 @@ impl hash::Hash for InstrumentationScope {
454454

455455
impl InstrumentationScope {
456456
/// Create a new builder to create an [InstrumentationScope]
457-
pub fn builder<T: Into<Cow<'static, str>>>(name: T) -> InstrumentationScopeBuilder {
457+
pub fn builder<T: Into<String>>(name: T) -> InstrumentationScopeBuilder {
458458
InstrumentationScopeBuilder {
459459
name: name.into(),
460460
version: None,
@@ -477,12 +477,9 @@ impl InstrumentationScope {
477477
/// [instrumentation libraries]: https://github.com/open-telemetry/opentelemetry-specification/blob/v1.9.0/specification/overview.md#instrumentation-libraries
478478
#[derive(Debug)]
479479
pub struct InstrumentationScopeBuilder {
480-
name: Cow<'static, str>,
481-
482-
version: Option<Cow<'static, str>>,
483-
484-
schema_url: Option<Cow<'static, str>>,
485-
480+
name: String,
481+
version: Option<String>,
482+
schema_url: Option<String>,
486483
attributes: Option<Vec<KeyValue>>,
487484
}
488485

@@ -496,7 +493,7 @@ impl InstrumentationScopeBuilder {
496493
/// .with_version("v0.1.0")
497494
/// .build();
498495
/// ```
499-
pub fn with_version(mut self, version: impl Into<Cow<'static, str>>) -> Self {
496+
pub fn with_version(mut self, version: impl Into<String>) -> Self {
500497
self.version = Some(version.into());
501498
self
502499
}
@@ -510,7 +507,7 @@ impl InstrumentationScopeBuilder {
510507
/// .with_schema_url("https://opentelemetry.io/schemas/1.17.0")
511508
/// .build();
512509
/// ```
513-
pub fn with_schema_url(mut self, schema_url: impl Into<Cow<'static, str>>) -> Self {
510+
pub fn with_schema_url(mut self, schema_url: impl Into<String>) -> Self {
514511
self.schema_url = Some(schema_url.into());
515512
self
516513
}

opentelemetry/src/logs/logger.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
use std::borrow::Cow;
2-
31
use crate::{logs::LogRecord, InstrumentationScope};
42

53
#[cfg(feature = "logs_level_enabled")]
@@ -59,7 +57,7 @@ pub trait LoggerProvider {
5957
/// The `name` should be the application name or the name of the library
6058
/// providing instrumentation. If the name is empty, then an
6159
/// implementation-defined default name may be used instead.
62-
fn logger(&self, name: impl Into<Cow<'static, str>>) -> Self::Logger {
60+
fn logger(&self, name: impl Into<String>) -> Self::Logger {
6361
let scope = InstrumentationScope::builder(name).build();
6462
self.logger_with_scope(scope)
6563
}

0 commit comments

Comments
 (0)