Skip to content

Commit 4e264e6

Browse files
authored
Merge branch 'main' into feat/remove-global-trace-shutdown
2 parents a74db51 + 506a4f9 commit 4e264e6

File tree

19 files changed

+130
-74
lines changed

19 files changed

+130
-74
lines changed

opentelemetry-jaeger-propagator/Cargo.toml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,11 @@ rustdoc-args = ["--cfg", "docsrs"]
2323
opentelemetry = { version = "0.27", default-features = false, features = [
2424
"trace",
2525
], path = "../opentelemetry" }
26+
tracing = {workspace = true, optional = true} # optional for opentelemetry internal logging
2627

2728
[dev-dependencies]
2829
opentelemetry = { features = ["testing"], path = "../opentelemetry" }
2930

3031
[features]
31-
default = []
32+
default = ["internal-logs"]
33+
internal-logs = ["tracing"]

opentelemetry-otlp/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,4 +83,4 @@ reqwest-rustls-webpki-roots = ["reqwest", "opentelemetry-http/reqwest-rustls-web
8383
hyper-client = ["opentelemetry-http/hyper"]
8484

8585
# test
86-
integration-testing = ["tonic", "prost", "tokio/full", "trace"]
86+
integration-testing = ["tonic", "prost", "tokio/full", "trace", "logs"]

opentelemetry-otlp/tests/integration_test/Cargo.toml

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,15 @@ testcontainers = "0.15.0"
1616

1717
[target.'cfg(unix)'.dependencies]
1818
opentelemetry-appender-log = { path = "../../../opentelemetry-appender-log", default-features = false}
19-
opentelemetry-otlp = { path = "../../../opentelemetry-otlp", features = ["tonic", "metrics", "logs"] }
19+
opentelemetry-otlp = { path = "../../../opentelemetry-otlp", default-features = false }
2020
opentelemetry-semantic-conventions = { path = "../../../opentelemetry-semantic-conventions" }
21+
22+
[features]
23+
hyper-client = ["opentelemetry-otlp/hyper-client", "opentelemetry-otlp/http-proto", "opentelemetry-otlp/trace", "opentelemetry-otlp/logs", "opentelemetry-otlp/metrics"]
24+
reqwest-client = ["opentelemetry-otlp/reqwest-client", "opentelemetry-otlp/http-proto", "opentelemetry-otlp/trace","opentelemetry-otlp/logs", "opentelemetry-otlp/metrics"]
25+
reqwest-blocking-client = ["opentelemetry-otlp/reqwest-blocking-client", "opentelemetry-otlp/http-proto", "opentelemetry-otlp/trace","opentelemetry-otlp/logs", "opentelemetry-otlp/metrics"]
26+
tonic-client = ["opentelemetry-otlp/grpc-tonic", "opentelemetry-otlp/trace", "opentelemetry-otlp/logs", "opentelemetry-otlp/metrics"]
27+
28+
# Keep tonic as the default client
29+
default = ["tonic-client"]
30+

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,18 @@ use std::fs::File;
1212
use std::os::unix::fs::MetadataExt;
1313

1414
fn init_logs() -> Result<sdklogs::LoggerProvider, LogError> {
15-
let exporter = LogExporter::builder().with_tonic().build()?;
15+
let exporter_builder = LogExporter::builder();
16+
#[cfg(feature = "tonic-client")]
17+
let exporter_builder = exporter_builder.with_tonic();
18+
#[cfg(not(feature = "tonic-client"))]
19+
#[cfg(any(
20+
feature = "hyper-client",
21+
feature = "reqwest-client",
22+
feature = "reqwest-blocking-client"
23+
))]
24+
let exporter_builder = exporter_builder.with_http();
25+
26+
let exporter = exporter_builder.build()?;
1627

1728
Ok(LoggerProvider::builder()
1829
.with_batch_exporter(exporter, runtime::Tokio)

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

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ use opentelemetry::{
77
trace::{TraceContextExt, Tracer},
88
Key, KeyValue,
99
};
10+
use opentelemetry_otlp::SpanExporter;
11+
1012
use opentelemetry_proto::tonic::trace::v1::TracesData;
1113
use opentelemetry_sdk::{runtime, trace as sdktrace, Resource};
1214
use std::error::Error;
@@ -15,9 +17,19 @@ use std::io::Write;
1517
use std::os::unix::fs::MetadataExt;
1618

1719
fn init_tracer_provider() -> Result<sdktrace::TracerProvider, TraceError> {
18-
let exporter = opentelemetry_otlp::SpanExporter::builder()
19-
.with_tonic()
20-
.build()?;
20+
let exporter_builder = SpanExporter::builder();
21+
#[cfg(feature = "tonic-client")]
22+
let exporter_builder = exporter_builder.with_tonic();
23+
#[cfg(not(feature = "tonic-client"))]
24+
#[cfg(any(
25+
feature = "hyper-client",
26+
feature = "reqwest-client",
27+
feature = "reqwest-blocking-client"
28+
))]
29+
let exporter_builder = exporter_builder.with_http();
30+
31+
let exporter = exporter_builder.build()?;
32+
2133
Ok(opentelemetry_sdk::trace::TracerProvider::builder()
2234
.with_batch_exporter(exporter, runtime::Tokio)
2335
.with_resource(Resource::new(vec![KeyValue::new(

opentelemetry-proto/src/transform/metrics.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -295,8 +295,8 @@ pub mod tonic {
295295
.iter()
296296
.map(|dp| TonicNumberDataPoint {
297297
attributes: dp.attributes.iter().map(Into::into).collect(),
298-
start_time_unix_nano: dp.start_time.map(to_nanos).unwrap_or_default(),
299-
time_unix_nano: dp.time.map(to_nanos).unwrap_or_default(),
298+
start_time_unix_nano: to_nanos(dp.start_time),
299+
time_unix_nano: to_nanos(dp.time),
300300
exemplars: dp.exemplars.iter().map(Into::into).collect(),
301301
flags: TonicDataPointFlags::default() as u32,
302302
value: Some(dp.value.into()),
@@ -319,8 +319,8 @@ pub mod tonic {
319319
.iter()
320320
.map(|dp| TonicNumberDataPoint {
321321
attributes: dp.attributes.iter().map(Into::into).collect(),
322-
start_time_unix_nano: dp.start_time.map(to_nanos).unwrap_or_default(),
323-
time_unix_nano: dp.time.map(to_nanos).unwrap_or_default(),
322+
start_time_unix_nano: to_nanos(dp.start_time),
323+
time_unix_nano: to_nanos(dp.time),
324324
exemplars: dp.exemplars.iter().map(Into::into).collect(),
325325
flags: TonicDataPointFlags::default() as u32,
326326
value: Some(dp.value.into()),

opentelemetry-sdk/CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22

33
## vNext
44

5+
- *Breaking* SimpleLogProcessor modified to be generic over `LogExporter` to
6+
avoid dynamic dispatch to invoke exporter. If you were using
7+
`with_simple_exporter` to add `LogExporter` with SimpleLogProcessor, this is a
8+
transparent change.
9+
[#2338](https://github.com/open-telemetry/opentelemetry-rust/pull/2338)
10+
511
## 0.27.1
612

713
Released 2024-Nov-27

opentelemetry-sdk/src/logs/log_emitter.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ impl Builder {
188188
/// The `LogExporter` that this provider should use.
189189
pub fn with_simple_exporter<T: LogExporter + 'static>(self, exporter: T) -> Self {
190190
let mut processors = self.processors;
191-
processors.push(Box::new(SimpleLogProcessor::new(Box::new(exporter))));
191+
processors.push(Box::new(SimpleLogProcessor::new(exporter)));
192192

193193
Builder { processors, ..self }
194194
}

opentelemetry-sdk/src/logs/log_processor.rs

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -77,21 +77,21 @@ pub trait LogProcessor: Send + Sync + Debug {
7777
/// debugging and testing. For scenarios requiring higher
7878
/// performance/throughput, consider using [BatchLogProcessor].
7979
#[derive(Debug)]
80-
pub struct SimpleLogProcessor {
81-
exporter: Mutex<Box<dyn LogExporter>>,
80+
pub struct SimpleLogProcessor<T: LogExporter> {
81+
exporter: Mutex<T>,
8282
is_shutdown: AtomicBool,
8383
}
8484

85-
impl SimpleLogProcessor {
86-
pub(crate) fn new(exporter: Box<dyn LogExporter>) -> Self {
85+
impl<T: LogExporter> SimpleLogProcessor<T> {
86+
pub(crate) fn new(exporter: T) -> Self {
8787
SimpleLogProcessor {
8888
exporter: Mutex::new(exporter),
8989
is_shutdown: AtomicBool::new(false),
9090
}
9191
}
9292
}
9393

94-
impl LogProcessor for SimpleLogProcessor {
94+
impl<T: LogExporter> LogProcessor for SimpleLogProcessor<T> {
9595
fn emit(&self, record: &mut LogRecord, instrumentation: &InstrumentationScope) {
9696
// noop after shutdown
9797
if self.is_shutdown.load(std::sync::atomic::Ordering::Relaxed) {
@@ -764,7 +764,7 @@ mod tests {
764764
let exporter = MockLogExporter {
765765
resource: Arc::new(Mutex::new(None)),
766766
};
767-
let processor = SimpleLogProcessor::new(Box::new(exporter.clone()));
767+
let processor = SimpleLogProcessor::new(exporter.clone());
768768
let _ = LoggerProvider::builder()
769769
.with_log_processor(processor)
770770
.with_resource(Resource::new(vec![
@@ -832,7 +832,7 @@ mod tests {
832832
let exporter = InMemoryLogExporterBuilder::default()
833833
.keep_records_on_shutdown()
834834
.build();
835-
let processor = SimpleLogProcessor::new(Box::new(exporter.clone()));
835+
let processor = SimpleLogProcessor::new(exporter.clone());
836836

837837
let mut record: LogRecord = Default::default();
838838
let instrumentation: InstrumentationScope = Default::default();
@@ -1013,7 +1013,7 @@ mod tests {
10131013
#[test]
10141014
fn test_simple_processor_sync_exporter_without_runtime() {
10151015
let exporter = InMemoryLogExporterBuilder::default().build();
1016-
let processor = SimpleLogProcessor::new(Box::new(exporter.clone()));
1016+
let processor = SimpleLogProcessor::new(exporter.clone());
10171017

10181018
let mut record: LogRecord = Default::default();
10191019
let instrumentation: InstrumentationScope = Default::default();
@@ -1026,7 +1026,7 @@ mod tests {
10261026
#[tokio::test(flavor = "multi_thread", worker_threads = 1)]
10271027
async fn test_simple_processor_sync_exporter_with_runtime() {
10281028
let exporter = InMemoryLogExporterBuilder::default().build();
1029-
let processor = SimpleLogProcessor::new(Box::new(exporter.clone()));
1029+
let processor = SimpleLogProcessor::new(exporter.clone());
10301030

10311031
let mut record: LogRecord = Default::default();
10321032
let instrumentation: InstrumentationScope = Default::default();
@@ -1039,7 +1039,7 @@ mod tests {
10391039
#[tokio::test(flavor = "multi_thread")]
10401040
async fn test_simple_processor_sync_exporter_with_multi_thread_runtime() {
10411041
let exporter = InMemoryLogExporterBuilder::default().build();
1042-
let processor = Arc::new(SimpleLogProcessor::new(Box::new(exporter.clone())));
1042+
let processor = Arc::new(SimpleLogProcessor::new(exporter.clone()));
10431043

10441044
let mut handles = vec![];
10451045
for _ in 0..10 {
@@ -1062,7 +1062,7 @@ mod tests {
10621062
#[tokio::test(flavor = "current_thread")]
10631063
async fn test_simple_processor_sync_exporter_with_current_thread_runtime() {
10641064
let exporter = InMemoryLogExporterBuilder::default().build();
1065-
let processor = SimpleLogProcessor::new(Box::new(exporter.clone()));
1065+
let processor = SimpleLogProcessor::new(exporter.clone());
10661066

10671067
let mut record: LogRecord = Default::default();
10681068
let instrumentation: InstrumentationScope = Default::default();
@@ -1109,7 +1109,7 @@ mod tests {
11091109
// Use `catch_unwind` to catch the panic caused by missing Tokio runtime
11101110
let result = std::panic::catch_unwind(|| {
11111111
let exporter = LogExporterThatRequiresTokio::new();
1112-
let processor = SimpleLogProcessor::new(Box::new(exporter.clone()));
1112+
let processor = SimpleLogProcessor::new(exporter.clone());
11131113

11141114
let mut record: LogRecord = Default::default();
11151115
let instrumentation: InstrumentationScope = Default::default();
@@ -1158,7 +1158,7 @@ mod tests {
11581158
// tasks nor the exporter can proceed.
11591159
async fn test_simple_processor_async_exporter_with_all_runtime_worker_threads_blocked() {
11601160
let exporter = LogExporterThatRequiresTokio::new();
1161-
let processor = Arc::new(SimpleLogProcessor::new(Box::new(exporter.clone())));
1161+
let processor = Arc::new(SimpleLogProcessor::new(exporter.clone()));
11621162

11631163
let concurrent_emit = 4; // number of worker threads
11641164

@@ -1189,7 +1189,7 @@ mod tests {
11891189
// tasks occupy the runtime.
11901190
async fn test_simple_processor_async_exporter_with_runtime() {
11911191
let exporter = LogExporterThatRequiresTokio::new();
1192-
let processor = SimpleLogProcessor::new(Box::new(exporter.clone()));
1192+
let processor = SimpleLogProcessor::new(exporter.clone());
11931193

11941194
let mut record: LogRecord = Default::default();
11951195
let instrumentation: InstrumentationScope = Default::default();
@@ -1208,7 +1208,7 @@ mod tests {
12081208
async fn test_simple_processor_async_exporter_with_multi_thread_runtime() {
12091209
let exporter = LogExporterThatRequiresTokio::new();
12101210

1211-
let processor = SimpleLogProcessor::new(Box::new(exporter.clone()));
1211+
let processor = SimpleLogProcessor::new(exporter.clone());
12121212

12131213
let mut record: LogRecord = Default::default();
12141214
let instrumentation: InstrumentationScope = Default::default();
@@ -1228,7 +1228,7 @@ mod tests {
12281228
async fn test_simple_processor_async_exporter_with_current_thread_runtime() {
12291229
let exporter = LogExporterThatRequiresTokio::new();
12301230

1231-
let processor = SimpleLogProcessor::new(Box::new(exporter.clone()));
1231+
let processor = SimpleLogProcessor::new(exporter.clone());
12321232

12331233
let mut record: LogRecord = Default::default();
12341234
let instrumentation: InstrumentationScope = Default::default();

opentelemetry-sdk/src/logs/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ mod tests {
4949
let exporter: InMemoryLogExporter = InMemoryLogExporter::default();
5050
let logger_provider = LoggerProvider::builder()
5151
.with_resource(resource.clone())
52-
.with_log_processor(SimpleLogProcessor::new(Box::new(exporter.clone())))
52+
.with_log_processor(SimpleLogProcessor::new(exporter.clone()))
5353
.build();
5454

5555
// Act

opentelemetry-sdk/src/metrics/data/mod.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,9 @@ pub struct DataPoint<T> {
9797
/// time series.
9898
pub attributes: Vec<KeyValue>,
9999
/// The time when the time series was started.
100-
pub start_time: Option<SystemTime>,
100+
pub start_time: SystemTime,
101101
/// The time when the time series was recorded.
102-
pub time: Option<SystemTime>,
102+
pub time: SystemTime,
103103
/// The value of this data point.
104104
pub value: T,
105105
/// The sampled [Exemplar]s collected during the time series.
@@ -338,8 +338,8 @@ mod tests {
338338
fn validate_cloning_data_points() {
339339
let data_type = DataPoint {
340340
attributes: vec![KeyValue::new("key", "value")],
341-
start_time: Some(std::time::SystemTime::now()),
342-
time: Some(std::time::SystemTime::now()),
341+
start_time: std::time::SystemTime::now(),
342+
time: std::time::SystemTime::now(),
343343
value: 0u32,
344344
exemplars: vec![Exemplar {
345345
filtered_attributes: vec![],

opentelemetry-sdk/src/metrics/internal/aggregate.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -224,8 +224,8 @@ mod tests {
224224
let mut a = Gauge {
225225
data_points: vec![DataPoint {
226226
attributes: vec![KeyValue::new("a", 1)],
227-
start_time: Some(SystemTime::now()),
228-
time: Some(SystemTime::now()),
227+
start_time: SystemTime::now(),
228+
time: SystemTime::now(),
229229
value: 1u64,
230230
exemplars: vec![],
231231
}],
@@ -251,15 +251,15 @@ mod tests {
251251
data_points: vec![
252252
DataPoint {
253253
attributes: vec![KeyValue::new("a1", 1)],
254-
start_time: Some(SystemTime::now()),
255-
time: Some(SystemTime::now()),
254+
start_time: SystemTime::now(),
255+
time: SystemTime::now(),
256256
value: 1u64,
257257
exemplars: vec![],
258258
},
259259
DataPoint {
260260
attributes: vec![KeyValue::new("a2", 1)],
261-
start_time: Some(SystemTime::now()),
262-
time: Some(SystemTime::now()),
261+
start_time: SystemTime::now(),
262+
time: SystemTime::now(),
263263
value: 2u64,
264264
exemplars: vec![],
265265
},
@@ -294,15 +294,15 @@ mod tests {
294294
data_points: vec![
295295
DataPoint {
296296
attributes: vec![KeyValue::new("a1", 1)],
297-
start_time: Some(SystemTime::now()),
298-
time: Some(SystemTime::now()),
297+
start_time: SystemTime::now(),
298+
time: SystemTime::now(),
299299
value: 1u64,
300300
exemplars: vec![],
301301
},
302302
DataPoint {
303303
attributes: vec![KeyValue::new("a2", 1)],
304-
start_time: Some(SystemTime::now()),
305-
time: Some(SystemTime::now()),
304+
start_time: SystemTime::now(),
305+
time: SystemTime::now(),
306306
value: 2u64,
307307
exemplars: vec![],
308308
},

opentelemetry-sdk/src/metrics/internal/last_value.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@ impl<T: Number> LastValue<T> {
6666
self.value_map
6767
.collect_and_reset(dest, |attributes, aggr| DataPoint {
6868
attributes,
69-
start_time: Some(prev_start),
70-
time: Some(t),
69+
start_time: prev_start,
70+
time: t,
7171
value: aggr.value.get_value(),
7272
exemplars: vec![],
7373
});
@@ -79,8 +79,8 @@ impl<T: Number> LastValue<T> {
7979
self.value_map
8080
.collect_readonly(dest, |attributes, aggr| DataPoint {
8181
attributes,
82-
start_time: Some(prev_start),
83-
time: Some(t),
82+
start_time: prev_start,
83+
time: t,
8484
value: aggr.value.get_value(),
8585
exemplars: vec![],
8686
});

opentelemetry-sdk/src/metrics/internal/precomputed_sum.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,8 @@ impl<T: Number> PrecomputedSum<T> {
6868
let delta = value - *reported.get(&attributes).unwrap_or(&T::default());
6969
DataPoint {
7070
attributes,
71-
start_time: Some(prev_start),
72-
time: Some(t),
71+
start_time: prev_start,
72+
time: t,
7373
value: delta,
7474
exemplars: vec![],
7575
}
@@ -109,8 +109,8 @@ impl<T: Number> PrecomputedSum<T> {
109109
self.value_map
110110
.collect_readonly(&mut s_data.data_points, |attributes, aggr| DataPoint {
111111
attributes,
112-
start_time: Some(prev_start),
113-
time: Some(t),
112+
start_time: prev_start,
113+
time: t,
114114
value: aggr.value.get_value(),
115115
exemplars: vec![],
116116
});

0 commit comments

Comments
 (0)