Skip to content

Commit 63f272a

Browse files
authored
Merge branch 'main' into provider-builder-pattern
2 parents bd34c52 + a18853e commit 63f272a

File tree

5 files changed

+66
-22
lines changed

5 files changed

+66
-22
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ hyper-util = "0.1"
3030
log = "0.4.21"
3131
once_cell = "1.13"
3232
ordered-float = "4.0"
33-
pin-project-lite = "0.2"
33+
pin-project-lite = "=0.2.14" # 0.2.15 is failing for cargo-check-external-types
3434
prost = "0.13"
3535
prost-build = "0.13"
3636
prost-types = "0.13"

opentelemetry-sdk/src/metrics/internal/exponential_histogram.rs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use std::{collections::HashMap, f64::consts::LOG2_E, sync::Mutex, time::SystemTime};
22

33
use once_cell::sync::Lazy;
4-
use opentelemetry::{metrics::MetricsError, KeyValue};
4+
use opentelemetry::{otel_debug, KeyValue};
55

66
use crate::{
77
metrics::data::{self, Aggregation, Temporality},
@@ -100,9 +100,18 @@ impl<T: Number> ExpoHistogramDataPoint<T> {
100100
if (self.scale - scale_delta as i8) < EXPO_MIN_SCALE {
101101
// With a scale of -10 there is only two buckets for the whole range of f64 values.
102102
// This can only happen if there is a max size of 1.
103-
opentelemetry::global::handle_error(MetricsError::Other(
104-
"exponential histogram scale underflow".into(),
105-
));
103+
104+
// TODO - to check if this should be logged as an error if this is auto-recoverable.
105+
otel_debug!(
106+
name: "ExponentialHistogramDataPoint.Scale.Underflow",
107+
current_scale = self.scale,
108+
scale_delta = scale_delta,
109+
max_size = self.max_size,
110+
min_scale = EXPO_MIN_SCALE,
111+
value = format!("{:?}", v),
112+
message = "The measurement will be dropped due to scale underflow. Check the histogram configuration"
113+
);
114+
106115
return;
107116
}
108117
// Downscale

opentelemetry-sdk/src/metrics/manual_reader.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ use std::{
44
};
55

66
use opentelemetry::{
7-
global,
87
metrics::{MetricsError, Result},
8+
otel_debug,
99
};
1010

1111
use super::{
@@ -77,9 +77,9 @@ impl MetricReader for ManualReader {
7777
if inner.sdk_producer.is_none() {
7878
inner.sdk_producer = Some(pipeline);
7979
} else {
80-
global::handle_error(MetricsError::Config(
81-
"duplicate reader registration, did not register manual reader".into(),
82-
))
80+
otel_debug!(
81+
name: "ManualReader.DuplicateRegistration",
82+
message = "The pipeline is already registered to the Reader. Registering pipeline multiple times is not allowed.");
8383
}
8484
});
8585
}

opentelemetry-sdk/src/metrics/meter.rs

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use opentelemetry::{
88
InstrumentProvider, MetricsError, ObservableCounter, ObservableGauge,
99
ObservableUpDownCounter, Result, UpDownCounter,
1010
},
11-
InstrumentationScope,
11+
otel_error, InstrumentationScope,
1212
};
1313

1414
use crate::metrics::{
@@ -75,14 +75,20 @@ impl SdkMeter {
7575
{
7676
let validation_result = validate_instrument_config(builder.name.as_ref(), &builder.unit);
7777
if let Err(err) = validation_result {
78-
global::handle_error(err);
78+
otel_error!(
79+
name: "InstrumentCreationFailed",
80+
meter_name = self.scope.name.as_ref(),
81+
instrument_name = builder.name.as_ref(),
82+
message = "Measurements from this counter will be ignored.",
83+
reason = format!("{}", err)
84+
);
7985
return Counter::new(Arc::new(NoopSyncInstrument::new()));
8086
}
8187

8288
match resolver
8389
.lookup(
8490
InstrumentKind::Counter,
85-
builder.name,
91+
builder.name.clone(),
8692
builder.description,
8793
builder.unit,
8894
None,
@@ -91,7 +97,13 @@ impl SdkMeter {
9197
{
9298
Ok(counter) => counter,
9399
Err(err) => {
94-
global::handle_error(err);
100+
otel_error!(
101+
name: "InstrumentCreationFailed",
102+
meter_name = self.scope.name.as_ref(),
103+
instrument_name = builder.name.as_ref(),
104+
message = "Measurements from this counter will be ignored.",
105+
reason = format!("{}", err)
106+
);
95107
Counter::new(Arc::new(NoopSyncInstrument::new()))
96108
}
97109
}
@@ -107,19 +119,30 @@ impl SdkMeter {
107119
{
108120
let validation_result = validate_instrument_config(builder.name.as_ref(), &builder.unit);
109121
if let Err(err) = validation_result {
110-
global::handle_error(err);
122+
otel_error!(
123+
name: "InstrumentCreationFailed",
124+
meter_name = self.scope.name.as_ref(),
125+
instrument_name = builder.name.as_ref(),
126+
message = "Callbacks for this observable counter will not be invoked.",
127+
reason = format!("{}", err));
111128
return ObservableCounter::new();
112129
}
113130

114131
match resolver.measures(
115132
InstrumentKind::ObservableCounter,
116-
builder.name,
133+
builder.name.clone(),
117134
builder.description,
118135
builder.unit,
119136
None,
120137
) {
121138
Ok(ms) => {
122139
if ms.is_empty() {
140+
otel_error!(
141+
name: "InstrumentCreationFailed",
142+
meter_name = self.scope.name.as_ref(),
143+
instrument_name = builder.name.as_ref(),
144+
message = "Callbacks for this observable counter will not be invoked. Check View Configuration."
145+
);
123146
return ObservableCounter::new();
124147
}
125148

@@ -134,7 +157,12 @@ impl SdkMeter {
134157
ObservableCounter::new()
135158
}
136159
Err(err) => {
137-
global::handle_error(err);
160+
otel_error!(
161+
name: "InstrumentCreationFailed",
162+
meter_name = self.scope.name.as_ref(),
163+
instrument_name = builder.name.as_ref(),
164+
message = "Callbacks for this observable counter will not be invoked.",
165+
reason = format!("{}", err));
138166
ObservableCounter::new()
139167
}
140168
}

opentelemetry-sdk/src/metrics/meter_provider.rs

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ use std::{
88
};
99

1010
use opentelemetry::{
11-
global,
1211
metrics::{Meter, MeterProvider, MetricsError, Result},
13-
InstrumentationScope,
12+
otel_debug, otel_error,
13+
InstrumentationScope, KeyValue,
1414
};
1515

1616
use crate::Resource;
@@ -137,10 +137,17 @@ impl Drop for SdkMeterProviderInner {
137137
fn drop(&mut self) {
138138
// If user has already shutdown the provider manually by calling
139139
// shutdown(), then we don't need to call shutdown again.
140-
if !self.is_shutdown.load(Ordering::Relaxed) {
141-
if let Err(err) = self.shutdown() {
142-
global::handle_error(err);
143-
}
140+
if self.is_shutdown.load(Ordering::Relaxed) {
141+
otel_debug!(
142+
name: "MeterProvider.AlreadyShutdown",
143+
message = "Meter provider was already shut down; drop will not attempt shutdown again."
144+
);
145+
} else if let Err(err) = self.shutdown() {
146+
otel_error!(
147+
name: "MeterProvider.ShutdownFailed",
148+
message = "Shutdown attempt failed during drop of MeterProvider.",
149+
reason = format!("{}", err)
150+
);
144151
}
145152
}
146153
}

0 commit comments

Comments
 (0)