Skip to content

Commit 8f3b8c0

Browse files
committed
chore: modify LogExporter interface to support returning failure
1 parent 506a4f9 commit 8f3b8c0

File tree

6 files changed

+25
-9
lines changed

6 files changed

+25
-9
lines changed

opentelemetry-otlp/src/exporter/http/logs.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,9 @@ impl LogExporter for OtlpHttpClient {
4747
Ok(())
4848
}
4949

50-
fn shutdown(&mut self) {
51-
let _ = self.client.lock().map(|mut c| c.take());
50+
fn shutdown(&mut self) -> LogResult<()> {
51+
let _ = self.client.lock()?.take();
52+
Ok(())
5253
}
5354

5455
fn set_resource(&mut self, resource: &opentelemetry_sdk::Resource) {

opentelemetry-otlp/src/exporter/tonic/logs.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,9 @@ impl LogExporter for TonicLogsClient {
8181
Ok(())
8282
}
8383

84-
fn shutdown(&mut self) {
84+
fn shutdown(&mut self) -> LogResult<()> {
8585
let _ = self.inner.take();
86+
Ok(())
8687
}
8788

8889
fn set_resource(&mut self, resource: &opentelemetry_sdk::Resource) {

opentelemetry-sdk/src/export/logs/mod.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,12 @@ pub trait LogExporter: Send + Sync + Debug {
8282
/// `Ok(())`) or an error (`Err(LogError)`) if the export operation failed.
8383
///
8484
async fn export(&mut self, batch: LogBatch<'_>) -> LogResult<()>;
85+
8586
/// Shuts down the exporter.
86-
fn shutdown(&mut self) {}
87+
fn shutdown(&mut self) -> LogResult<()> {
88+
Ok(())
89+
}
90+
8791
#[cfg(feature = "spec_unstable_logs_enabled")]
8892
/// Chek if logs are enabled.
8993
fn event_enabled(&self, _level: Severity, _target: &str, _name: &str) -> bool {

opentelemetry-sdk/src/logs/log_processor.rs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ impl<T: LogExporter> LogProcessor for SimpleLogProcessor<T> {
136136
self.is_shutdown
137137
.store(true, std::sync::atomic::Ordering::Relaxed);
138138
if let Ok(mut exporter) = self.exporter.lock() {
139-
exporter.shutdown();
139+
exporter.shutdown()?;
140140
Ok(())
141141
} else {
142142
Err(LogError::MutexPoisoned("SimpleLogProcessor".into()))
@@ -299,7 +299,13 @@ impl<R: RuntimeChannel> BatchLogProcessor<R> {
299299
)
300300
.await;
301301

302-
exporter.shutdown();
302+
if let Err(e) = exporter.shutdown() {
303+
otel_warn!(
304+
name: "BatchLogProcessor.Shutdown.Failed",
305+
message = "failed shutting down exporter cleanly",
306+
error = format!("{:?}", e)
307+
);
308+
};
303309

304310
if let Err(send_error) = ch.send(result) {
305311
otel_debug!(
@@ -590,7 +596,9 @@ mod tests {
590596
Ok(())
591597
}
592598

593-
fn shutdown(&mut self) {}
599+
fn shutdown(&mut self) -> LogResult<()> {
600+
Ok(())
601+
}
594602

595603
fn set_resource(&mut self, resource: &Resource) {
596604
self.resource

opentelemetry-sdk/src/testing/logs/in_memory_exporter.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,10 +195,11 @@ impl LogExporter for InMemoryLogExporter {
195195
Ok(())
196196
}
197197

198-
fn shutdown(&mut self) {
198+
fn shutdown(&mut self) -> LogResult<()> {
199199
if self.should_reset_on_shutdown {
200200
self.reset();
201201
}
202+
Ok(())
202203
}
203204

204205
fn set_resource(&mut self, resource: &Resource) {

opentelemetry-stdout/src/logs/exporter.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,9 @@ impl opentelemetry_sdk::export::logs::LogExporter for LogExporter {
5656
}
5757
}
5858

59-
fn shutdown(&mut self) {
59+
fn shutdown(&mut self) -> LogResult<()> {
6060
self.is_shutdown.store(true, atomic::Ordering::SeqCst);
61+
Ok(())
6162
}
6263

6364
fn set_resource(&mut self, res: &opentelemetry_sdk::Resource) {

0 commit comments

Comments
 (0)