Skip to content

Commit 33cb755

Browse files
committed
Merged
2 parents d2a88ab + 067be7b commit 33cb755

File tree

19 files changed

+74
-72
lines changed

19 files changed

+74
-72
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ jobs:
2525
- rust: stable
2626
os: macos-latest
2727
- rust: stable
28-
os: actuated-arm64-4cpu-16gb
28+
os: otel-linux-arm64
2929
runs-on: ${{ matrix.os }}
3030
continue-on-error: ${{ matrix.rust == 'beta' }}
3131
steps:

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ fn main() {
8383
});
8484

8585
// Shutdown trace pipeline
86-
global::shutdown_tracer_provider();
86+
provider.shutdown().expect("TracerProvider should shutdown successfully")
8787
}
8888
```
8989

examples/tracing-grpc/src/client.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,23 @@
11
use hello_world::greeter_client::GreeterClient;
22
use hello_world::HelloRequest;
33
use opentelemetry::{global, propagation::Injector};
4-
use opentelemetry_sdk::{
5-
propagation::TraceContextPropagator, runtime::Tokio, trace::TracerProvider,
6-
};
4+
use opentelemetry_sdk::{propagation::TraceContextPropagator, runtime::Tokio, trace as sdktrace};
75
use opentelemetry_stdout::SpanExporter;
86

97
use opentelemetry::{
108
trace::{SpanKind, TraceContextExt, Tracer},
119
Context, KeyValue,
1210
};
1311

14-
fn init_tracer() {
12+
fn init_tracer() -> sdktrace::TracerProvider {
1513
global::set_text_map_propagator(TraceContextPropagator::new());
1614
// Install stdout exporter pipeline to be able to retrieve the collected spans.
17-
let provider = TracerProvider::builder()
15+
let provider = sdktrace::TracerProvider::builder()
1816
.with_batch_exporter(SpanExporter::default(), Tokio)
1917
.build();
2018

21-
global::set_tracer_provider(provider);
19+
global::set_tracer_provider(provider.clone());
20+
provider
2221
}
2322

2423
struct MetadataMap<'a>(&'a mut tonic::metadata::MetadataMap);
@@ -75,9 +74,10 @@ async fn greet() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static
7574

7675
#[tokio::main]
7776
async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> {
78-
init_tracer();
77+
let provider = init_tracer();
7978
greet().await?;
80-
opentelemetry::global::shutdown_tracer_provider();
79+
80+
provider.shutdown()?;
8181

8282
Ok(())
8383
}

examples/tracing-grpc/src/server.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,15 @@ use opentelemetry_sdk::{
1111
use opentelemetry_stdout::SpanExporter;
1212
use tonic::{transport::Server, Request, Response, Status};
1313

14-
fn init_tracer() {
14+
fn init_tracer() -> TracerProvider {
1515
global::set_text_map_propagator(TraceContextPropagator::new());
1616
// Install stdout exporter pipeline to be able to retrieve the collected spans.
1717
let provider = TracerProvider::builder()
1818
.with_batch_exporter(SpanExporter::default(), Tokio)
1919
.build();
2020

21-
global::set_tracer_provider(provider);
21+
global::set_tracer_provider(provider.clone());
22+
provider
2223
}
2324

2425
#[allow(clippy::derive_partial_eq_without_eq)] // tonic don't derive Eq for generated types. We shouldn't manually change it.
@@ -82,7 +83,7 @@ impl Greeter for MyGreeter {
8283

8384
#[tokio::main]
8485
async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> {
85-
init_tracer();
86+
let provider = init_tracer();
8687

8788
let addr = "[::1]:50051".parse()?;
8889
let greeter = MyGreeter::default();
@@ -92,7 +93,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>
9293
.serve(addr)
9394
.await?;
9495

95-
opentelemetry::global::shutdown_tracer_provider();
96+
provider.shutdown()?;
9697

9798
Ok(())
9899
}

examples/tracing-jaeger/src/main.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
use opentelemetry::global::shutdown_tracer_provider;
21
use opentelemetry::{
32
global,
43
trace::{TraceContextExt, TraceError, Tracer},
@@ -43,6 +42,7 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
4342
});
4443
});
4544

46-
shutdown_tracer_provider();
45+
tracer_provider.shutdown()?;
46+
4747
Ok(())
4848
}

opentelemetry-otlp/examples/basic-otlp-http/src/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
156156

157157
info!(target: "my-target", "hello from {}. My price is {}", "apple", 1.99);
158158

159-
global::shutdown_tracer_provider();
159+
tracer_provider.shutdown()?;
160160
logger_provider.shutdown()?;
161161
meter_provider.shutdown()?;
162162

opentelemetry-otlp/examples/basic-otlp/src/main.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,7 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
139139
});
140140

141141
info!(name: "my-event", target: "my-target", "hello from {}. My price is {}", "apple", 1.99);
142-
143-
global::shutdown_tracer_provider();
142+
tracer_provider.shutdown()?;
144143
meter_provider.shutdown()?;
145144
logger_provider.shutdown()?;
146145

opentelemetry-otlp/tests/integration_test/tests/traces.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
use integration_test_runner::trace_asserter::{read_spans_from_json, TraceAsserter};
44
use opentelemetry::global;
5-
use opentelemetry::global::shutdown_tracer_provider;
65
use opentelemetry::trace::TraceError;
76
use opentelemetry::{
87
trace::{TraceContextExt, Tracer},
@@ -65,7 +64,7 @@ pub async fn traces() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
6564
});
6665
});
6766

68-
shutdown_tracer_provider();
67+
tracer_provider.shutdown()?;
6968

7069
Ok(())
7170
}

opentelemetry-otlp/tests/smoke.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
use futures_util::StreamExt;
22
use opentelemetry::global;
3-
use opentelemetry::global::shutdown_tracer_provider;
43
use opentelemetry::trace::{Span, SpanKind, Tracer};
54
use opentelemetry_otlp::{WithExportConfig, WithTonicConfig};
65
use opentelemetry_proto::tonic::collector::trace::v1::{
@@ -105,7 +104,7 @@ async fn smoke_tracer() {
105104
)
106105
.build();
107106

108-
global::set_tracer_provider(tracer_provider);
107+
global::set_tracer_provider(tracer_provider.clone());
109108

110109
let tracer = global::tracer("smoke");
111110

@@ -117,7 +116,9 @@ async fn smoke_tracer() {
117116
span.add_event("my-test-event", vec![]);
118117
span.end();
119118

120-
shutdown_tracer_provider();
119+
tracer_provider
120+
.shutdown()
121+
.expect("tracer_provider should shutdown successfully");
121122
}
122123

123124
println!("Waiting for request...");

opentelemetry-sdk/CHANGELOG.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@
99
transparent change.
1010
[#2338](https://github.com/open-telemetry/opentelemetry-rust/pull/2338)
1111
- `ResourceDetector.detect()` no longer supports timeout option.
12+
- `opentelemetry::global::shutdown_tracer_provider()` Removed from the API, should now use `tracer_provider.shutdown()` see [#2369](https://github.com/open-telemetry/opentelemetry-rust/pull/2369) for a migration example. "Tracer provider" is cheaply cloneable, so users are encouraged to set a clone of it as the global (ex: `global::set_tracer_provider(provider.clone()))`, so that instrumentations and other components can obtain tracers from `global::tracer()`. The tracer_provider must be kept around to call shutdown on it at the end of application (ex: `tracer_provider.shutdown()`)
1213
- The trait functions `LogExporter.shutdown` and `TraceExporter.shutdown` now explicitly return a result. The
1314
semantics of the method have not changed, but you will have a new lint encouraging you to consume these results.
14-
15-
## 0.27.1
15+
## 0.27.1
1616

1717
Released 2024-Nov-27
1818

opentelemetry-sdk/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
//! });
3131
//!
3232
//! // Shutdown trace pipeline
33-
//! global::shutdown_tracer_provider();
33+
//! provider.shutdown().expect("TracerProvider should shutdown successfully")
3434
//! # }
3535
//! }
3636
//! # }

opentelemetry-sdk/src/trace/provider.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -219,10 +219,8 @@ impl TracerProvider {
219219
///
220220
/// // create more spans..
221221
///
222-
/// // dropping provider and shutting down global provider ensure all
223-
/// // remaining spans are exported
222+
/// // dropping provider ensures all remaining spans are exported
224223
/// drop(provider);
225-
/// global::shutdown_tracer_provider();
226224
/// }
227225
/// ```
228226
pub fn force_flush(&self) -> Vec<TraceResult<()>> {

opentelemetry-sdk/src/trace/runtime_tests.rs

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -66,15 +66,18 @@ fn build_simple_tracer_provider(exporter: SpanCountExporter) -> crate::trace::Tr
6666
}
6767

6868
#[cfg(any(feature = "rt-tokio", feature = "rt-tokio-current-thread"))]
69-
async fn test_set_provider_in_tokio<R: RuntimeChannel>(runtime: R) -> Arc<AtomicUsize> {
69+
async fn test_set_provider_in_tokio<R: RuntimeChannel>(
70+
runtime: R,
71+
) -> (Arc<AtomicUsize>, crate::trace::TracerProvider) {
7072
let exporter = SpanCountExporter::new();
7173
let span_count = exporter.span_count.clone();
72-
let _ = set_tracer_provider(build_batch_tracer_provider(exporter, runtime));
74+
let tracer_provider = build_batch_tracer_provider(exporter, runtime);
75+
let _ = set_tracer_provider(tracer_provider.clone());
7376
let tracer = tracer("opentelemetery");
7477

7578
tracer.in_span("test", |_cx| {});
7679

77-
span_count
80+
(span_count, tracer_provider)
7881
}
7982

8083
// When using `tokio::spawn` to spawn the worker task in batch processor
@@ -97,7 +100,7 @@ async fn test_set_provider_in_tokio<R: RuntimeChannel>(runtime: R) -> Arc<Atomic
97100
#[ignore = "requires --test-threads=1"]
98101
#[cfg(feature = "rt-tokio")]
99102
async fn test_set_provider_multiple_thread_tokio() {
100-
let span_count = test_set_provider_in_tokio(runtime::Tokio).await;
103+
let (span_count, _) = test_set_provider_in_tokio(runtime::Tokio).await;
101104
assert_eq!(span_count.load(Ordering::SeqCst), 0);
102105
}
103106

@@ -106,8 +109,10 @@ async fn test_set_provider_multiple_thread_tokio() {
106109
#[ignore = "requires --test-threads=1"]
107110
#[cfg(feature = "rt-tokio")]
108111
async fn test_set_provider_multiple_thread_tokio_shutdown() {
109-
let span_count = test_set_provider_in_tokio(runtime::Tokio).await;
110-
shutdown_tracer_provider();
112+
let (span_count, tracer_provider) = test_set_provider_in_tokio(runtime::Tokio).await;
113+
tracer_provider
114+
.shutdown()
115+
.expect("TracerProvider should shutdown properly");
111116
assert!(span_count.load(Ordering::SeqCst) > 0);
112117
}
113118

@@ -119,12 +124,15 @@ async fn test_set_provider_multiple_thread_tokio_shutdown() {
119124
async fn test_set_provider_single_thread_tokio_with_simple_processor() {
120125
let exporter = SpanCountExporter::new();
121126
let span_count = exporter.span_count.clone();
122-
let _ = set_tracer_provider(build_simple_tracer_provider(exporter));
127+
let tracer_provider = build_simple_tracer_provider(exporter);
128+
let _ = set_tracer_provider(tracer_provider.clone());
123129
let tracer = tracer("opentelemetry");
124130

125131
tracer.in_span("test", |_cx| {});
126132

127-
shutdown_tracer_provider();
133+
tracer_provider
134+
.shutdown()
135+
.expect("TracerProvider should shutdown properly");
128136

129137
assert!(span_count.load(Ordering::SeqCst) > 0);
130138
}
@@ -134,7 +142,7 @@ async fn test_set_provider_single_thread_tokio_with_simple_processor() {
134142
#[ignore = "requires --test-threads=1"]
135143
#[cfg(feature = "rt-tokio-current-thread")]
136144
async fn test_set_provider_single_thread_tokio() {
137-
let span_count = test_set_provider_in_tokio(runtime::TokioCurrentThread).await;
145+
let (span_count, _) = test_set_provider_in_tokio(runtime::TokioCurrentThread).await;
138146
assert_eq!(span_count.load(Ordering::SeqCst), 0)
139147
}
140148

@@ -143,7 +151,10 @@ async fn test_set_provider_single_thread_tokio() {
143151
#[ignore = "requires --test-threads=1"]
144152
#[cfg(feature = "rt-tokio-current-thread")]
145153
async fn test_set_provider_single_thread_tokio_shutdown() {
146-
let span_count = test_set_provider_in_tokio(runtime::TokioCurrentThread).await;
147-
shutdown_tracer_provider();
154+
let (span_count, tracer_provider) =
155+
test_set_provider_in_tokio(runtime::TokioCurrentThread).await;
156+
tracer_provider
157+
.shutdown()
158+
.expect("TracerProvider should shutdown properly");
148159
assert!(span_count.load(Ordering::SeqCst) > 0)
149160
}

opentelemetry-stdout/examples/basic.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,14 @@ static RESOURCE: Lazy<Resource> = Lazy::new(|| {
2424
});
2525

2626
#[cfg(feature = "trace")]
27-
fn init_trace() {
27+
fn init_trace() -> TracerProvider {
2828
let exporter = opentelemetry_stdout::SpanExporter::default();
2929
let provider = TracerProvider::builder()
3030
.with_simple_exporter(exporter)
3131
.with_resource(RESOURCE.clone())
3232
.build();
33-
global::set_tracer_provider(provider);
33+
global::set_tracer_provider(provider.clone());
34+
provider
3435
}
3536

3637
#[cfg(feature = "metrics")]
@@ -198,7 +199,7 @@ fn emit_log() {
198199
#[tokio::main]
199200
async fn main() -> Result<(), Box<dyn std::error::Error>> {
200201
#[cfg(feature = "trace")]
201-
init_trace();
202+
let tracer_provider = init_trace();
202203

203204
#[cfg(feature = "metrics")]
204205
let meter_provider = init_metrics();
@@ -216,7 +217,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
216217
emit_metrics();
217218

218219
#[cfg(feature = "trace")]
219-
global::shutdown_tracer_provider();
220+
tracer_provider.shutdown()?;
220221

221222
#[cfg(feature = "metrics")]
222223
meter_provider.shutdown()?;

opentelemetry-zipkin/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> {
5656
// Traced app logic here...
5757
});
5858

59-
global::shutdown_tracer_provider();
59+
provider.shutdown().expect("TracerProvider should shutdown successfully");
6060

6161
Ok(())
6262
}

opentelemetry-zipkin/examples/zipkin.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use opentelemetry::{
2-
global::{self, shutdown_tracer_provider},
2+
global::{self},
33
trace::{Span, Tracer},
44
};
55
use std::thread;
@@ -13,7 +13,7 @@ fn bar() {
1313
}
1414

1515
fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> {
16-
let tracer = opentelemetry_zipkin::new_pipeline()
16+
let (tracer, provider) = opentelemetry_zipkin::new_pipeline()
1717
.with_service_name("trace-demo")
1818
.install_simple()?;
1919

@@ -23,6 +23,6 @@ fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> {
2323
thread::sleep(Duration::from_millis(6));
2424
});
2525

26-
shutdown_tracer_provider();
26+
provider.shutdown()?;
2727
Ok(())
2828
}

0 commit comments

Comments
 (0)