Skip to content

Commit 6649531

Browse files
authored
Merge branch 'main' into cijothomas/028migration
2 parents d26f7cb + 61e539f commit 6649531

File tree

27 files changed

+274
-256
lines changed

27 files changed

+274
-256
lines changed

opentelemetry-appender-tracing/benches/logs.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
use criterion::{criterion_group, criterion_main, Criterion};
1717
use opentelemetry::InstrumentationScope;
1818
use opentelemetry_appender_tracing::layer as tracing_layer;
19-
use opentelemetry_sdk::logs::LogResult;
19+
use opentelemetry_sdk::error::OTelSdkResult;
2020
use opentelemetry_sdk::logs::{LogBatch, LogExporter};
2121
use opentelemetry_sdk::logs::{LogProcessor, SdkLogRecord, SdkLoggerProvider};
2222
use opentelemetry_sdk::Resource;
@@ -36,8 +36,8 @@ impl LogExporter for NoopExporter {
3636
fn export(
3737
&self,
3838
_batch: LogBatch<'_>,
39-
) -> impl std::future::Future<Output = LogResult<()>> + Send {
40-
async { LogResult::Ok(()) }
39+
) -> impl std::future::Future<Output = OTelSdkResult> + Send {
40+
async { OTelSdkResult::Ok(()) }
4141
}
4242

4343
fn event_enabled(&self, _: opentelemetry::logs::Severity, _: &str, _: &str) -> bool {
@@ -61,11 +61,11 @@ impl<E: LogExporter> LogProcessor for NoopProcessor<E> {
6161
// no-op
6262
}
6363

64-
fn force_flush(&self) -> LogResult<()> {
64+
fn force_flush(&self) -> OTelSdkResult {
6565
Ok(())
6666
}
6767

68-
fn shutdown(&self) -> LogResult<()> {
68+
fn shutdown(&self) -> OTelSdkResult {
6969
Ok(())
7070
}
7171

opentelemetry-appender-tracing/src/layer.rs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -233,9 +233,10 @@ mod tests {
233233
use opentelemetry::trace::TracerProvider;
234234
use opentelemetry::trace::{TraceContextExt, TraceFlags, Tracer};
235235
use opentelemetry::{logs::AnyValue, Key};
236+
use opentelemetry_sdk::error::OTelSdkResult;
236237
use opentelemetry_sdk::logs::InMemoryLogExporter;
237238
use opentelemetry_sdk::logs::{LogBatch, LogExporter};
238-
use opentelemetry_sdk::logs::{LogResult, SdkLogRecord, SdkLoggerProvider};
239+
use opentelemetry_sdk::logs::{SdkLogRecord, SdkLoggerProvider};
239240
use opentelemetry_sdk::trace::{Sampler, SdkTracerProvider};
240241
use tracing::{error, warn};
241242
use tracing_subscriber::prelude::__tracing_subscriber_SubscriberExt;
@@ -269,7 +270,7 @@ mod tests {
269270
fn export(
270271
&self,
271272
_batch: LogBatch<'_>,
272-
) -> impl std::future::Future<Output = LogResult<()>> + Send {
273+
) -> impl std::future::Future<Output = OTelSdkResult> + Send {
273274
async {
274275
// This will cause a deadlock as the export itself creates a log
275276
// while still within the lock of the SimpleLogProcessor.
@@ -345,7 +346,7 @@ mod tests {
345346

346347
// Act
347348
error!(name: "my-event-name", target: "my-system", event_id = 20, user_name = "otel", user_email = "[email protected]");
348-
logger_provider.force_flush();
349+
assert!(logger_provider.force_flush().is_ok());
349350

350351
// Assert TODO: move to helper methods
351352
let exported_logs = exporter
@@ -439,7 +440,7 @@ mod tests {
439440
(trace_id, span_id)
440441
});
441442

442-
logger_provider.force_flush();
443+
assert!(logger_provider.force_flush().is_ok());
443444

444445
// Assert TODO: move to helper methods
445446
let exported_logs = exporter
@@ -553,7 +554,7 @@ mod tests {
553554
});
554555
});
555556

556-
logger_provider.force_flush();
557+
assert!(logger_provider.force_flush().is_ok());
557558

558559
let logs = exporter.get_emitted_logs().expect("No emitted logs");
559560
assert_eq!(logs.len(), 2);
@@ -593,7 +594,7 @@ mod tests {
593594

594595
// Act
595596
log::error!(target: "my-system", "log from log crate");
596-
logger_provider.force_flush();
597+
assert!(logger_provider.force_flush().is_ok());
597598

598599
// Assert TODO: move to helper methods
599600
let exported_logs = exporter
@@ -672,7 +673,7 @@ mod tests {
672673
(trace_id, span_id)
673674
});
674675

675-
logger_provider.force_flush();
676+
assert!(logger_provider.force_flush().is_ok());
676677

677678
// Assert TODO: move to helper methods
678679
let exported_logs = exporter

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

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,67 @@
1-
use std::sync::Arc;
2-
1+
use super::OtlpHttpClient;
32
use http::{header::CONTENT_TYPE, Method};
43
use opentelemetry::otel_debug;
4+
use opentelemetry_sdk::error::{OTelSdkError, OTelSdkResult};
55
use opentelemetry_sdk::logs::{LogBatch, LogExporter};
6-
use opentelemetry_sdk::logs::{LogError, LogResult};
7-
8-
use super::OtlpHttpClient;
96

107
impl LogExporter for OtlpHttpClient {
118
#[allow(clippy::manual_async_fn)]
129
fn export(
1310
&self,
1411
batch: LogBatch<'_>,
15-
) -> impl std::future::Future<Output = LogResult<()>> + Send {
12+
) -> impl std::future::Future<Output = OTelSdkResult> + Send {
1613
async move {
1714
let client = self
1815
.client
1916
.lock()
20-
.map_err(|e| LogError::Other(e.to_string().into()))
21-
.and_then(|g| match &*g {
22-
Some(client) => Ok(Arc::clone(client)),
23-
_ => Err(LogError::Other("exporter is already shut down".into())),
24-
})?;
17+
.map_err(|e| OTelSdkError::InternalFailure(format!("Mutex lock failed: {}", e)))?
18+
.clone()
19+
.ok_or(OTelSdkError::AlreadyShutdown)?;
20+
21+
let (body, content_type) = self
22+
.build_logs_export_body(batch)
23+
.map_err(|e| OTelSdkError::InternalFailure(e.to_string()))?;
2524

26-
let (body, content_type) = { self.build_logs_export_body(batch)? };
2725
let mut request = http::Request::builder()
2826
.method(Method::POST)
2927
.uri(&self.collector_endpoint)
3028
.header(CONTENT_TYPE, content_type)
3129
.body(body.into())
32-
.map_err(|e| crate::Error::RequestFailed(Box::new(e)))?;
30+
.map_err(|e| OTelSdkError::InternalFailure(e.to_string()))?;
3331

3432
for (k, v) in &self.headers {
3533
request.headers_mut().insert(k.clone(), v.clone());
3634
}
3735

3836
let request_uri = request.uri().to_string();
3937
otel_debug!(name: "HttpLogsClient.CallingExport");
40-
let response = client.send_bytes(request).await?;
41-
38+
let response = client
39+
.send_bytes(request)
40+
.await
41+
.map_err(|e| OTelSdkError::InternalFailure(format!("{e:?}")))?;
4242
if !response.status().is_success() {
4343
let error = format!(
4444
"OpenTelemetry logs export failed. Url: {}, Status Code: {}, Response: {:?}",
45-
response.status().as_u16(),
4645
request_uri,
46+
response.status().as_u16(),
4747
response.body()
4848
);
49-
return Err(LogError::Other(error.into()));
49+
return Err(OTelSdkError::InternalFailure(error));
5050
}
51-
5251
Ok(())
5352
}
5453
}
5554

56-
fn shutdown(&mut self) {
57-
let _ = self.client.lock().map(|mut c| c.take());
55+
fn shutdown(&mut self) -> OTelSdkResult {
56+
let mut client_guard = self.client.lock().map_err(|e| {
57+
OTelSdkError::InternalFailure(format!("Failed to acquire client lock: {}", e))
58+
})?;
59+
60+
if client_guard.take().is_none() {
61+
return Err(OTelSdkError::AlreadyShutdown);
62+
}
63+
64+
Ok(())
5865
}
5966

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

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

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ use opentelemetry::otel_debug;
33
use opentelemetry_proto::tonic::collector::logs::v1::{
44
logs_service_client::LogsServiceClient, ExportLogsServiceRequest,
55
};
6+
use opentelemetry_sdk::error::{OTelSdkError, OTelSdkResult};
67
use opentelemetry_sdk::logs::{LogBatch, LogExporter};
7-
use opentelemetry_sdk::logs::{LogError, LogResult};
88
use tonic::{codegen::CompressionEncoding, service::Interceptor, transport::Channel, Request};
99

1010
use opentelemetry_proto::transform::logs::tonic::group_logs_by_resource_and_scope;
@@ -60,7 +60,7 @@ impl LogExporter for TonicLogsClient {
6060
fn export(
6161
&self,
6262
batch: LogBatch<'_>,
63-
) -> impl std::future::Future<Output = LogResult<()>> + Send {
63+
) -> impl std::future::Future<Output = OTelSdkResult> + Send {
6464
async move {
6565
let (mut client, metadata, extensions) = match &self.inner {
6666
Some(inner) => {
@@ -69,11 +69,11 @@ impl LogExporter for TonicLogsClient {
6969
.lock()
7070
.await // tokio::sync::Mutex doesn't return a poisoned error, so we can safely use the interceptor here
7171
.call(Request::new(()))
72-
.map_err(|e| LogError::Other(Box::new(e)))?
72+
.map_err(|e| OTelSdkError::InternalFailure(format!("error: {:?}", e)))?
7373
.into_parts();
7474
(inner.client.clone(), m, e)
7575
}
76-
None => return Err(LogError::Other("exporter is already shut down".into())),
76+
None => return Err(OTelSdkError::AlreadyShutdown),
7777
};
7878

7979
let resource_logs = group_logs_by_resource_and_scope(batch, &self.resource);
@@ -87,13 +87,16 @@ impl LogExporter for TonicLogsClient {
8787
ExportLogsServiceRequest { resource_logs },
8888
))
8989
.await
90-
.map_err(crate::Error::from)?;
90+
.map_err(|e| OTelSdkError::InternalFailure(format!("export error: {:?}", e)))?;
9191
Ok(())
9292
}
9393
}
9494

95-
fn shutdown(&mut self) {
96-
let _ = self.inner.take();
95+
fn shutdown(&mut self) -> OTelSdkResult {
96+
match self.inner.take() {
97+
Some(_) => Ok(()), // Successfully took `inner`, indicating a successful shutdown.
98+
None => Err(OTelSdkError::AlreadyShutdown), // `inner` was already `None`, meaning it's already shut down.
99+
}
97100
}
98101

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

opentelemetry-otlp/src/logs.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,7 @@
66
use opentelemetry::otel_debug;
77
use std::fmt::Debug;
88

9-
use opentelemetry_sdk::logs::LogResult;
10-
11-
use opentelemetry_sdk::logs::LogBatch;
9+
use opentelemetry_sdk::{error::OTelSdkResult, logs::LogBatch};
1210

1311
use crate::{HasExportConfig, NoExporterBuilderSet};
1412

@@ -145,7 +143,7 @@ impl opentelemetry_sdk::logs::LogExporter for LogExporter {
145143
fn export(
146144
&self,
147145
batch: LogBatch<'_>,
148-
) -> impl std::future::Future<Output = LogResult<()>> + Send {
146+
) -> impl std::future::Future<Output = OTelSdkResult> + Send {
149147
async move {
150148
match &self.client {
151149
#[cfg(feature = "grpc-tonic")]

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ async fn logs_tokio_helper(
8686
.await
8787
.unwrap();
8888
} else {
89-
let _ = logger_provider.shutdown();
89+
assert!(logger_provider.shutdown().is_ok());
9090
}
9191
tokio::time::sleep(Duration::from_secs(5)).await;
9292
assert_logs_results_contains(test_utils::LOGS_FILE, expected_uuid.as_str())?;
@@ -126,7 +126,7 @@ fn logs_non_tokio_helper(is_simple: bool, init_logs_inside_rt: bool) -> Result<(
126126
);
127127
}
128128

129-
let _ = logger_provider.shutdown();
129+
assert!(logger_provider.shutdown().is_ok());
130130
std::thread::sleep(Duration::from_secs(5));
131131
assert_logs_results_contains(test_utils::LOGS_FILE, expected_uuid.as_str())?;
132132
Ok(())

opentelemetry-proto/src/transform/logs.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -225,8 +225,9 @@ mod tests {
225225
use opentelemetry::logs::LoggerProvider;
226226
use opentelemetry::time::now;
227227
use opentelemetry::InstrumentationScope;
228+
use opentelemetry_sdk::error::OTelSdkResult;
228229
use opentelemetry_sdk::logs::LogProcessor;
229-
use opentelemetry_sdk::logs::{LogResult, SdkLoggerProvider};
230+
use opentelemetry_sdk::logs::SdkLoggerProvider;
230231
use opentelemetry_sdk::{logs::LogBatch, logs::SdkLogRecord, Resource};
231232

232233
#[derive(Debug)]
@@ -235,11 +236,11 @@ mod tests {
235236
impl LogProcessor for MockProcessor {
236237
fn emit(&self, _record: &mut SdkLogRecord, _instrumentation: &InstrumentationScope) {}
237238

238-
fn force_flush(&self) -> LogResult<()> {
239+
fn force_flush(&self) -> OTelSdkResult {
239240
Ok(())
240241
}
241242

242-
fn shutdown(&self) -> LogResult<()> {
243+
fn shutdown(&self) -> OTelSdkResult {
243244
Ok(())
244245
}
245246
}

opentelemetry-sdk/CHANGELOG.md

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -386,7 +386,7 @@ let processor = BatchSpanProcessor::builder(exporter)
386386
- The `opentelemetry_otlp` API, via `.with_tonic().with_timeout()` or `.with_http().with_timeout()`.
387387

388388
- **Breaking**
389-
- The public API changes in the Tracing:
389+
- The public API changes in the Trace SDK:
390390
- Before:
391391
```rust
392392
fn SpanExporter::export(&mut self, batch: Vec<SpanData>) -> BoxFuture<'static, ExportResult>;
@@ -400,7 +400,7 @@ let processor = BatchSpanProcessor::builder(exporter)
400400
fn SpanExporter::export(&mut self, batch: Vec<SpanData>) -> BoxFuture<'static, OTelSdkResult>;
401401
fn SpanExporter::shutdown(&mut self) -> OTelSdkResult;
402402
fn SpanExporter::force_flush(&mut self) -> BoxFuture<'static, OTelSdkResult>
403-
fn TraerProvider::shutdown(&self) -> OTelSdkResult;
403+
fn TracerProvider::shutdown(&self) -> OTelSdkResult;
404404
fn TracerProvider::force_flush(&self) -> OTelSdkResult;
405405
```
406406
- **Breaking** Renamed `LoggerProvider`, `Logger` and `LogRecord' to
@@ -413,6 +413,23 @@ let processor = BatchSpanProcessor::builder(exporter)
413413
type-aliased to `SdkTracer` to keep back-compat with tracing-opentelemetry.
414414
[#2614](https://github.com/open-telemetry/opentelemetry-rust/pull/2614)
415415
416+
- **Breaking**
417+
- The public API changes in the Logs SDK:
418+
- Before:
419+
```rust
420+
fn LogExporter::export(&self, _batch: LogBatch<'_>,) -> impl std::future::Future<Output = LogResult<()>> + Send
421+
fn LogExporter::shutdown(&mut self);
422+
fn LoggerProvider::shutdown(&self) -> LogResult<()>
423+
fn LoggerProvider::force_flush(&self) -> Vec<LogResult<()>>
424+
```
425+
- After:
426+
```rust
427+
fn LogExporter::export(&self, _batch: LogBatch<'_>,) -> impl std::future::Future<Output = OTelSdkResult<()>> + Send
428+
fn LogExporter::shutdown(&mut self) -> OTelSdkResult;
429+
fn LoggerProvider::shutdown(&self) -> OTelSdkResult;
430+
fn LoggerProvider::force_flush(&self) -> OTelSdkResult;
431+
```
432+
416433
## 0.27.1
417434

418435
Released 2024-Nov-27

opentelemetry-sdk/benches/log.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,8 @@ use opentelemetry::logs::{AnyValue, LogRecord as _, Logger, LoggerProvider, Seve
2424
use opentelemetry::trace::Tracer;
2525
use opentelemetry::trace::TracerProvider;
2626
use opentelemetry::{InstrumentationScope, Key};
27-
use opentelemetry_sdk::logs::{
28-
LogProcessor, LogResult, SdkLogRecord, SdkLogger, SdkLoggerProvider,
29-
};
27+
use opentelemetry_sdk::error::OTelSdkResult;
28+
use opentelemetry_sdk::logs::{LogProcessor, SdkLogRecord, SdkLogger, SdkLoggerProvider};
3029
use opentelemetry_sdk::trace::{Sampler, SdkTracerProvider};
3130

3231
#[derive(Debug)]
@@ -35,11 +34,11 @@ struct NoopProcessor;
3534
impl LogProcessor for NoopProcessor {
3635
fn emit(&self, _data: &mut SdkLogRecord, _scope: &InstrumentationScope) {}
3736

38-
fn force_flush(&self) -> LogResult<()> {
37+
fn force_flush(&self) -> OTelSdkResult {
3938
Ok(())
4039
}
4140

42-
fn shutdown(&self) -> LogResult<()> {
41+
fn shutdown(&self) -> OTelSdkResult {
4342
Ok(())
4443
}
4544
}

0 commit comments

Comments
 (0)