Skip to content

Commit 50d9dfd

Browse files
[PAPAY-1395]: Explicitely shutdown the tracer provider (#113)
* shutdown tracer provider properly * add comment * Bump 0.11.1 & update changelog --------- Co-authored-by: Simone Cottini <[email protected]>
1 parent 7c03025 commit 50d9dfd

File tree

5 files changed

+44
-5
lines changed

5 files changed

+44
-5
lines changed

CHANGELOG.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,14 @@ and this project adheres to
88

99
---
1010

11+
## [0.11.1] - 2024-09-12
12+
13+
### Fixed
14+
15+
- Shutdown the tracing provider before exiting ([bug](https://github.com/open-telemetry/opentelemetry-rust/issues/1961))
16+
17+
---
18+
1119
## [0.11.0] - 2024-07-24
1220

1321
### Updated
@@ -231,7 +239,8 @@ jaeger:
231239
232240
233241
234-
[Unreleased]: https://github.com/primait/prima_tracing.rs/compare/0.11.0...HEAD
242+
[Unreleased]: https://github.com/primait/prima_tracing.rs/compare/0.11.1...HEAD
243+
[0.11.1]: https://github.com/primait/prima_tracing.rs/compare/0.11.0...0.11.1
235244
[0.11.0]: https://github.com/primait/prima_tracing.rs/compare/0.10.0...0.11.0
236245
[0.10.0]: https://github.com/primait/prima_tracing.rs/compare/0.9.5...0.10.0
237246
[0.9.4]: https://github.com/primait/prima_tracing.rs/compare/0.9.3...0.9.4

Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ license = "MIT OR Apache-2.0"
66
name = "prima-tracing"
77
readme = "README.md"
88
repository = "https://github.com/primait/prima_tracing.rs"
9-
version = "0.11.0"
9+
version = "0.11.1"
1010

1111
[features]
1212
default = []
@@ -53,6 +53,7 @@ serde_json = "^1.0"
5353
# dates
5454
chrono = {version = "^0.4", default-features = false, features = ["serde", "clock"]}
5555
url = "2.5.0"
56+
once_cell = "1.19.0"
5657

5758
[dev-dependencies]
5859
actix-web = "4.0.1"

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
Install from [crates.io](https://crates.io/crates/prima-tracing)
1313

1414
```toml
15-
prima-tracing = "0.9"
15+
prima-tracing = "0.11"
1616
```
1717

1818
### Cargo features

src/subscriber.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ pub struct Uninstall;
8484
impl Drop for Uninstall {
8585
fn drop(&mut self) {
8686
#[cfg(feature = "traces")]
87-
opentelemetry::global::shutdown_tracer_provider();
87+
crate::telemetry::shutdown_tracer_provider();
8888
}
8989
}
9090
/// Information about the current app context like name or environment

src/telemetry.rs

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use once_cell::sync::Lazy;
12
use opentelemetry::global;
23
use opentelemetry::trace::TracerProvider;
34
use opentelemetry::KeyValue;
@@ -6,6 +7,8 @@ use opentelemetry_sdk::{
67
trace::{self, Tracer},
78
Resource,
89
};
10+
use std::mem;
11+
use std::sync::Mutex;
912

1013
use crate::SubscriberConfig;
1114

@@ -64,14 +67,40 @@ pub fn configure<T>(config: &SubscriberConfig<T>) -> Tracer {
6467
.install_batch(runtime)
6568
.expect("Failed to configure the OpenTelemetry tracer provider");
6669

67-
global::set_tracer_provider(tracer_provider.clone());
70+
set_tracer_provider(tracer_provider.clone());
6871

6972
tracer_provider
7073
.tracer_builder("prima-tracing")
7174
.with_version(env!("CARGO_PKG_VERSION"))
7275
.build()
7376
}
7477

78+
// Consider to remove this wrapper when https://github.com/open-telemetry/opentelemetry-rust/issues/1961 is resolved
79+
static TRACER_PROVIDER: Lazy<Mutex<Option<trace::TracerProvider>>> = Lazy::new(Default::default);
80+
81+
fn set_tracer_provider(new_provider: trace::TracerProvider) {
82+
global::set_tracer_provider(new_provider.clone());
83+
84+
let mut tracer_provider = TRACER_PROVIDER
85+
.lock()
86+
.expect("OpenTelemetry tracer provider mutex poisoned");
87+
_ = mem::replace(&mut *tracer_provider, Some(new_provider));
88+
}
89+
90+
pub(crate) fn shutdown_tracer_provider() {
91+
global::shutdown_tracer_provider();
92+
93+
let tracer_provider = TRACER_PROVIDER
94+
.lock()
95+
.expect("OpenTelemetry tracer provider mutex poisoned")
96+
.take()
97+
.expect("OpenTelemetry tracer provider is missing, cannot shutdown");
98+
99+
if let Err(err) = tracer_provider.shutdown() {
100+
eprintln!("Failed to shutdown the OpenTelemetry tracer provider: {err:?}");
101+
}
102+
}
103+
75104
#[cfg(test)]
76105
mod test {
77106
use super::*;

0 commit comments

Comments
 (0)