Skip to content

Commit 6df79c0

Browse files
authored
Merge branch 'main' into fix-optional-obsts
2 parents 6879f42 + feb8d48 commit 6df79c0

File tree

8 files changed

+47
-31
lines changed

8 files changed

+47
-31
lines changed

opentelemetry-sdk/benches/metric_counter.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ fn create_counter() -> Counter<u64> {
1313
.with_reader(ManualReader::builder().build())
1414
.build();
1515
let meter = meter_provider.meter("benchmarks");
16-
let counter = meter.u64_counter("counter_bench").init();
17-
counter
16+
17+
meter.u64_counter("counter_bench").init()
1818
}
1919

2020
fn criterion_benchmark(c: &mut Criterion) {

opentelemetry-sdk/src/metrics/meter_provider.rs

+25
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,7 @@ mod tests {
253253
use crate::testing::metrics::metric_reader::TestMetricReader;
254254
use crate::Resource;
255255
use opentelemetry::global;
256+
use opentelemetry::metrics::MeterProvider;
256257
use opentelemetry::{Key, KeyValue, Value};
257258
use std::env;
258259

@@ -433,4 +434,28 @@ mod tests {
433434
// Now the shutdown should be invoked
434435
assert!(reader.is_shutdown());
435436
}
437+
438+
#[test]
439+
fn same_meter_reused_same_scope() {
440+
let provider = super::SdkMeterProvider::builder().build();
441+
let _meter1 = provider.meter("test");
442+
let _meter2 = provider.meter("test");
443+
assert_eq!(provider.inner.meters.lock().unwrap().len(), 1);
444+
let _meter3 =
445+
provider.versioned_meter("test", Some("1.0.0"), Some("http://example.com"), None);
446+
let _meter4 =
447+
provider.versioned_meter("test", Some("1.0.0"), Some("http://example.com"), None);
448+
let _meter5 =
449+
provider.versioned_meter("test", Some("1.0.0"), Some("http://example.com"), None);
450+
assert_eq!(provider.inner.meters.lock().unwrap().len(), 2);
451+
452+
// the below are different meters, as meter names are case sensitive
453+
let _meter6 =
454+
provider.versioned_meter("ABC", Some("1.0.0"), Some("http://example.com"), None);
455+
let _meter7 =
456+
provider.versioned_meter("Abc", Some("1.0.0"), Some("http://example.com"), None);
457+
let _meter8 =
458+
provider.versioned_meter("abc", Some("1.0.0"), Some("http://example.com"), None);
459+
assert_eq!(provider.inner.meters.lock().unwrap().len(), 5);
460+
}
436461
}

opentelemetry/benches/metrics.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ use opentelemetry::{global, metrics::Counter, KeyValue};
66

77
fn create_counter() -> Counter<u64> {
88
let meter = global::meter("benchmarks");
9-
let counter = meter.u64_counter("counter_bench").init();
10-
counter
9+
10+
meter.u64_counter("counter_bench").init()
1111
}
1212

1313
fn criterion_benchmark(c: &mut Criterion) {

opentelemetry/src/metrics/instruments/counter.rs

+6-10
Original file line numberDiff line numberDiff line change
@@ -41,23 +41,19 @@ impl TryFrom<InstrumentBuilder<'_, Counter<u64>>> for Counter<u64> {
4141
type Error = MetricsError;
4242

4343
fn try_from(builder: InstrumentBuilder<'_, Counter<u64>>) -> Result<Self, Self::Error> {
44-
builder.meter.instrument_provider.u64_counter(
45-
builder.name,
46-
builder.description,
47-
builder.unit,
48-
)
44+
builder
45+
.instrument_provider
46+
.u64_counter(builder.name, builder.description, builder.unit)
4947
}
5048
}
5149

5250
impl TryFrom<InstrumentBuilder<'_, Counter<f64>>> for Counter<f64> {
5351
type Error = MetricsError;
5452

5553
fn try_from(builder: InstrumentBuilder<'_, Counter<f64>>) -> Result<Self, Self::Error> {
56-
builder.meter.instrument_provider.f64_counter(
57-
builder.name,
58-
builder.description,
59-
builder.unit,
60-
)
54+
builder
55+
.instrument_provider
56+
.f64_counter(builder.name, builder.description, builder.unit)
6157
}
6258
}
6359

opentelemetry/src/metrics/instruments/gauge.rs

-3
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ impl TryFrom<InstrumentBuilder<'_, Gauge<u64>>> for Gauge<u64> {
4242

4343
fn try_from(builder: InstrumentBuilder<'_, Gauge<u64>>) -> Result<Self, Self::Error> {
4444
builder
45-
.meter
4645
.instrument_provider
4746
.u64_gauge(builder.name, builder.description, builder.unit)
4847
}
@@ -53,7 +52,6 @@ impl TryFrom<InstrumentBuilder<'_, Gauge<f64>>> for Gauge<f64> {
5352

5453
fn try_from(builder: InstrumentBuilder<'_, Gauge<f64>>) -> Result<Self, Self::Error> {
5554
builder
56-
.meter
5755
.instrument_provider
5856
.f64_gauge(builder.name, builder.description, builder.unit)
5957
}
@@ -64,7 +62,6 @@ impl TryFrom<InstrumentBuilder<'_, Gauge<i64>>> for Gauge<i64> {
6462

6563
fn try_from(builder: InstrumentBuilder<'_, Gauge<i64>>) -> Result<Self, Self::Error> {
6664
builder
67-
.meter
6865
.instrument_provider
6966
.i64_gauge(builder.name, builder.description, builder.unit)
7067
}

opentelemetry/src/metrics/instruments/histogram.rs

+6-10
Original file line numberDiff line numberDiff line change
@@ -40,22 +40,18 @@ impl TryFrom<InstrumentBuilder<'_, Histogram<f64>>> for Histogram<f64> {
4040
type Error = MetricsError;
4141

4242
fn try_from(builder: InstrumentBuilder<'_, Histogram<f64>>) -> Result<Self, Self::Error> {
43-
builder.meter.instrument_provider.f64_histogram(
44-
builder.name,
45-
builder.description,
46-
builder.unit,
47-
)
43+
builder
44+
.instrument_provider
45+
.f64_histogram(builder.name, builder.description, builder.unit)
4846
}
4947
}
5048

5149
impl TryFrom<InstrumentBuilder<'_, Histogram<u64>>> for Histogram<u64> {
5250
type Error = MetricsError;
5351

5452
fn try_from(builder: InstrumentBuilder<'_, Histogram<u64>>) -> Result<Self, Self::Error> {
55-
builder.meter.instrument_provider.u64_histogram(
56-
builder.name,
57-
builder.description,
58-
builder.unit,
59-
)
53+
builder
54+
.instrument_provider
55+
.u64_histogram(builder.name, builder.description, builder.unit)
6056
}
6157
}

opentelemetry/src/metrics/instruments/mod.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ use std::borrow::Cow;
66
use std::marker;
77
use std::sync::Arc;
88

9+
use super::InstrumentProvider;
10+
911
pub(super) mod counter;
1012
pub(super) mod gauge;
1113
pub(super) mod histogram;
@@ -24,7 +26,7 @@ pub trait AsyncInstrument<T>: Send + Sync {
2426

2527
/// Configuration for building a sync instrument.
2628
pub struct InstrumentBuilder<'a, T> {
27-
meter: &'a Meter,
29+
instrument_provider: &'a dyn InstrumentProvider,
2830
name: Cow<'static, str>,
2931
description: Option<Cow<'static, str>>,
3032
unit: Option<Unit>,
@@ -38,7 +40,7 @@ where
3840
/// Create a new instrument builder
3941
pub(crate) fn new(meter: &'a Meter, name: Cow<'static, str>) -> Self {
4042
InstrumentBuilder {
41-
meter,
43+
instrument_provider: meter.instrument_provider.as_ref(),
4244
name,
4345
description: None,
4446
unit: None,

opentelemetry/src/metrics/instruments/up_down_counter.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ impl TryFrom<InstrumentBuilder<'_, UpDownCounter<i64>>> for UpDownCounter<i64> {
4646
type Error = MetricsError;
4747

4848
fn try_from(builder: InstrumentBuilder<'_, UpDownCounter<i64>>) -> Result<Self, Self::Error> {
49-
builder.meter.instrument_provider.i64_up_down_counter(
49+
builder.instrument_provider.i64_up_down_counter(
5050
builder.name,
5151
builder.description,
5252
builder.unit,
@@ -58,7 +58,7 @@ impl TryFrom<InstrumentBuilder<'_, UpDownCounter<f64>>> for UpDownCounter<f64> {
5858
type Error = MetricsError;
5959

6060
fn try_from(builder: InstrumentBuilder<'_, UpDownCounter<f64>>) -> Result<Self, Self::Error> {
61-
builder.meter.instrument_provider.f64_up_down_counter(
61+
builder.instrument_provider.f64_up_down_counter(
6262
builder.name,
6363
builder.description,
6464
builder.unit,

0 commit comments

Comments
 (0)