Skip to content

Commit dd982e3

Browse files
authored
InternalLog fixes for GlobalMeterProvider (#2333)
1 parent a6e2cd6 commit dd982e3

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

opentelemetry/src/global/metrics.rs

+9-6
Original file line numberDiff line numberDiff line change
@@ -21,21 +21,24 @@ where
2121
{
2222
// Try to set the global meter provider. If the RwLock is poisoned, we'll log an error.
2323
let mut global_provider = global_meter_provider().write();
24-
2524
if let Ok(ref mut provider) = global_provider {
2625
**provider = Arc::new(new_provider);
2726
otel_info!(name: "MeterProvider.GlobalSet", message = "Global meter provider is set. Meters can now be created using global::meter() or global::meter_with_scope().");
2827
} else {
29-
otel_error!(name: "MeterProvider.GlobalSetFailed", message = "Global meter provider is not set due to lock poison. Meters created using global::meter() or global::meter_with_scope() will not function.");
28+
otel_error!(name: "MeterProvider.GlobalSetFailed", message = "Setting global meter provider failed. Meters created using global::meter() or global::meter_with_scope() will not function. Report this issue in OpenTelemetry repo.");
3029
}
3130
}
3231

3332
/// Returns an instance of the currently configured global [`MeterProvider`].
3433
pub fn meter_provider() -> GlobalMeterProvider {
35-
global_meter_provider()
36-
.read()
37-
.expect("GLOBAL_METER_PROVIDER RwLock poisoned")
38-
.clone()
34+
// Try to get the global meter provider. If the RwLock is poisoned, we'll log an error and return a NoopMeterProvider.
35+
let global_provider = global_meter_provider().read();
36+
if let Ok(provider) = global_provider {
37+
provider.clone()
38+
} else {
39+
otel_error!(name: "MeterProvider.GlobalGetFailed", message = "Getting global meter provider failed. Meters created using global::meter() or global::meter_with_scope() will not function. Report this issue in OpenTelemetry repo.");
40+
Arc::new(crate::metrics::noop::NoopMeterProvider::new())
41+
}
3942
}
4043

4144
/// Creates a named [`Meter`] via the currently configured global [`MeterProvider`].

0 commit comments

Comments
 (0)