Skip to content

Commit 882e1c2

Browse files
authored
Empty MeterName retained as is instead of using default name (#2334)
1 parent 5de2caf commit 882e1c2

File tree

5 files changed

+46
-12
lines changed

5 files changed

+46
-12
lines changed

opentelemetry-sdk/CHANGELOG.md

+3
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818
.build();
1919
```
2020
- `logs::LogData` struct is deprecated, and scheduled to be removed from public API in `v0.28.0`.
21+
- Bug fix: Empty Meter names are retained as-is instead of replacing with
22+
"rust.opentelemetry.io/sdk/meter"
23+
[#2334](https://github.com/open-telemetry/opentelemetry-rust/pull/2334)
2124

2225
## 0.27.0
2326

opentelemetry-sdk/src/metrics/meter_provider.rs

+5-8
Original file line numberDiff line numberDiff line change
@@ -166,15 +166,8 @@ impl Drop for SdkMeterProviderInner {
166166
}
167167
}
168168

169-
/// Default meter name if empty string is provided.
170-
const DEFAULT_COMPONENT_NAME: &str = "rust.opentelemetry.io/sdk/meter";
171-
172169
impl MeterProvider for SdkMeterProvider {
173-
fn meter(&self, mut name: &'static str) -> Meter {
174-
if name.is_empty() {
175-
name = DEFAULT_COMPONENT_NAME
176-
};
177-
170+
fn meter(&self, name: &'static str) -> Meter {
178171
let scope = InstrumentationScope::builder(name).build();
179172
self.meter_with_scope(scope)
180173
}
@@ -184,6 +177,10 @@ impl MeterProvider for SdkMeterProvider {
184177
return Meter::new(Arc::new(NoopMeter::new()));
185178
}
186179

180+
if scope.name().is_empty() {
181+
otel_info!(name: "MeterNameEmpty", message = "Meter name is empty; consider providing a meaningful name. Meter will function normally and the provided name will be used as-is.");
182+
};
183+
187184
if let Ok(mut meters) = self.inner.meters.lock() {
188185
let meter = meters
189186
.entry(scope)

opentelemetry-sdk/src/metrics/mod.rs

+38
Original file line numberDiff line numberDiff line change
@@ -463,6 +463,44 @@ mod tests {
463463
}
464464
}
465465

466+
#[tokio::test(flavor = "multi_thread", worker_threads = 1)]
467+
async fn empty_meter_name_retained() {
468+
async fn meter_name_retained_helper(
469+
meter: Meter,
470+
provider: SdkMeterProvider,
471+
exporter: InMemoryMetricExporter,
472+
) {
473+
// Act
474+
let counter = meter.u64_counter("my_counter").build();
475+
476+
counter.add(10, &[]);
477+
provider.force_flush().unwrap();
478+
479+
// Assert
480+
let resource_metrics = exporter
481+
.get_finished_metrics()
482+
.expect("metrics are expected to be exported.");
483+
assert!(
484+
resource_metrics[0].scope_metrics[0].metrics.len() == 1,
485+
"There should be a single metric"
486+
);
487+
let meter_name = resource_metrics[0].scope_metrics[0].scope.name();
488+
assert_eq!(meter_name, "");
489+
}
490+
491+
let exporter = InMemoryMetricExporter::default();
492+
let reader = PeriodicReader::builder(exporter.clone(), runtime::Tokio).build();
493+
let meter_provider = SdkMeterProvider::builder().with_reader(reader).build();
494+
495+
// Test Meter creation in 2 ways, both with empty string as meter name
496+
let meter1 = meter_provider.meter("");
497+
meter_name_retained_helper(meter1, meter_provider.clone(), exporter.clone()).await;
498+
499+
let meter_scope = InstrumentationScope::builder("").build();
500+
let meter2 = meter_provider.meter_with_scope(meter_scope);
501+
meter_name_retained_helper(meter2, meter_provider, exporter).await;
502+
}
503+
466504
#[tokio::test(flavor = "multi_thread", worker_threads = 1)]
467505
async fn counter_duplicate_instrument_merge() {
468506
// Arrange

opentelemetry/src/global/metrics.rs

-2
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,6 @@ pub fn meter_provider() -> GlobalMeterProvider {
4040

4141
/// Creates a named [`Meter`] via the currently configured global [`MeterProvider`].
4242
///
43-
/// If the name is an empty string, the provider will use a default name.
44-
///
4543
/// This is a more convenient way of expressing `global::meter_provider().meter(name)`.
4644
pub fn meter(name: &'static str) -> Meter {
4745
meter_provider().meter(name)

opentelemetry/src/metrics/meter.rs

-2
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@ pub trait MeterProvider {
1919
/// name needs to be unique so it does not collide with other names used by
2020
/// an application, nor other applications.
2121
///
22-
/// If the name is empty, then an implementation defined default name will
23-
/// be used instead.
2422
///
2523
/// # Examples
2624
///

0 commit comments

Comments
 (0)