Skip to content

Commit 4df322f

Browse files
committed
Merged
2 parents 0ad193f + 8d5f222 commit 4df322f

File tree

21 files changed

+1379
-584
lines changed

21 files changed

+1379
-584
lines changed

examples/tracing-grpc/src/client.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use hello_world::greeter_client::GreeterClient;
22
use hello_world::HelloRequest;
33
use opentelemetry::{global, propagation::Injector};
4-
use opentelemetry_sdk::{propagation::TraceContextPropagator, runtime::Tokio, trace as sdktrace};
4+
use opentelemetry_sdk::{propagation::TraceContextPropagator, trace as sdktrace};
55
use opentelemetry_stdout::SpanExporter;
66

77
use opentelemetry::{
@@ -13,7 +13,7 @@ fn init_tracer() -> sdktrace::TracerProvider {
1313
global::set_text_map_propagator(TraceContextPropagator::new());
1414
// Install stdout exporter pipeline to be able to retrieve the collected spans.
1515
let provider = sdktrace::TracerProvider::builder()
16-
.with_batch_exporter(SpanExporter::default(), Tokio)
16+
.with_batch_exporter(SpanExporter::default())
1717
.build();
1818

1919
global::set_tracer_provider(provider.clone());

examples/tracing-grpc/src/server.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use opentelemetry::{
66
trace::{Span, SpanKind, Tracer},
77
};
88
use opentelemetry_sdk::{
9-
propagation::TraceContextPropagator, runtime::Tokio, trace::TracerProvider,
9+
propagation::TraceContextPropagator, trace::TracerProvider,
1010
};
1111
use opentelemetry_stdout::SpanExporter;
1212
use tonic::{transport::Server, Request, Response, Status};
@@ -15,7 +15,7 @@ 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()
18-
.with_batch_exporter(SpanExporter::default(), Tokio)
18+
.with_batch_exporter(SpanExporter::default())
1919
.build();
2020

2121
global::set_tracer_provider(provider.clone());

examples/tracing-jaeger/src/main.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use opentelemetry::{
44
KeyValue,
55
};
66
use opentelemetry_sdk::trace::TracerProvider;
7-
use opentelemetry_sdk::{runtime, Resource};
7+
use opentelemetry_sdk::Resource;
88

99
use std::error::Error;
1010

@@ -14,7 +14,7 @@ fn init_tracer_provider() -> Result<opentelemetry_sdk::trace::TracerProvider, Tr
1414
.build()?;
1515

1616
Ok(TracerProvider::builder()
17-
.with_batch_exporter(exporter, runtime::Tokio)
17+
.with_batch_exporter(exporter)
1818
.with_resource(
1919
Resource::builder()
2020
.with_service_name("tracing-jaeger")

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

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,7 @@ fn init_traces() -> Result<sdktrace::TracerProvider, TraceError> {
4949
.build()?;
5050

5151
Ok(TracerProvider::builder()
52-
// TODO: Enable BatchExporter after
53-
// https://github.com/open-telemetry/opentelemetry-rust/pull/2456
54-
.with_simple_exporter(exporter)
52+
.with_batch_exporter(exporter)
5553
.with_resource(RESOURCE.clone())
5654
.build())
5755
}
@@ -73,7 +71,6 @@ fn init_metrics() -> Result<opentelemetry_sdk::metrics::SdkMeterProvider, Metric
7371

7472
// #[tokio::main]
7573
// TODO: Re-enable tokio::main, if needed, after
76-
// https://github.com/open-telemetry/opentelemetry-rust/pull/2456
7774
fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
7875
let logger_provider = init_logs()?;
7976

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use opentelemetry_sdk::logs::LogError;
88
use opentelemetry_sdk::logs::LoggerProvider;
99
use opentelemetry_sdk::metrics::MetricError;
1010
use opentelemetry_sdk::metrics::{PeriodicReader, SdkMeterProvider};
11-
use opentelemetry_sdk::{runtime, trace as sdktrace, Resource};
11+
use opentelemetry_sdk::{trace as sdktrace, Resource};
1212
use std::error::Error;
1313
use tracing::info;
1414
use tracing_subscriber::prelude::*;
@@ -27,7 +27,7 @@ fn init_traces() -> Result<sdktrace::TracerProvider, TraceError> {
2727
.build()?;
2828
Ok(sdktrace::TracerProvider::builder()
2929
.with_resource(RESOURCE.clone())
30-
.with_batch_exporter(exporter, runtime::Tokio)
30+
.with_batch_exporter(exporter)
3131
.build())
3232
}
3333

opentelemetry-otlp/src/logs.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
//!
33
//! Defines a [LogExporter] to send logs via the OpenTelemetry Protocol (OTLP)
44
5+
#[cfg(feature = "grpc-tonic")]
56
use opentelemetry::otel_debug;
67
use std::fmt::Debug;
78

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

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use anyhow::Result;
1313
use ctor::dtor;
1414
use integration_test_runner::test_utils;
1515
use opentelemetry_proto::tonic::trace::v1::TracesData;
16-
use opentelemetry_sdk::{runtime, trace as sdktrace, Resource};
16+
use opentelemetry_sdk::{trace as sdktrace, Resource};
1717
use std::fs::File;
1818
use std::io::Write;
1919
use std::os::unix::fs::MetadataExt;
@@ -35,7 +35,7 @@ fn init_tracer_provider() -> Result<sdktrace::TracerProvider, TraceError> {
3535
let exporter = exporter_builder.build()?;
3636

3737
Ok(opentelemetry_sdk::trace::TracerProvider::builder()
38-
.with_batch_exporter(exporter, runtime::Tokio)
38+
.with_batch_exporter(exporter)
3939
.with_resource(
4040
Resource::builder_empty()
4141
.with_service_name("basic-otlp-tracing-example")
@@ -141,6 +141,50 @@ pub fn test_serde() -> Result<()> {
141141
Ok(())
142142
}
143143

144+
#[test]
145+
#[cfg(any(feature = "tonic-client", feature = "reqwest-blocking-client"))]
146+
pub fn span_batch_non_tokio_main() -> Result<()> {
147+
// Initialize the tracer provider inside a tokio runtime
148+
// as this allows tonic client to capture the runtime,
149+
// but actual export occurs from the dedicated std::thread
150+
// created by BatchSpanProcessor.
151+
152+
use anyhow::Ok;
153+
let rt = tokio::runtime::Runtime::new()?;
154+
let tracer_provider = rt.block_on(async {
155+
// While we're here setup our collector container too, as this needs tokio to run
156+
let _ = test_utils::start_collector_container().await;
157+
init_tracer_provider()
158+
})?;
159+
160+
let tracer = global::tracer("ex.com/basic");
161+
162+
tracer.in_span("operation", |cx| {
163+
let span = cx.span();
164+
span.add_event(
165+
"Nice operation!".to_string(),
166+
vec![KeyValue::new("bogons", 100)],
167+
);
168+
span.set_attribute(KeyValue::new(ANOTHER_KEY, "yes"));
169+
170+
tracer.in_span("Sub operation...", |cx| {
171+
let span = cx.span();
172+
span.set_attribute(KeyValue::new(LEMONS_KEY, "five"));
173+
174+
span.add_event("Sub span event", vec![]);
175+
});
176+
});
177+
178+
tracer_provider.shutdown()?;
179+
180+
// Give it a second to flush
181+
std::thread::sleep(Duration::from_secs(2));
182+
183+
// Validate results
184+
assert_traces_results(test_utils::TRACES_FILE, "./expected/traces.json")?;
185+
Ok(())
186+
}
187+
144188
///
145189
/// Make sure we stop the collector container, otherwise it will sit around hogging our
146190
/// ports and subsequent test runs will fail.

opentelemetry-otlp/tests/smoke.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,6 @@ async fn smoke_tracer() {
100100
.with_metadata(metadata)
101101
.build()
102102
.expect("NON gzip-tonic SpanExporter failed to build"),
103-
opentelemetry_sdk::runtime::Tokio,
104103
)
105104
.build();
106105

opentelemetry-sdk/CHANGELOG.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,57 @@ metadata, a feature introduced in version 0.1.40. [#2418](https://github.com/ope
165165
- Continue enabling one of the async runtime feature flags: `rt-tokio`,
166166
`rt-tokio-current-thread`, or `rt-async-std`.
167167

168+
- **Breaking** [#2456](https://github.com/open-telemetry/opentelemetry-rust/pull/2456)
169+
170+
`BatchSpanProcessor` no longer requires an async runtime by default. Instead, a dedicated
171+
background thread is created to do the batch processing and exporting.
172+
173+
For users who prefer the previous behavior of relying on a specific
174+
`Runtime`, they can do so by enabling the feature flag
175+
**`experimental_trace_batch_span_processor_with_async_runtime`**.
176+
177+
1. *Default Implementation, requires no async runtime* (**Recommended**) The
178+
new default implementation does not require a runtime argument. Replace the
179+
builder method accordingly:
180+
- *Before:*
181+
```rust
182+
let tracer_provider = TracerProvider::builder()
183+
.with_span_processor(BatchSpanProcessor::builder(exporter, runtime::Tokio).build())
184+
.build();
185+
```
186+
187+
- *After:*
188+
```rust
189+
let tracer_provider = TracerProvider::builder()
190+
.with_span_processor(BatchSpanProcessor::builder(exporter).build())
191+
.build();
192+
```
193+
194+
2. *Async Runtime Support*
195+
If your application cannot spin up new threads or you prefer using async
196+
runtimes, enable the
197+
"experimental_trace_batch_span_processor_with_async_runtime" feature flag and
198+
adjust code as below.
199+
200+
- *Before:*
201+
```rust
202+
let tracer_provider = TracerProvider::builder()
203+
.with_span_processor(BatchSpanProcessor::builder(exporter, runtime::Tokio).build())
204+
.build();
205+
```
206+
207+
- *After:*
208+
```rust
209+
let tracer_provider = TracerProvider::builder()
210+
.with_span_processor(span_processor_with_async_runtime::BatchSpanProcessor::builder(exporter, runtime::Tokio).build())
211+
.build();
212+
```
213+
214+
*Requirements:*
215+
- Enable the feature flag:
216+
`experimental_trace_batch_span_processor_with_async_runtime`.
217+
- Continue enabling one of the async runtime feature flags: `rt-tokio`,
218+
`rt-tokio-current-thread`, or `rt-async-std`.
168219

169220
## 0.27.1
170221

opentelemetry-sdk/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ internal-logs = ["tracing"]
5656
experimental_metrics_periodicreader_with_async_runtime = ["metrics"]
5757
spec_unstable_metrics_views = ["metrics"]
5858
experimental_logs_batch_log_processor_with_async_runtime = ["logs"]
59+
experimental_trace_batch_span_processor_with_async_runtime = ["trace"]
60+
5961

6062
[[bench]]
6163
name = "context"

0 commit comments

Comments
 (0)