Skip to content

Commit 5250df2

Browse files
authored
fix: Suppress telemetry emitted inside of BatchLogProcessor::emit (#3172)
1 parent 9bd2c1b commit 5250df2

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
use opentelemetry_appender_tracing::layer;
2+
use opentelemetry_sdk::logs::SdkLoggerProvider;
3+
use tracing::info;
4+
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
5+
6+
#[test]
7+
fn test_logging_after_shutdown_does_not_cause_telemetry_induced_telemetry() {
8+
//! Reproduces [#3161](https://github.com/open-telemetry/opentelemetry-rust/issues/3161)
9+
let exporter = opentelemetry_stdout::LogExporter::default();
10+
let provider: SdkLoggerProvider = SdkLoggerProvider::builder()
11+
.with_batch_exporter(exporter)
12+
.build();
13+
14+
let otel_layer = layer::OpenTelemetryTracingBridge::new(&provider);
15+
16+
tracing_subscriber::registry().with(otel_layer).init();
17+
18+
provider.shutdown().unwrap();
19+
20+
// If logging causes telemetry-induced-telemetry after shutting down the provider, then a stack
21+
// overflow may occur.
22+
info!("Don't crash")
23+
}

opentelemetry-sdk/src/logs/batch_log_processor.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,10 @@ impl LogProcessor for BatchLogProcessor {
207207
}
208208
}
209209
Err(mpsc::TrySendError::Disconnected(_)) => {
210+
// The following `otel_warn!` may cause an infinite feedback loop of
211+
// 'telemetry-induced-telemetry', potentially causing a stack overflow
212+
let _guard = Context::enter_telemetry_suppressed_scope();
213+
210214
// Given background thread is the only receiver, and it's
211215
// disconnected, it indicates the thread is shutdown
212216
otel_warn!(

0 commit comments

Comments
 (0)