Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: Prepare 0.29 release #2844

Merged
merged 9 commits into from
Mar 22, 2025
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions opentelemetry-appender-log/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,17 @@

## vNext

## 0.29.0

Released 2025-Mar-21

- Similar to the `opentelemetry-appender-tracing` fix [2658](https://github.com/open-telemetry/opentelemetry-rust/issues/2658)
InstrumentationScope(Logger) used by the appender now uses an empty ("") named Logger.
Previously, a Logger with name and version of the crate was used.
Receivers (processors, exporters) are expected to use `LogRecord.target()` as scope name.
This is already done in OTLP Exporters, so this change should be transparent to most users.
- Update `opentelemetry` dependency version to 0.29.
- Update `opentelemetry-semantic-conventions` dependency version to 0.29.

## 0.28.0

Expand Down
6 changes: 3 additions & 3 deletions opentelemetry-appender-log/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "opentelemetry-appender-log"
version = "0.28.0"
version = "0.29.0"
description = "An OpenTelemetry appender for the log crate"
homepage = "https://github.com/open-telemetry/opentelemetry-rust/tree/main/opentelemetry-appender-log"
repository = "https://github.com/open-telemetry/opentelemetry-rust/tree/main/opentelemetry-appender-log"
Expand All @@ -11,12 +11,12 @@ rust-version = "1.75.0"
edition = "2021"

[dependencies]
opentelemetry = { version = "0.28", path = "../opentelemetry", features = [
opentelemetry = { version = "0.29", path = "../opentelemetry", features = [
"logs",
] }
log = { workspace = true, features = ["kv", "std"] }
serde = { workspace = true, optional = true, features = ["std"] }
opentelemetry-semantic-conventions = { version = "0.28", path = "../opentelemetry-semantic-conventions", optional = true, features = [
opentelemetry-semantic-conventions = { version = "0.29", path = "../opentelemetry-semantic-conventions", optional = true, features = [
"semconv_experimental",
] }

Expand Down
5 changes: 5 additions & 0 deletions opentelemetry-appender-tracing/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

## vNext

## 0.29.0

Released 2025-Mar-21

Fixes [1682](https://github.com/open-telemetry/opentelemetry-rust/issues/1682).
"spec_unstable_logs_enabled" feature now do not suppress logs for other layers.

Expand Down Expand Up @@ -53,6 +57,7 @@ of string.
instead of previously reporting the user provided attribute "error".
`error!(....error = &OTelSdkError::AlreadyShutdown as &dyn std::error::Error...)`
- perf - small perf improvement by avoiding string allocation of `target`
- Update `opentelemetry` dependency version to 0.29.

## 0.28.1

Expand Down
7 changes: 4 additions & 3 deletions opentelemetry-appender-tracing/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,12 @@ rust-version = "1.75.0"

[dependencies]
log = { workspace = true, optional = true }
opentelemetry = { version = "0.28", path = "../opentelemetry", features = ["logs"] }
opentelemetry = { version = "0.29", path = "../opentelemetry", features = ["logs"] }
tracing = { workspace = true, features = ["std"]}
tracing-core = { workspace = true }
tracing-log = { workspace = true, optional = true }
tracing-subscriber = { workspace = true, features = ["registry", "std"] }
tracing-opentelemetry = { workspace = true, optional = true }
# tracing-opentelemetry = { workspace = true, optional = true }

[dev-dependencies]
log = { workspace = true }
Expand All @@ -36,7 +36,8 @@ pprof = { version = "0.14", features = ["flamegraph", "criterion"] }
default = []
experimental_metadata_attributes = ["dep:tracing-log"]
spec_unstable_logs_enabled = ["opentelemetry/spec_unstable_logs_enabled"]
experimental_use_tracing_span_context = ["tracing-opentelemetry"]
# TODO - Enable this in 0.29.1 (once tracing-opentelemetry v0.30 is released)
# experimental_use_tracing_span_context = ["tracing-opentelemetry"]


[[bench]]
Expand Down
132 changes: 66 additions & 66 deletions opentelemetry-appender-tracing/src/layer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -244,25 +244,25 @@ where
// Visit fields.
event.record(&mut visitor);

#[cfg(feature = "experimental_use_tracing_span_context")]
if let Some(span) = _ctx.event_span(event) {
use tracing_opentelemetry::OtelData;
let opt_span_id = span
.extensions()
.get::<OtelData>()
.and_then(|otd| otd.builder.span_id);

let opt_trace_id = span.scope().last().and_then(|root_span| {
root_span
.extensions()
.get::<OtelData>()
.and_then(|otd| otd.builder.trace_id)
});

if let Some((trace_id, span_id)) = opt_trace_id.zip(opt_span_id) {
log_record.set_trace_context(trace_id, span_id, None);
}
}
// #[cfg(feature = "experimental_use_tracing_span_context")]
// if let Some(span) = _ctx.event_span(event) {
// use tracing_opentelemetry::OtelData;
// let opt_span_id = span
// .extensions()
// .get::<OtelData>()
// .and_then(|otd| otd.builder.span_id);

// let opt_trace_id = span.scope().last().and_then(|root_span| {
// root_span
// .extensions()
// .get::<OtelData>()
// .and_then(|otd| otd.builder.trace_id)
// });

// if let Some((trace_id, span_id)) = opt_trace_id.zip(opt_span_id) {
// log_record.set_trace_context(trace_id, span_id, None);
// }
// }

//emit record
self.logger.emit(log_record);
Expand Down Expand Up @@ -673,66 +673,66 @@ mod tests {
}
}

#[cfg(feature = "experimental_use_tracing_span_context")]
#[test]
fn tracing_appender_inside_tracing_crate_context() {
use opentelemetry_sdk::trace::InMemorySpanExporterBuilder;
// #[cfg(feature = "experimental_use_tracing_span_context")]
// #[test]
// fn tracing_appender_inside_tracing_crate_context() {
// use opentelemetry_sdk::trace::InMemorySpanExporterBuilder;

// Arrange
let exporter: InMemoryLogExporter = InMemoryLogExporter::default();
let logger_provider = SdkLoggerProvider::builder()
.with_simple_exporter(exporter.clone())
.build();
// // Arrange
// let exporter: InMemoryLogExporter = InMemoryLogExporter::default();
// let logger_provider = SdkLoggerProvider::builder()
// .with_simple_exporter(exporter.clone())
// .build();

// setup tracing layer to compare trace/span IDs against
let span_exporter = InMemorySpanExporterBuilder::new().build();
let tracer_provider = SdkTracerProvider::builder()
.with_simple_exporter(span_exporter.clone())
.build();
let tracer = tracer_provider.tracer("test-tracer");
// // setup tracing layer to compare trace/span IDs against
// let span_exporter = InMemorySpanExporterBuilder::new().build();
// let tracer_provider = SdkTracerProvider::builder()
// .with_simple_exporter(span_exporter.clone())
// .build();
// let tracer = tracer_provider.tracer("test-tracer");

let level_filter = tracing_subscriber::filter::LevelFilter::ERROR;
let log_layer =
layer::OpenTelemetryTracingBridge::new(&logger_provider).with_filter(level_filter);
// let level_filter = tracing_subscriber::filter::LevelFilter::ERROR;
// let log_layer =
// layer::OpenTelemetryTracingBridge::new(&logger_provider).with_filter(level_filter);

let subscriber = tracing_subscriber::registry()
.with(log_layer)
.with(tracing_opentelemetry::layer().with_tracer(tracer));
// let subscriber = tracing_subscriber::registry()
// .with(log_layer)
// .with(tracing_opentelemetry::layer().with_tracer(tracer));

// Avoiding global subscriber.init() as that does not play well with unit tests.
let _guard = tracing::subscriber::set_default(subscriber);
// // Avoiding global subscriber.init() as that does not play well with unit tests.
// let _guard = tracing::subscriber::set_default(subscriber);

// Act
tracing::error_span!("outer-span").in_scope(|| {
error!("first-event");
// // Act
// tracing::error_span!("outer-span").in_scope(|| {
// error!("first-event");

tracing::error_span!("inner-span").in_scope(|| {
error!("second-event");
});
});
// tracing::error_span!("inner-span").in_scope(|| {
// error!("second-event");
// });
// });

assert!(logger_provider.force_flush().is_ok());
// assert!(logger_provider.force_flush().is_ok());

let logs = exporter.get_emitted_logs().expect("No emitted logs");
assert_eq!(logs.len(), 2, "Expected 2 logs, got: {logs:?}");
// let logs = exporter.get_emitted_logs().expect("No emitted logs");
// assert_eq!(logs.len(), 2, "Expected 2 logs, got: {logs:?}");

let spans = span_exporter.get_finished_spans().unwrap();
assert_eq!(spans.len(), 2);
// let spans = span_exporter.get_finished_spans().unwrap();
// assert_eq!(spans.len(), 2);

let trace_id = spans[0].span_context.trace_id();
assert_eq!(trace_id, spans[1].span_context.trace_id());
let inner_span_id = spans[0].span_context.span_id();
let outer_span_id = spans[1].span_context.span_id();
assert_eq!(outer_span_id, spans[0].parent_span_id);
// let trace_id = spans[0].span_context.trace_id();
// assert_eq!(trace_id, spans[1].span_context.trace_id());
// let inner_span_id = spans[0].span_context.span_id();
// let outer_span_id = spans[1].span_context.span_id();
// assert_eq!(outer_span_id, spans[0].parent_span_id);

let trace_ctx0 = logs[0].record.trace_context().unwrap();
let trace_ctx1 = logs[1].record.trace_context().unwrap();
// let trace_ctx0 = logs[0].record.trace_context().unwrap();
// let trace_ctx1 = logs[1].record.trace_context().unwrap();

assert_eq!(trace_ctx0.trace_id, trace_id);
assert_eq!(trace_ctx1.trace_id, trace_id);
assert_eq!(trace_ctx0.span_id, outer_span_id);
assert_eq!(trace_ctx1.span_id, inner_span_id);
}
// assert_eq!(trace_ctx0.trace_id, trace_id);
// assert_eq!(trace_ctx1.trace_id, trace_id);
// assert_eq!(trace_ctx0.span_id, outer_span_id);
// assert_eq!(trace_ctx1.span_id, inner_span_id);
// }

#[test]
fn tracing_appender_standalone_with_tracing_log() {
Expand Down
6 changes: 6 additions & 0 deletions opentelemetry-http/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@

## vNext

## 0.29.0

Released 2025-Mar-21

- Update `opentelemetry` dependency version to 0.29.

## 0.28.0

Released 2025-Feb-10
Expand Down
4 changes: 2 additions & 2 deletions opentelemetry-http/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "opentelemetry-http"
version = "0.28.0"
version = "0.29.0"
description = "Helper implementations for sending HTTP requests. Uses include propagating and extracting context over http, exporting telemetry, requesting sampling strategies."
homepage = "https://github.com/open-telemetry/opentelemetry-rust/tree/main/opentelemetry-http"
repository = "https://github.com/open-telemetry/opentelemetry-rust/tree/main/opentelemetry-http"
Expand All @@ -23,7 +23,7 @@ http = { workspace = true }
http-body-util = { workspace = true, optional = true }
hyper = { workspace = true, optional = true }
hyper-util = { workspace = true, features = ["client-legacy", "http1", "http2"], optional = true }
opentelemetry = { version = "0.28", path = "../opentelemetry", features = ["trace"] }
opentelemetry = { version = "0.29", path = "../opentelemetry", features = ["trace"] }
reqwest = { workspace = true, features = ["blocking"], optional = true }
tokio = { workspace = true, features = ["time"], optional = true }
tracing = {workspace = true, optional = true}
Expand Down
6 changes: 6 additions & 0 deletions opentelemetry-jaeger-propagator/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@

## vNext

## 0.29.0

Released 2025-Mar-21

- Update `opentelemetry` dependency version to 0.29.

## 0.28.0

Released 2025-Feb-10
Expand Down
4 changes: 2 additions & 2 deletions opentelemetry-jaeger-propagator/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "opentelemetry-jaeger-propagator"
version = "0.28.0"
version = "0.29.0"
description = "Jaeger propagator for OpenTelemetry"
homepage = "https://github.com/open-telemetry/opentelemetry-rust/tree/main/opentelemetry-jaeger-propagator"
repository = "https://github.com/open-telemetry/opentelemetry-rust/tree/main/opentelemetry-jaeger-propagator"
Expand All @@ -20,7 +20,7 @@ all-features = true
rustdoc-args = ["--cfg", "docsrs"]

[dependencies]
opentelemetry = { version = "0.28", default-features = false, features = [
opentelemetry = { version = "0.29", default-features = false, features = [
"trace",
], path = "../opentelemetry" }
tracing = {workspace = true, optional = true} # optional for opentelemetry internal logging
Expand Down
9 changes: 9 additions & 0 deletions opentelemetry-otlp/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,15 @@

## vNext

## 0.29.0

Released 2025-Mar-21

- Update `opentelemetry` dependency version to 0.29
- Update `opentelemetry_sdk` dependency version to 0.29
- Update `opentelemetry-http` dependency version to 0.29
- Update `opentelemetry-proto` dependency version to 0.29

- The `OTEL_EXPORTER_OTLP_TIMEOUT`, `OTEL_EXPORTER_OTLP_TRACES_TIMEOUT`, `OTEL_EXPORTER_OTLP_METRICS_TIMEOUT` and `OTEL_EXPORTER_OTLP_LOGS_TIMEOUT` are changed from seconds to miliseconds.
- Fixed `.with_headers()` in `HttpExporterBuilder` to correctly support multiple key/value pairs. [#2699](https://github.com/open-telemetry/opentelemetry-rust/pull/2699)
- Fixed
Expand Down
10 changes: 5 additions & 5 deletions opentelemetry-otlp/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "opentelemetry-otlp"
version = "0.28.0"
version = "0.29.0"
description = "Exporter for the OpenTelemetry Collector"
homepage = "https://github.com/open-telemetry/opentelemetry-rust/tree/main/opentelemetry-otlp"
repository = "https://github.com/open-telemetry/opentelemetry-rust/tree/main/opentelemetry-otlp"
Expand All @@ -27,10 +27,10 @@ rustdoc-args = ["--cfg", "docsrs"]

[dependencies]
futures-core = { workspace = true }
opentelemetry = { version = "0.28", default-features = false, path = "../opentelemetry" }
opentelemetry_sdk = { version = "0.28", default-features = false, path = "../opentelemetry-sdk" }
opentelemetry-http = { version = "0.28", path = "../opentelemetry-http", optional = true }
opentelemetry-proto = { version = "0.28", path = "../opentelemetry-proto", default-features = false }
opentelemetry = { version = "0.29", default-features = false, path = "../opentelemetry" }
opentelemetry_sdk = { version = "0.29", default-features = false, path = "../opentelemetry-sdk" }
opentelemetry-http = { version = "0.29", path = "../opentelemetry-http", optional = true }
opentelemetry-proto = { version = "0.29", path = "../opentelemetry-proto", default-features = false }
tracing = {workspace = true, optional = true}

prost = { workspace = true, optional = true }
Expand Down
7 changes: 7 additions & 0 deletions opentelemetry-proto/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@

## vNext

## 0.29.0

Released 2025-Mar-21

- Update `opentelemetry` dependency version to 0.29
- Update `opentelemetry_sdk` dependency version to 0.29

## 0.28.0

Released 2025-Feb-10
Expand Down
6 changes: 3 additions & 3 deletions opentelemetry-proto/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "opentelemetry-proto"
version = "0.28.0"
version = "0.29.0"
description = "Protobuf generated files and transformations."
homepage = "https://github.com/open-telemetry/opentelemetry-rust/tree/main/opentelemetry-proto"
repository = "https://github.com/open-telemetry/opentelemetry-rust/tree/main/opentelemetry-proto"
Expand Down Expand Up @@ -51,8 +51,8 @@ with-serde = ["serde", "hex", "base64"]
[dependencies]
tonic = { workspace = true, optional = true, features = ["codegen", "prost"] }
prost = { workspace = true, optional = true }
opentelemetry = { version = "0.28", default-features = false, path = "../opentelemetry" }
opentelemetry_sdk = { version = "0.28", default-features = false, path = "../opentelemetry-sdk" }
opentelemetry = { version = "0.29", default-features = false, path = "../opentelemetry" }
opentelemetry_sdk = { version = "0.29", default-features = false, path = "../opentelemetry-sdk" }
schemars = { workspace = true, optional = true }
serde = { workspace = true, optional = true, features = ["serde_derive"] }
hex = { workspace = true, optional = true }
Expand Down
6 changes: 6 additions & 0 deletions opentelemetry-sdk/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@

## vNext

## 0.29.0

Released 2025-Mar-21

- Update `opentelemetry` dependency to 0.29.
- Update `opentelemetry-http` dependency to 0.29.
- **Breaking**: The `Runtime` trait has been simplified and refined. See the [#2641](https://github.com/open-telemetry/opentelemetry-rust/pull/2641)
for the changes.
- Removed `async-std` support for `Runtime`, as [`async-std` crate is deprecated](https://crates.io/crates/async-std).
Expand Down
Loading