File tree Expand file tree Collapse file tree 2 files changed +27
-0
lines changed
opentelemetry-appender-tracing/tests
opentelemetry-sdk/src/logs Expand file tree Collapse file tree 2 files changed +27
-0
lines changed Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff 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 ! (
You can’t perform that action at this time.
0 commit comments