Skip to content

Commit b7a4ad8

Browse files
committed
notes on breaking
1 parent c4cad1d commit b7a4ad8

File tree

3 files changed

+55
-21
lines changed

3 files changed

+55
-21
lines changed

docs/migration_0.28.md

Lines changed: 52 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ Before (0.27):
1818
opentelemetry::global::shutdown_tracer_provider();
1919
```
2020

21-
After (0.28):
21+
After (0.28):
2222

2323
```rust
2424
let tracer_provider = opentelemetry_sdk::trace::SdkTracerProvider::builder()
@@ -54,33 +54,43 @@ PeriodicReader, BatchSpanProcessor, BatchLogProcessor are the components
5454
affected.
5555

5656
For Logs,Traces replace `.with_batch_exporter(exporter, runtime::Tokio)` with
57-
`.with_batch_exporter(exporter)`. For Metrics, replace `let reader =
57+
`.with_batch_exporter(exporter)`.
58+
59+
For Metrics, replace `let reader =
5860
PeriodicReader::builder(exporter, runtime::Tokio).build();` with `let reader =
5961
PeriodicReader::builder(exporter).build();` or more conveniently,
6062
`.with_periodic_exporter(exporter)`.
6163

6264
Please note the following:
6365

64-
1. With the new approach, only the following grpc/http clients are supported in
65-
`opentelemetry-otlp`. grpc-tonic, reqwest-blocking-client In other words,
66-
`reqwest` and `hyper` are not supported. If using `grpc-tonic`, the OTLP
67-
Exporter must be created from within a Tokio runtime.
66+
* With the new approach, only the following grpc/http clients are supported in
67+
`opentelemetry-otlp`.
68+
69+
`grpc-tonic` (OTLP
70+
Exporter must be created from within a Tokio runtime)
71+
72+
`reqwest-blocking-client`
73+
74+
In other words,
75+
`reqwest` and `hyper` are not supported.
6876
If using exporters other than `opentelemetry-otlp`, consult the docs
6977
for the same to know if there are any restrictions/requirements on async
7078
runtime.
71-
2. Timeout enforcement is now moved to Exporters. i.e
79+
80+
* Timeout enforcement is now moved to Exporters. i.e
7281
BatchProcessor,PeriodicReader does not enforce timeouts. For logs and traces,
7382
`max_export_timeout` (on Processors) or `OTEL_BLRP_EXPORT_TIMEOUT` or
7483
`OTEL_BSP_EXPORT_TIMEOUT` is no longer supported. For metrics, `with_timeout` on
7584
PeriodicReader is no longer supported.
7685

77-
`OTEL_EXPORTER_OTLP_TIMEOUT` can be used to setup timeout for OTLP Exporters via
78-
environment variables, or `.with_tonic().with_timeout()` or
79-
`.with_http().with_timeout()` programmatically.
86+
`OTEL_EXPORTER_OTLP_TIMEOUT` can be used to setup timeout for OTLP Exporters
87+
via environment variables, or `.with_tonic().with_timeout()` or
88+
`.with_http().with_timeout()` programmatically.
8089

81-
If you need the old behavior (your application cannot spawn a new thread, or
82-
need to use another networking client etc.) use appropriate feature flags from
83-
below “experimental_metrics_periodicreader_with_async_runtime”
90+
* If you need the old behavior (your application cannot spawn a new thread, or
91+
need to use another networking client etc.) use appropriate feature flag(s) from
92+
below.
93+
“experimental_metrics_periodicreader_with_async_runtime”
8494
"experimental_logs_batch_log_processor_with_async_runtime"
8595
"experimental_trace_batch_span_processor_with_async_runtime"
8696

@@ -100,9 +110,9 @@ let logger_provider = SdkLoggerProvider::builder()
100110

101111
## OTLP Default change
102112

103-
"grpc-tonic" feature flag is no longer enabled by default. "http-proto" and
104-
"reqwest-blocking-client" features are added as default, to align with the
105-
OTel specification.
113+
"grpc-tonic" feature flag is no longer enabled by default in
114+
`opentelemetry-otlp`. "http-proto" and "reqwest-blocking-client" features are
115+
added as default, to align with the OTel specification.
106116

107117
## Resource Changes
108118

@@ -133,9 +143,9 @@ Resource::builder()
133143
OpenTelemetry internally used `tracing` to emit its internal logs. This is under
134144
feature-flag "internal-logs" that is enabled by default in all crates. When
135145
using OTel Logging, care must be taken to avoid OTel's own internal log being
136-
fed back to OTel, creating an infinite loop. This can be achieved via proper
146+
fed back to OTel, creating an circular dependency. This can be achieved via proper
137147
filtering. The OTLP Examples in the repo shows how to achieve this. It also
138-
shows how to send OTel's internal logs to stdtout using `tracing::Fmt`.
148+
shows how to send OTel's internal logs to stdout using `tracing::Fmt`.
139149

140150
## Full example
141151

@@ -152,3 +162,27 @@ the changes required to be made.
152162
This guide covers only the most common breaking changes. If you’re using custom
153163
exporters or processors (or authoring one), please consult the changelog for
154164
additional migration details.
165+
166+
## Notes on Breaking Changes and the Path to 1.0
167+
168+
We understand that breaking changes can be challenging, but they are essential
169+
for the growth and stability of the project. With the release of 0.28, the
170+
Metric API (`opentelemetry` crate, "metrics" feature flag) and LogBridge API
171+
(`opentelemetry` crate, "logs" feature flag) are now stable, and we do not
172+
anticipate further breaking changes for these components.
173+
174+
Moreover, the `opentelemetry_sdk` crate for "logs" and "metrics" will have a
175+
very high bar for any future breaking changes. Any changes are expected to
176+
primarily impact those developing custom components, such as custom exporters.
177+
In the upcoming releases, we aim to bring the "traces" feature to the same level
178+
of stability as "logs" and "metrics". Additionally, "opentelemetry-otlp", the
179+
official exporter, will also receive stability guarantees.
180+
181+
We are excited to announce that a 1.0 release, encompassing logs, metrics, and
182+
traces, is planned for June 2025. We appreciate your patience and support as we
183+
work towards this milestone. The 1.0 release will cover the API
184+
(`opentelemetry`), SDK (`opentelemetry_sdk`), OTLP Exporter
185+
(`opentelemetry-otlp`), and Tracing-Bridge (`opentelemetry-appender-tracing`).
186+
187+
We encourage you to share your feedback via GitHub issues or the OTel-Rust Slack
188+
channel [here](https://cloud-native.slack.com/archives/C03GDP0H023).

opentelemetry-otlp/examples/basic-otlp-http/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ reqwest-blocking = ["opentelemetry-otlp/reqwest-blocking-client"]
1313
once_cell = { workspace = true }
1414
opentelemetry = { path = "../../../opentelemetry" }
1515
opentelemetry_sdk = { path = "../../../opentelemetry-sdk" }
16-
opentelemetry-otlp = { path = "../..", features = ["http-proto", "http-json", "logs", "internal-logs"], default-features = false}
17-
opentelemetry-appender-tracing = { path = "../../../opentelemetry-appender-tracing", default-features = false}
16+
opentelemetry-otlp = { path = "../.."}
17+
opentelemetry-appender-tracing = { path = "../../../opentelemetry-appender-tracing"}
1818

1919
tokio = { workspace = true, features = ["full"] }
2020
tracing = { workspace = true, features = ["std"]}

opentelemetry-otlp/examples/basic-otlp/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@ opentelemetry = { path = "../../../opentelemetry" }
1111
opentelemetry_sdk = { path = "../../../opentelemetry-sdk" }
1212
opentelemetry-otlp = { path = "../../../opentelemetry-otlp", features = ["grpc-tonic"] }
1313
tokio = { version = "1.0", features = ["full"] }
14-
opentelemetry-appender-tracing = { path = "../../../opentelemetry-appender-tracing", default-features = false}
14+
opentelemetry-appender-tracing = { path = "../../../opentelemetry-appender-tracing"}
1515
tracing = { workspace = true, features = ["std"]}
1616
tracing-subscriber = { workspace = true, features = ["env-filter","registry", "std", "fmt"] }

0 commit comments

Comments
 (0)