From 2e5decaefa512fed4f7c6eac167e7ffeba0c4798 Mon Sep 17 00:00:00 2001 From: Shivanshu Raj Shrivastava Date: Tue, 18 Mar 2025 18:03:10 +0530 Subject: [PATCH 1/3] fix: updates exporter shutdown for spans exporter Signed-off-by: Shivanshu Raj Shrivastava --- opentelemetry-otlp/src/exporter/http/trace.rs | 2 +- opentelemetry-otlp/src/exporter/tonic/trace.rs | 11 ++++++----- opentelemetry-otlp/src/span.rs | 8 ++++++++ opentelemetry-sdk/src/testing/trace/span_exporters.rs | 2 +- opentelemetry-sdk/src/trace/export.rs | 2 +- opentelemetry-sdk/src/trace/in_memory_exporter.rs | 2 +- opentelemetry-sdk/src/trace/span_processor.rs | 4 ++-- opentelemetry-stdout/src/trace/exporter.rs | 2 +- 8 files changed, 21 insertions(+), 12 deletions(-) diff --git a/opentelemetry-otlp/src/exporter/http/trace.rs b/opentelemetry-otlp/src/exporter/http/trace.rs index 129a0da7d8..5c7643d12d 100644 --- a/opentelemetry-otlp/src/exporter/http/trace.rs +++ b/opentelemetry-otlp/src/exporter/http/trace.rs @@ -61,7 +61,7 @@ impl SpanExporter for OtlpHttpClient { Ok(()) } - fn shutdown(&mut self) -> OTelSdkResult { + fn shutdown(&self) -> OTelSdkResult { let mut client_guard = self.client.lock().map_err(|e| { OTelSdkError::InternalFailure(format!("Failed to acquire client lock: {}", e)) })?; diff --git a/opentelemetry-otlp/src/exporter/tonic/trace.rs b/opentelemetry-otlp/src/exporter/tonic/trace.rs index 4ddad37b50..be345a3508 100644 --- a/opentelemetry-otlp/src/exporter/tonic/trace.rs +++ b/opentelemetry-otlp/src/exporter/tonic/trace.rs @@ -89,11 +89,12 @@ impl SpanExporter for TonicTracesClient { Ok(()) } - fn shutdown(&mut self) -> OTelSdkResult { - match self.inner.take() { - Some(_) => Ok(()), // Successfully took `inner`, indicating a successful shutdown. - None => Err(OTelSdkError::AlreadyShutdown), // `inner` was already `None`, meaning it's already shut down. - } + fn shutdown(&self) -> OTelSdkResult { + // match self.inner.take() { + // Some(_) => Ok(()), // Successfully took `inner`, indicating a successful shutdown. + // None => Err(OTelSdkError::AlreadyShutdown), // `inner` was already `None`, meaning it's already shut down. + // } + Ok(()) } fn set_resource(&mut self, resource: &opentelemetry_sdk::Resource) { diff --git a/opentelemetry-otlp/src/span.rs b/opentelemetry-otlp/src/span.rs index 81c2cedd67..dfa92c4b5d 100644 --- a/opentelemetry-otlp/src/span.rs +++ b/opentelemetry-otlp/src/span.rs @@ -159,4 +159,12 @@ impl opentelemetry_sdk::trace::SpanExporter for SpanExporter { SupportedTransportClient::Http(client) => client.set_resource(resource), } } + fn shutdown(&self) -> OTelSdkResult { + match &self.client { + #[cfg(feature = "grpc-tonic")] + SupportedTransportClient::Tonic(client) => client.shutdown(), + #[cfg(any(feature = "http-proto", feature = "http-json"))] + SupportedTransportClient::Http(client) => client.shutdown(), + } + } } diff --git a/opentelemetry-sdk/src/testing/trace/span_exporters.rs b/opentelemetry-sdk/src/testing/trace/span_exporters.rs index 0144d9b212..e2d2d8889a 100644 --- a/opentelemetry-sdk/src/testing/trace/span_exporters.rs +++ b/opentelemetry-sdk/src/testing/trace/span_exporters.rs @@ -49,7 +49,7 @@ impl SpanExporter for TokioSpanExporter { }) } - fn shutdown(&mut self) -> OTelSdkResult { + fn shutdown(&self) -> OTelSdkResult { self.tx_shutdown.send(()).map_err(|_| { OTelSdkError::InternalFailure("Failed to send shutdown signal".to_string()) }) diff --git a/opentelemetry-sdk/src/trace/export.rs b/opentelemetry-sdk/src/trace/export.rs index 15db1bdaf4..41ed44ddac 100644 --- a/opentelemetry-sdk/src/trace/export.rs +++ b/opentelemetry-sdk/src/trace/export.rs @@ -43,7 +43,7 @@ pub trait SpanExporter: Send + Sync + Debug { /// flush the data and the destination is unavailable). SDK authors /// can decide if they want to make the shutdown timeout /// configurable. - fn shutdown(&mut self) -> OTelSdkResult { + fn shutdown(&self) -> OTelSdkResult { Ok(()) } diff --git a/opentelemetry-sdk/src/trace/in_memory_exporter.rs b/opentelemetry-sdk/src/trace/in_memory_exporter.rs index 099f666a41..68d8a03f2f 100644 --- a/opentelemetry-sdk/src/trace/in_memory_exporter.rs +++ b/opentelemetry-sdk/src/trace/in_memory_exporter.rs @@ -140,7 +140,7 @@ impl SpanExporter for InMemorySpanExporter { result } - fn shutdown(&mut self) -> OTelSdkResult { + fn shutdown(&self) -> OTelSdkResult { self.reset(); Ok(()) } diff --git a/opentelemetry-sdk/src/trace/span_processor.rs b/opentelemetry-sdk/src/trace/span_processor.rs index d2253c1cb9..3fcc4d839a 100644 --- a/opentelemetry-sdk/src/trace/span_processor.rs +++ b/opentelemetry-sdk/src/trace/span_processor.rs @@ -155,7 +155,7 @@ impl SpanProcessor for SimpleSpanProcessor { } fn shutdown(&self) -> OTelSdkResult { - if let Ok(mut exporter) = self.exporter.lock() { + if let Ok(exporter) = self.exporter.lock() { exporter.shutdown() } else { Err(OTelSdkError::InternalFailure( @@ -1089,7 +1089,7 @@ mod tests { Ok(()) } - fn shutdown(&mut self) -> OTelSdkResult { + fn shutdown(&self) -> OTelSdkResult { Ok(()) } fn set_resource(&mut self, resource: &Resource) { diff --git a/opentelemetry-stdout/src/trace/exporter.rs b/opentelemetry-stdout/src/trace/exporter.rs index ea88ca1f95..bdbd637a56 100644 --- a/opentelemetry-stdout/src/trace/exporter.rs +++ b/opentelemetry-stdout/src/trace/exporter.rs @@ -59,7 +59,7 @@ impl opentelemetry_sdk::trace::SpanExporter for SpanExporter { } } - fn shutdown(&mut self) -> OTelSdkResult { + fn shutdown(&self) -> OTelSdkResult { self.is_shutdown.store(true, Ordering::SeqCst); Ok(()) } From 4d15a16bc28935dbeac5ca8b3fdd3e4aa2438d7c Mon Sep 17 00:00:00 2001 From: Shivanshu Raj Shrivastava Date: Tue, 18 Mar 2025 21:09:38 +0530 Subject: [PATCH 2/3] chore: add changelog and todo Signed-off-by: Shivanshu Raj Shrivastava --- opentelemetry-otlp/src/exporter/tonic/trace.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/opentelemetry-otlp/src/exporter/tonic/trace.rs b/opentelemetry-otlp/src/exporter/tonic/trace.rs index be345a3508..4a09e8491b 100644 --- a/opentelemetry-otlp/src/exporter/tonic/trace.rs +++ b/opentelemetry-otlp/src/exporter/tonic/trace.rs @@ -90,6 +90,11 @@ impl SpanExporter for TonicTracesClient { } fn shutdown(&self) -> OTelSdkResult { + // ToDo: as part of https://github.com/open-telemetry/opentelemetry-rust/pull/2812 + // self is no longer mutable due to trait change for span exporter + // the shutdown for gRPC needs to implemented and tracked in + // https://github.com/open-telemetry/opentelemetry-rust/issues/2777 + // // match self.inner.take() { // Some(_) => Ok(()), // Successfully took `inner`, indicating a successful shutdown. // None => Err(OTelSdkError::AlreadyShutdown), // `inner` was already `None`, meaning it's already shut down. From ca48261da5f6e1784071ef980e9c5071d827513b Mon Sep 17 00:00:00 2001 From: Shivanshu Raj Shrivastava Date: Tue, 25 Mar 2025 21:11:47 +0530 Subject: [PATCH 3/3] chore: add changelog Signed-off-by: Shivanshu Raj Shrivastava --- opentelemetry-sdk/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/opentelemetry-sdk/CHANGELOG.md b/opentelemetry-sdk/CHANGELOG.md index dff2dd365a..4f956ac579 100644 --- a/opentelemetry-sdk/CHANGELOG.md +++ b/opentelemetry-sdk/CHANGELOG.md @@ -2,6 +2,10 @@ ## vNext +- **Breaking**: [#2779](https://github.com/open-telemetry/opentelemetry-rust/issues/2779) handle +shutdown for span exporter for `http` exporters, shutdown for `grpc` would be added +separately. + ## 0.29.0 Released 2025-Mar-21