-
Notifications
You must be signed in to change notification settings - Fork 435
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
Change to owned LoggerProvider #1455
Change to owned LoggerProvider #1455
Conversation
f741d94
to
86767ad
Compare
Codecov ReportAttention:
Additional details and impacted files@@ Coverage Diff @@
## main #1455 +/- ##
=====================================
Coverage 61.8% 61.8%
=====================================
Files 144 144
Lines 19810 19805 -5
=====================================
- Hits 12256 12254 -2
+ Misses 7554 7551 -3 ☔ View full report in Codecov by Sentry. |
Trying to understand more here - so with this PR, each logger holds its own complete instance of LoggerProvider, which would be different from the other loggers, and also different from the global LoggerProvider. And will calling shutdown on the global loggerProvider ensure that the logs through these loggers are not exported ? Also, would there be increased memory usage if many Logger instances are created, as each carries a full copy of the LoggerProvider and its internal state. Also, please change the PR title to reflect LoggerProvider instead of TracerProvider :) |
The inner is still the same, so it should, I'll double check that there's a test.
It won't be a full copy, the inner is an Arc, so the outer would be an additional pointer memory wise.
Done 😅 |
Ah good point. I didn't realize that inner is Arc type, and since there is no |
It would be good to validate this use-case. It seems shutdown_logger_provider will invoke shutdown on the LogProcessors when the inner instance is dropped. And now if any of the loggers have it's reference in separate thread, the shutdown will not be invoked. One option can be to add a new |
Hmm I think this PR is the same as #1446 ? |
Yes it's meant to be an alternative because right now the initial interface requires passing the under which is inherently leaky as an interface. This aims to remove the necessity. |
Surprisingly, this PR has better perf numbers over #1446, as evident from the stress results. I initially thought both should have similar stats. /home/labhas/opentelemetry-rust/stress$ cargo run --bin logs --release #1455 (current PR): #1446: #main branch: |
That's a nice benefit as well. I believe it's because we're really doing less things in this one. Side note: I really would love to run whatever machines y'all are running because my same stress benchmarks never get as good of results. Maybe after the next refresh for my laptop 😅 |
Thinking about this scenario again, it seems that the potential issue of leaking providers might not be as significant if we can document it clearly to explain the risk. Specifically, providers could be leaked if any of the tasks indefinitely retain their reference, which can result in a shutdown not triggering. |
Just catching up on PRs! Could you describe any pros/cons of this vs the alternate in the PR desc? Also, if feasible, can you add the stress test numbers you are observing. I am not seeing the same gains as Lalit has posted above, so wondering what is the actual gain! (i'll try to run more tests and post back as well soon) |
My earlier results were on the Azure dev box, but I can also see better perf on my Windows desktop with WSL2: #main branch: #this PR: |
85ef890
to
9de34eb
Compare
Are we still thinking that we need to have the testing before this gets merged? I'm trying to thing what would be a valid testing scenario that we'd want to run. |
From SIG Call: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM.
Maybe good to add changelog entry to the sdk.
We can definitely follow up to do targeted tests for shutdown part.
67fb1cc
to
e8f069c
Compare
The interface to an item shouldn't take an inner value since it's considered inner, this also allows for further optimizations in the future as it hides the complexity from the user. Rational: This removes exposing the inner which doesn't need to be provided outside of the class. The advantage of this approach is that it's a cleaner implementation. This also removes a weak reference upgrade from the hotpath since we need to have a strong reference in order to access the information. Relates open-telemetry#1209
NoopLogger should be using a little resources as possible ideally none. This should help accomplish that.
e8f069c
to
18ee088
Compare
I ran stress test for logs after modifying the no-op processor to return false for event_enabled. Number of threads: 8 This pr: Number of threads: 8 On the other hand, if using a no-op loglayer with event_enabled returning false, the same test gives below: Number of threads: 8 This test shows that OTel still has a lot more room for further optimizations. Those can be explored in the future. This PR already boosts the perf significantly! |
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [opentelemetry](https://togithub.com/open-telemetry/opentelemetry-rust) | dependencies | minor | `0.21` -> `0.22` | | [opentelemetry-http](https://togithub.com/open-telemetry/opentelemetry-rust) | dependencies | minor | `0.10` -> `0.11` | | [opentelemetry-otlp](https://togithub.com/open-telemetry/opentelemetry-rust/tree/main/opentelemetry-otlp) ([source](https://togithub.com/open-telemetry/opentelemetry-rust/tree/HEAD/opentelemetry-otlp)) | dependencies | minor | `0.14` -> `0.15` | | [opentelemetry_sdk](https://togithub.com/open-telemetry/opentelemetry-rust) | dependencies | minor | `0.21` -> `0.22` | | [tracing-opentelemetry](https://togithub.com/tokio-rs/tracing-opentelemetry) | dependencies | minor | `0.22` -> `0.23` | --- ### Release Notes <details> <summary>open-telemetry/opentelemetry-rust (opentelemetry)</summary> ### [`v0.22.0`](https://togithub.com/open-telemetry/opentelemetry-rust/releases/tag/v0.22.0) [Compare Source](https://togithub.com/open-telemetry/opentelemetry-rust/compare/v0.21.0...opentelemetry-0.22.0) ### API #### Added - [https://github.com/open-telemetry/opentelemetry-rust/pull/1410](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1410) Add experimental synchronous gauge. This is behind the feature flag, and can be enabled by enabling the feature otel_unstable for opentelemetry crate. - [https://github.com/open-telemetry/opentelemetry-rust/pull/1410](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1410) Guidelines to add new unstable/experimental features. #### Changed - Modified AnyValue.Map to be backed by HashMap instead of custom OrderMap, which internally used IndexMap. There was no requirement to maintain the order of entries, so moving from IndexMap to HashMap offers slight performance gains, and avoids IndexMap dependency. This affects body and attributes of LogRecord. [https://github.com/open-telemetry/opentelemetry-rust/pull/1353](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1353) - Add TextMapCompositePropagator [https://github.com/open-telemetry/opentelemetry-rust/pull/1373](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1373) - Turned off events for NoopLogger to save on operations [https://github.com/open-telemetry/opentelemetry-rust/pull/1455](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1455) #### Removed - Removed OrderMap type as there was no requirement to use this over regular HashMap. [https://github.com/open-telemetry/opentelemetry-rust/pull/1353](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1353) - Remove API for Creating Histograms with signed integers. [https://github.com/open-telemetry/opentelemetry-rust/pull/1371](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1371) - Remove global::shutdown_meter_provider, use SdkMeterProvider::shutdown directly instead ([#​1412](https://togithub.com/open-telemetry/opentelemetry-rust/issues/1412)). ### SDK ##### Deprecated - XrayIdGenerator in the opentelemetry-sdk has been deprecated and moved to version 0.10.0 of the opentelemetry-aws crate. ##### Added - [#​1410](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1410) Add experimental synchronous gauge - [#​1471](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1471) Configure batch log record processor via [`OTEL_BLRP_*`](https://togithub.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/sdk-environment-variables.md#batch-logrecord-processor) environment variables and via `OtlpLogPipeline::with_batch_config` - [#​1503](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1503) Make the documentation for In-Memory exporters visible. - [#​1526](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1526) Performance Improvement : Creating Spans and LogRecords are now faster, by avoiding expensive cloning of `Resource` for every Span/LogRecord. ##### Changed - **Breaking** [#​1313](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1313) [#​1350](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1350) Changes how Span links/events are stored to achieve performance gains. See below for details: *Behavior Change*: When enforcing `max_links_per_span`, `max_events_per_span` from `SpanLimits`, links/events are kept in the first-come order. The previous "eviction" based approach is no longer performed. *Breaking Change Affecting Exporter authors*: `SpanData` now stores `links` as `SpanLinks` instead of `EvictedQueue` where `SpanLinks` is a struct with a `Vec` of links and `dropped_count`. `SpanData` now stores `events` as `SpanEvents` instead of `EvictedQueue` where `SpanEvents` is a struct with a `Vec` of events and `dropped_count`. - **Breaking** Remove `TextMapCompositePropagator` [#​1373](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1373). Use `TextMapCompositePropagator` in opentelemetry API. - [#​1375](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1375/) Fix metric collections during PeriodicReader shutdown - **Breaking** [#​1480](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1480) Remove fine grained `BatchConfig` configurations from `BatchLogProcessorBuilder` and `BatchSpanProcessorBuilder`. Use `BatchConfigBuilder` to construct a `BatchConfig` instance and pass it using `BatchLogProcessorBuilder::with_batch_config` or `BatchSpanProcessorBuilder::with_batch_config`. - **Breaking** [#​1480](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1480) Remove mutating functions from `BatchConfig`, use `BatchConfigBuilder` to construct a `BatchConfig` instance. - **Breaking** [#​1495](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1495) Remove Batch LogRecord\&Span Processor configuration via non-standard environment variables. Use the following table to migrate from the no longer supported non-standard environment variables to the standard ones. | No longer supported | Standard equivalent | |---------------------------------|---------------------------| | OTEL_BLRP_SCHEDULE_DELAY_MILLIS | OTEL_BLRP_SCHEDULE_DELAY | | OTEL_BLRP_EXPORT_TIMEOUT_MILLIS | OTEL_BLRP_EXPORT_TIMEOUT | | OTEL_BSP_SCHEDULE_DELAY_MILLIS | OTEL_BSP_SCHEDULE_DELAY | | OTEL_BSP_EXPORT_TIMEOUT_MILLIS | OTEL_BSP_EXPORT_TIMEOUT | - **Breaking** [1455](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1455) Make the LoggerProvider Owned - `Logger` now takes an Owned Logger instead of a `Weak<LoggerProviderInner>` - `LoggerProviderInner` is no longer `pub (crate)` - `Logger.provider()` now returns `&LoggerProvider` instead of an `Option<LoggerProvider>` - [1519](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1519) Performance improvements when calling `Counter::add()` and `UpDownCounter::add()` with an empty set of attributes (e.g. `counter.Add(5, &[])`) ##### Fixed - [#​1481](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1481) Fix error message caused by race condition when using PeriodicReader </details> <details> <summary>open-telemetry/opentelemetry-rust (opentelemetry-otlp)</summary> ### [`v0.15.0`](https://togithub.com/open-telemetry/opentelemetry-rust/blob/HEAD/opentelemetry-otlp/CHANGELOG.md#v0150) [Compare Source](https://togithub.com/open-telemetry/opentelemetry-rust/compare/opentelemetry-otlp-0.14.0...opentelemetry-otlp-0.15.0) ##### Added - Support custom channels in topic exporters [#​1335](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1335) - Allow specifying OTLP Tonic metadata from env variable [#​1377](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1377) ##### Changed - Update to tonic 0.11 and prost 0.12 [#​1536](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1536) ##### Fixed - Fix `tonic()` to the use correct port. [#​1556](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1556) ##### Removed - **Breaking** Remove support for surf HTTP client [#​1537](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1537) - **Breaking** Remove support for grpcio transport [#​1534](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1534) </details> <details> <summary>tokio-rs/tracing-opentelemetry (tracing-opentelemetry)</summary> ### [`v0.23.0`](https://togithub.com/tokio-rs/tracing-opentelemetry/blob/HEAD/CHANGELOG.md#0230-February-26-2024) [Compare Source](https://togithub.com/tokio-rs/tracing-opentelemetry/compare/v0.22.0...v0.23.0) ##### Breaking Changes - Upgrade to opentelemetry 0.22. Refer to the upstream [changelog](https://togithub.com/open-telemetry/opentelemetry-rust/releases/tag/v0.22.0) for more information. In particular, i64 histograms will silently downgrade to key/value exports. </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://togithub.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/TheHackerApp/logging). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yMTIuMCIsInVwZGF0ZWRJblZlciI6IjM3LjM0MC4xMCIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [opentelemetry](https://togithub.com/open-telemetry/opentelemetry-rust) | workspace.dependencies | minor | `0.21` -> `0.24` | | [opentelemetry-otlp](https://togithub.com/open-telemetry/opentelemetry-rust/tree/main/opentelemetry-otlp) ([source](https://togithub.com/open-telemetry/opentelemetry-rust/tree/HEAD/opentelemetry-otlp)) | workspace.dependencies | minor | `0.14` -> `0.17` | | [opentelemetry_sdk](https://togithub.com/open-telemetry/opentelemetry-rust) | workspace.dependencies | minor | `0.21` -> `0.24` | --- ### Release Notes <details> <summary>open-telemetry/opentelemetry-rust (opentelemetry)</summary> ### [`v0.24.0`](https://togithub.com/open-telemetry/opentelemetry-rust/releases/tag/opentelemetry-0.24.0) [Compare Source](https://togithub.com/open-telemetry/opentelemetry-rust/compare/opentelemetry-0.23.0...opentelemetry-0.24.0) See individual crate changelogs for details. ### [`v0.23.0`](https://togithub.com/open-telemetry/opentelemetry-rust/releases/tag/opentelemetry-0.23.0): 0.23.0 [Compare Source](https://togithub.com/open-telemetry/opentelemetry-rust/compare/opentelemetry-0.22.0...opentelemetry-0.23.0) #### Whats changed? See individual crate changelogs for details. #### New Contributors [@​svix-jplatte](https://togithub.com/svix-jplatte) made their first contribution in [https://github.com/open-telemetry/opentelemetry-rust/pull/1568](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1568) [@​rex4539](https://togithub.com/rex4539) made their first contribution in [https://github.com/open-telemetry/opentelemetry-rust/pull/1587](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1587) [@​divergentdave](https://togithub.com/divergentdave) made their first contribution in [https://github.com/open-telemetry/opentelemetry-rust/pull/1584](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1584) [@​pyohannes](https://togithub.com/pyohannes) made their first contribution in [https://github.com/open-telemetry/opentelemetry-rust/pull/1578](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1578) [@​masato-hi](https://togithub.com/masato-hi) made their first contribution in [https://github.com/open-telemetry/opentelemetry-rust/pull/1621](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1621) [@​rogercoll](https://togithub.com/rogercoll) made their first contribution in [https://github.com/open-telemetry/opentelemetry-rust/pull/1624](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1624) [@​LuisOsta](https://togithub.com/LuisOsta) made their first contribution in [https://github.com/open-telemetry/opentelemetry-rust/pull/1638](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1638) [@​svrnm](https://togithub.com/svrnm) made their first contribution in [https://github.com/open-telemetry/opentelemetry-rust/pull/1664](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1664) [@​Lev1ty](https://togithub.com/Lev1ty) made their first contribution in [https://github.com/open-telemetry/opentelemetry-rust/pull/1672](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1672) [@​ThomsonTan](https://togithub.com/ThomsonTan) made their first contribution in [https://github.com/open-telemetry/opentelemetry-rust/pull/1675](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1675) [@​ramgdev](https://togithub.com/ramgdev) made their first contribution in [https://github.com/open-telemetry/opentelemetry-rust/pull/1585](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1585) [@​utpilla](https://togithub.com/utpilla) made their first contribution in [https://github.com/open-telemetry/opentelemetry-rust/pull/1701](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1701) [@​ChieloNewctle](https://togithub.com/ChieloNewctle) made their first contribution in [https://github.com/open-telemetry/opentelemetry-rust/pull/1746](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1746) ### [`v0.22.0`](https://togithub.com/open-telemetry/opentelemetry-rust/releases/tag/v0.22.0) [Compare Source](https://togithub.com/open-telemetry/opentelemetry-rust/compare/v0.21.0...opentelemetry-0.22.0) ### API #### Added - [https://github.com/open-telemetry/opentelemetry-rust/pull/1410](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1410) Add experimental synchronous gauge. This is behind the feature flag, and can be enabled by enabling the feature otel_unstable for opentelemetry crate. - [https://github.com/open-telemetry/opentelemetry-rust/pull/1410](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1410) Guidelines to add new unstable/experimental features. #### Changed - Modified AnyValue.Map to be backed by HashMap instead of custom OrderMap, which internally used IndexMap. There was no requirement to maintain the order of entries, so moving from IndexMap to HashMap offers slight performance gains, and avoids IndexMap dependency. This affects body and attributes of LogRecord. [https://github.com/open-telemetry/opentelemetry-rust/pull/1353](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1353) - Add TextMapCompositePropagator [https://github.com/open-telemetry/opentelemetry-rust/pull/1373](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1373) - Turned off events for NoopLogger to save on operations [https://github.com/open-telemetry/opentelemetry-rust/pull/1455](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1455) #### Removed - Removed OrderMap type as there was no requirement to use this over regular HashMap. [https://github.com/open-telemetry/opentelemetry-rust/pull/1353](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1353) - Remove API for Creating Histograms with signed integers. [https://github.com/open-telemetry/opentelemetry-rust/pull/1371](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1371) - Remove global::shutdown_meter_provider, use SdkMeterProvider::shutdown directly instead ([#​1412](https://togithub.com/open-telemetry/opentelemetry-rust/issues/1412)). ### SDK ##### Deprecated - XrayIdGenerator in the opentelemetry-sdk has been deprecated and moved to version 0.10.0 of the opentelemetry-aws crate. ##### Added - [#​1410](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1410) Add experimental synchronous gauge - [#​1471](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1471) Configure batch log record processor via [`OTEL_BLRP_*`](https://togithub.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/sdk-environment-variables.md#batch-logrecord-processor) environment variables and via `OtlpLogPipeline::with_batch_config` - [#​1503](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1503) Make the documentation for In-Memory exporters visible. - [#​1526](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1526) Performance Improvement : Creating Spans and LogRecords are now faster, by avoiding expensive cloning of `Resource` for every Span/LogRecord. ##### Changed - **Breaking** [#​1313](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1313) [#​1350](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1350) Changes how Span links/events are stored to achieve performance gains. See below for details: *Behavior Change*: When enforcing `max_links_per_span`, `max_events_per_span` from `SpanLimits`, links/events are kept in the first-come order. The previous "eviction" based approach is no longer performed. *Breaking Change Affecting Exporter authors*: `SpanData` now stores `links` as `SpanLinks` instead of `EvictedQueue` where `SpanLinks` is a struct with a `Vec` of links and `dropped_count`. `SpanData` now stores `events` as `SpanEvents` instead of `EvictedQueue` where `SpanEvents` is a struct with a `Vec` of events and `dropped_count`. - **Breaking** Remove `TextMapCompositePropagator` [#​1373](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1373). Use `TextMapCompositePropagator` in opentelemetry API. - [#​1375](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1375/) Fix metric collections during PeriodicReader shutdown - **Breaking** [#​1480](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1480) Remove fine grained `BatchConfig` configurations from `BatchLogProcessorBuilder` and `BatchSpanProcessorBuilder`. Use `BatchConfigBuilder` to construct a `BatchConfig` instance and pass it using `BatchLogProcessorBuilder::with_batch_config` or `BatchSpanProcessorBuilder::with_batch_config`. - **Breaking** [#​1480](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1480) Remove mutating functions from `BatchConfig`, use `BatchConfigBuilder` to construct a `BatchConfig` instance. - **Breaking** [#​1495](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1495) Remove Batch LogRecord\&Span Processor configuration via non-standard environment variables. Use the following table to migrate from the no longer supported non-standard environment variables to the standard ones. | No longer supported | Standard equivalent | |---------------------------------|---------------------------| | OTEL_BLRP_SCHEDULE_DELAY_MILLIS | OTEL_BLRP_SCHEDULE_DELAY | | OTEL_BLRP_EXPORT_TIMEOUT_MILLIS | OTEL_BLRP_EXPORT_TIMEOUT | | OTEL_BSP_SCHEDULE_DELAY_MILLIS | OTEL_BSP_SCHEDULE_DELAY | | OTEL_BSP_EXPORT_TIMEOUT_MILLIS | OTEL_BSP_EXPORT_TIMEOUT | - **Breaking** [1455](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1455) Make the LoggerProvider Owned - `Logger` now takes an Owned Logger instead of a `Weak<LoggerProviderInner>` - `LoggerProviderInner` is no longer `pub (crate)` - `Logger.provider()` now returns `&LoggerProvider` instead of an `Option<LoggerProvider>` - [1519](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1519) Performance improvements when calling `Counter::add()` and `UpDownCounter::add()` with an empty set of attributes (e.g. `counter.Add(5, &[])`) ##### Fixed - [#​1481](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1481) Fix error message caused by race condition when using PeriodicReader </details> <details> <summary>open-telemetry/opentelemetry-rust (opentelemetry-otlp)</summary> ### [`v0.17.0`](https://togithub.com/open-telemetry/opentelemetry-rust/blob/HEAD/opentelemetry-otlp/CHANGELOG.md#v0170) [Compare Source](https://togithub.com/open-telemetry/opentelemetry-rust/compare/opentelemetry-otlp-0.16.0...opentelemetry-otlp-0.17.0) - Add "metrics", "logs" to default features. With this, default feature list is "trace", "metrics" and "logs". - `OtlpMetricPipeline.build()` no longer invoke the `global::set_meter_provider`. User who setup the pipeline must do it themselves using `global::set_meter_provider(meter_provider.clone());`. - Add `with_resource` on `OtlpLogPipeline`, replacing the `with_config` method. Instead of using `.with_config(Config::default().with_resource(RESOURCE::default()))` users must now use `.with_resource(RESOURCE::default())` to configure Resource when using `OtlpLogPipeline`. - **Breaking** The methods `OtlpTracePipeline::install_simple()` and `OtlpTracePipeline::install_batch()` would now return `TracerProvider` instead of `Tracer`. These methods would also no longer set the global tracer provider. It would now be the responsibility of users to set it by calling `global::set_tracer_provider(tracer_provider.clone());`. Refer to the [basic-otlp](https://togithub.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-otlp/examples/basic-otlp/src/main.rs) and [basic-otlp-http](https://togithub.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-otlp/examples/basic-otlp-http/src/main.rs) examples on how to initialize OTLP Trace Exporter. - **Breaking** Correct the misspelling of "webkpi" to "webpki" in features [#​1842](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1842) - Bump MSRV to 1.70 [#​1840](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1840) - Fixing the OTLP HTTP/JSON exporter. [#​1882](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1882) - The exporter was broken in the previous release. - **Breaking** [1869](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1869) The OTLP logs exporter now overrides the [InstrumentationScope::name](https://togithub.com/open-telemetry/opentelemetry-proto/blob/b3060d2104df364136d75a35779e6bd48bac449a/opentelemetry/proto/common/v1/common.proto#L73) field with the `target` from `LogRecord`, if target is populated. - Groups batch of `LogRecord` and `Span` by their resource and instrumentation scope before exporting, for better efficiency [#​1873](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1873). - **Breaking** Update to `http` v1 and `tonic` v0.12 [#​1674](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1674) - Update `opentelemetry` dependency version to 0.24 - Update `opentelemetry_sdk` dependency version to 0.24 - Update `opentelemetry-http` dependency version to 0.13 - Update `opentelemetry-proto` dependency version to 0.7 ### [`v0.16.0`](https://togithub.com/open-telemetry/opentelemetry-rust/blob/HEAD/opentelemetry-otlp/CHANGELOG.md#v0160) [Compare Source](https://togithub.com/open-telemetry/opentelemetry-rust/compare/opentelemetry-otlp-0.15.0...opentelemetry-otlp-0.16.0) ##### Fixed - URL encoded values in `OTEL_EXPORTER_OTLP_HEADERS` are now correctly decoded. [#​1578](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1578) - OTLP exporter will not change the URL added through `ExportConfig` [#​1706](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1706) - Default grpc endpoint will not have path based on signal(e.g `/v1/traces`) [#​1706](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1706) - Fix feature flags for `OTEL_EXPORTER_OTLP_PROTOCOL_DEFAULT` [#​1746](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1746) ##### Added - Added `DeltaTemporalitySelector` ([#​1568]) - Add `webkpi-roots` features to `reqwest` and `tonic` backends [#​1568]: https://togithub.com/open-telemetry/opentelemetry-rust/pull/1568 ##### Changed - **Breaking** Remove global provider for Logs [#​1691](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1691/) - The method OtlpLogPipeline::install_simple() and OtlpLogPipeline::install_batch() now return `LoggerProvider` instead of `Logger`. Refer to the [basic-otlp](https://togithub.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-otlp/examples/basic-otlp/src/main.rs) and [basic-otlp-http](https://togithub.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-otlp/examples/basic-otlp-http/src/main.rs) examples for how to initialize OTLP Log Exporter to use with OpenTelemetryLogBridge and OpenTelemetryTracingBridge respectively. - Update `opentelemetry` dependency version to 0.23 - Update `opentelemetry_sdk` dependency version to 0.23 - Update `opentelemetry-http` dependency version to 0.12 - Update `opentelemetry-proto` dependency version to 0.6 ### [`v0.15.0`](https://togithub.com/open-telemetry/opentelemetry-rust/blob/HEAD/opentelemetry-otlp/CHANGELOG.md#v0150) [Compare Source](https://togithub.com/open-telemetry/opentelemetry-rust/compare/opentelemetry-otlp-0.14.0...opentelemetry-otlp-0.15.0) ##### Added - Support custom channels in topic exporters [#​1335](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1335) - Allow specifying OTLP Tonic metadata from env variable [#​1377](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1377) ##### Changed - Update to tonic 0.11 and prost 0.12 [#​1536](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1536) ##### Fixed - Fix `tonic()` to the use correct port. [#​1556](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1556) ##### Removed - **Breaking** Remove support for surf HTTP client [#​1537](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1537) - **Breaking** Remove support for grpcio transport [#​1534](https://togithub.com/open-telemetry/opentelemetry-rust/pull/1534) </details> --- ### Configuration 📅 **Schedule**: Branch creation - "on the first day of the month" in timezone America/Los_Angeles, Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://togithub.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View the [repository job log](https://developer.mend.io/github/get-convex/convex). GitOrigin-RevId: 81963454ddea644957059f98bcf8ecbcf4b47255
The interface to an item shouldn't take an inner value since it's considered inner, this also allows for further optimizations in the future as it hides the complexity from the user.
Relates #1209
Changes
Please provide a brief description of the changes here.
Merge requirement checklist
CHANGELOG.md
files updated for non-trivial, user-facing changes