-
Notifications
You must be signed in to change notification settings - Fork 1.1k
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
Replace uses unsafe with atomic with the generic atomic.Pointer #4226
Conversation
Line numbers debug symbols aside this code will produce the exact same machine code. It removes a non needed use of unsafe and replace it with compile time type checked generics. Will help keep code cleaner in case any of this ever gets refactored in the future.
Codecov Report
Additional details and impacted files@@ Coverage Diff @@
## main #4226 +/- ##
=====================================
Coverage 83.4% 83.4%
=====================================
Files 181 181
Lines 14116 14116
=====================================
+ Hits 11780 11786 +6
+ Misses 2109 2103 -6
Partials 227 227
|
Thank you, this definitely makes sense. More out of curiosity though, could you run benchstat with the benchmark tests on both main and your branch to ensure there's no regression? |
A benchmark would be noisy here are instructions diffs instead, I can bench if you want but I don't think it would tell you anything even if it did indeed changes:
Had to use Here is
Here no change at all, I'm not exactly sure why the second inling mark does not show up (neither why |
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [go.opentelemetry.io/otel](https://togithub.com/open-telemetry/opentelemetry-go) | require | minor | `v1.16.0` -> `v1.17.0` | | [go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc](https://togithub.com/open-telemetry/opentelemetry-go) | require | minor | `v0.39.0` -> `v0.40.0` | | [go.opentelemetry.io/otel/exporters/otlp/otlptrace](https://togithub.com/open-telemetry/opentelemetry-go) | require | minor | `v1.16.0` -> `v1.17.0` | | [go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc](https://togithub.com/open-telemetry/opentelemetry-go) | require | minor | `v1.16.0` -> `v1.17.0` | | [go.opentelemetry.io/otel/exporters/prometheus](https://togithub.com/open-telemetry/opentelemetry-go) | require | minor | `v0.39.0` -> `v0.40.0` | | [go.opentelemetry.io/otel/metric](https://togithub.com/open-telemetry/opentelemetry-go) | require | minor | `v1.16.0` -> `v1.17.0` | | [go.opentelemetry.io/otel/sdk](https://togithub.com/open-telemetry/opentelemetry-go) | require | minor | `v1.16.0` -> `v1.17.0` | | [go.opentelemetry.io/otel/sdk/metric](https://togithub.com/open-telemetry/opentelemetry-go) | require | minor | `v0.39.0` -> `v0.40.0` | | [go.opentelemetry.io/otel/trace](https://togithub.com/open-telemetry/opentelemetry-go) | require | minor | `v1.16.0` -> `v1.17.0` | --- ### Release Notes <details> <summary>open-telemetry/opentelemetry-go (go.opentelemetry.io/otel)</summary> ### [`v1.17.0`](https://togithub.com/open-telemetry/opentelemetry-go/releases/tag/v1.17.0): /v0.40.0/v0.5.0 [Compare Source](https://togithub.com/open-telemetry/opentelemetry-go/compare/v1.16.0...v1.17.0) ##### Added - Export the `ManualReader` struct in `go.opentelemetry.io/otel/sdk/metric`. ([#​4244](https://togithub.com/open-telemetry/opentelemetry-go/issues/4244)) - Export the `PeriodicReader` struct in `go.opentelemetry.io/otel/sdk/metric`. ([#​4244](https://togithub.com/open-telemetry/opentelemetry-go/issues/4244)) - Add support for exponential histogram aggregations. A histogram can be configured as an exponential histogram using a view with `"go.opentelemetry.io/otel/sdk/metric".ExponentialHistogram` as the aggregation. ([#​4245](https://togithub.com/open-telemetry/opentelemetry-go/issues/4245)) - Export the `Exporter` struct in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc`. ([#​4272](https://togithub.com/open-telemetry/opentelemetry-go/issues/4272)) - Export the `Exporter` struct in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`. ([#​4272](https://togithub.com/open-telemetry/opentelemetry-go/issues/4272)) - The exporters in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric` now support the `OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE` environment variable. ([#​4287](https://togithub.com/open-telemetry/opentelemetry-go/issues/4287)) - Add `WithoutCounterSuffixes` option in `go.opentelemetry.io/otel/exporters/prometheus` to disable addition of `_total` suffixes. ([#​4306](https://togithub.com/open-telemetry/opentelemetry-go/issues/4306)) - Add info and debug logging to the metric SDK in `go.opentelemetry.io/otel/sdk/metric`. ([#​4315](https://togithub.com/open-telemetry/opentelemetry-go/issues/4315)) - The `go.opentelemetry.io/otel/semconv/v1.21.0` package. The package contains semantic conventions from the `v1.21.0` version of the OpenTelemetry Semantic Conventions. ([#​4362](https://togithub.com/open-telemetry/opentelemetry-go/issues/4362)) - Accept 201 to 299 HTTP status as success in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp` and `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`. ([#​4365](https://togithub.com/open-telemetry/opentelemetry-go/issues/4365)) - Document the `Temporality` and `Aggregation` methods of the `"go.opentelemetry.io/otel/sdk/metric".Exporter"` need to be concurrent safe. ([#​4381](https://togithub.com/open-telemetry/opentelemetry-go/issues/4381)) - Expand the set of units supported by the Prometheus exporter, and don't add unit suffixes if they are already present in `go.opentelemetry.op/otel/exporters/prometheus` ([#​4374](https://togithub.com/open-telemetry/opentelemetry-go/issues/4374)) - Move the `Aggregation` interface and its implementations from `go.opentelemetry.io/otel/sdk/metric/aggregation` to `go.opentelemetry.io/otel/sdk/metric`. ([#​4435](https://togithub.com/open-telemetry/opentelemetry-go/issues/4435)) - The exporters in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric` now support the `OTEL_EXPORTER_OTLP_METRICS_DEFAULT_HISTOGRAM_AGGREGATION` environment variable. ([#​4437](https://togithub.com/open-telemetry/opentelemetry-go/issues/4437)) - Add the `NewAllowKeysFilter` and `NewDenyKeysFilter` functions to `go.opentelemetry.io/otel/attribute` to allow convenient creation of allow-keys and deny-keys filters. ([#​4444](https://togithub.com/open-telemetry/opentelemetry-go/issues/4444)) ##### Changed - Starting from `v1.21.0` of semantic conventions, `go.opentelemetry.io/otel/semconv/{version}/httpconv` and `go.opentelemetry.io/otel/semconv/{version}/netconv` packages will no longer be published. ([#​4145](https://togithub.com/open-telemetry/opentelemetry-go/issues/4145)) - Log duplicate instrument conflict at a warning level instead of info in `go.opentelemetry.io/otel/sdk/metric`. ([#​4202](https://togithub.com/open-telemetry/opentelemetry-go/issues/4202)) - Return an error on the creation of new instruments in `go.opentelemetry.io/otel/sdk/metric` if their name doesn't pass regexp validation. ([#​4210](https://togithub.com/open-telemetry/opentelemetry-go/issues/4210)) - `NewManualReader` in `go.opentelemetry.io/otel/sdk/metric` returns `*ManualReader` instead of `Reader`. ([#​4244](https://togithub.com/open-telemetry/opentelemetry-go/issues/4244)) - `NewPeriodicReader` in `go.opentelemetry.io/otel/sdk/metric` returns `*PeriodicReader` instead of `Reader`. ([#​4244](https://togithub.com/open-telemetry/opentelemetry-go/issues/4244)) - Count the Collect time in the `PeriodicReader` timeout in `go.opentelemetry.io/otel/sdk/metric`. ([#​4221](https://togithub.com/open-telemetry/opentelemetry-go/issues/4221)) - The function `New` in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` returns `*Exporter` instead of `"go.opentelemetry.io/otel/sdk/metric".Exporter`. ([#​4272](https://togithub.com/open-telemetry/opentelemetry-go/issues/4272)) - The function `New` in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp` returns `*Exporter` instead of `"go.opentelemetry.io/otel/sdk/metric".Exporter`. ([#​4272](https://togithub.com/open-telemetry/opentelemetry-go/issues/4272)) - If an attribute set is omitted from an async callback, the previous value will no longer be exported in `go.opentelemetry.io/otel/sdk/metric`. ([#​4290](https://togithub.com/open-telemetry/opentelemetry-go/issues/4290)) - If an attribute set is observed multiple times in an async callback in `go.opentelemetry.io/otel/sdk/metric`, the values will be summed instead of the last observation winning. ([#​4289](https://togithub.com/open-telemetry/opentelemetry-go/issues/4289)) - Allow the explicit bucket histogram aggregation to be used for the up-down counter, observable counter, observable up-down counter, and observable gauge in the `go.opentelemetry.io/otel/sdk/metric` package. ([#​4332](https://togithub.com/open-telemetry/opentelemetry-go/issues/4332)) - Restrict `Meter`s in `go.opentelemetry.io/otel/sdk/metric` to only register and collect instruments it created. ([#​4333](https://togithub.com/open-telemetry/opentelemetry-go/issues/4333)) - `PeriodicReader.Shutdown` and `PeriodicReader.ForceFlush` in `go.opentelemetry.io/otel/sdk/metric` now apply the periodic reader's timeout to the operation if the user provided context does not contain a deadline. ([#​4356](https://togithub.com/open-telemetry/opentelemetry-go/issues/4356), [#​4377](https://togithub.com/open-telemetry/opentelemetry-go/issues/4377)) - Upgrade all use of `go.opentelemetry.io/otel/semconv` to use `v1.21.0`. ([#​4408](https://togithub.com/open-telemetry/opentelemetry-go/issues/4408)) - Increase instrument name maximum length from 63 to 255 characters in `go.opentelemetry.io/otel/sdk/metric`. ([#​4434](https://togithub.com/open-telemetry/opentelemetry-go/issues/4434)) - Add `go.opentelemetry.op/otel/sdk/metric.WithProducer` as an `Option` for `"go.opentelemetry.io/otel/sdk/metric".NewManualReader` and `"go.opentelemetry.io/otel/sdk/metric".NewPeriodicReader`. ([#​4346](https://togithub.com/open-telemetry/opentelemetry-go/issues/4346)) ##### Removed - Remove `Reader.RegisterProducer` in `go.opentelemetry.io/otel/metric`. Use the added `WithProducer` option instead. ([#​4346](https://togithub.com/open-telemetry/opentelemetry-go/issues/4346)) - Remove `Reader.ForceFlush` in `go.opentelemetry.io/otel/metric`. Notice that `PeriodicReader.ForceFlush` is still available. ([#​4375](https://togithub.com/open-telemetry/opentelemetry-go/issues/4375)) ##### Fixed - Correctly format log messages from the `go.opentelemetry.io/otel/exporters/zipkin` exporter. ([#​4143](https://togithub.com/open-telemetry/opentelemetry-go/issues/4143)) - Log an error for calls to `NewView` in `go.opentelemetry.io/otel/sdk/metric` that have empty criteria. ([#​4307](https://togithub.com/open-telemetry/opentelemetry-go/issues/4307)) - Fix `"go.opentelemetry.io/otel/sdk/resource".WithHostID()` to not set an empty `host.id`. ([#​4317](https://togithub.com/open-telemetry/opentelemetry-go/issues/4317)) - Use the instrument identifying fields to cache aggregators and determine duplicate instrument registrations in `go.opentelemetry.io/otel/sdk/metric`. ([#​4337](https://togithub.com/open-telemetry/opentelemetry-go/issues/4337)) - Detect duplicate instruments for case-insensitive names in `go.opentelemetry.io/otel/sdk/metric`. ([#​4338](https://togithub.com/open-telemetry/opentelemetry-go/issues/4338)) - The `ManualReader` will not panic if `AggregationSelector` returns `nil` in `go.opentelemetry.io/otel/sdk/metric`. ([#​4350](https://togithub.com/open-telemetry/opentelemetry-go/issues/4350)) - If a `Reader`'s `AggregationSelector` returns `nil` or `DefaultAggregation` the pipeline will use the default aggregation. ([#​4350](https://togithub.com/open-telemetry/opentelemetry-go/issues/4350)) - Log a suggested view that fixes instrument conflicts in `go.opentelemetry.io/otel/sdk/metric`. ([#​4349](https://togithub.com/open-telemetry/opentelemetry-go/issues/4349)) - Fix possible panic, deadlock and race condition in batch span processor in `go.opentelemetry.io/otel/sdk/trace`. ([#​4353](https://togithub.com/open-telemetry/opentelemetry-go/issues/4353)) - Improve context cancellation handling in batch span processor's `ForceFlush` in `go.opentelemetry.io/otel/sdk/trace`. ([#​4369](https://togithub.com/open-telemetry/opentelemetry-go/issues/4369)) - Decouple `go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal` from `go.opentelemetry.io/otel/exporters/otlp/internal` using gotmpl. ([#​4397](https://togithub.com/open-telemetry/opentelemetry-go/issues/4397), [#​3846](https://togithub.com/open-telemetry/opentelemetry-go/issues/3846)) - Decouple `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc/internal` from `go.opentelemetry.io/otel/exporters/otlp/internal` and `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal` using gotmpl. ([#​4404](https://togithub.com/open-telemetry/opentelemetry-go/issues/4404), [#​3846](https://togithub.com/open-telemetry/opentelemetry-go/issues/3846)) - Decouple `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp/internal` from `go.opentelemetry.io/otel/exporters/otlp/internal` and `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal` using gotmpl. ([#​4407](https://togithub.com/open-telemetry/opentelemetry-go/issues/4407), [#​3846](https://togithub.com/open-telemetry/opentelemetry-go/issues/3846)) - Decouple `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal` from `go.opentelemetry.io/otel/exporters/otlp/internal` and `go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal` using gotmpl. ([#​4400](https://togithub.com/open-telemetry/opentelemetry-go/issues/4400), [#​3846](https://togithub.com/open-telemetry/opentelemetry-go/issues/3846)) - Decouple `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp/internal` from `go.opentelemetry.io/otel/exporters/otlp/internal` and `go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal` using gotmpl. ([#​4401](https://togithub.com/open-telemetry/opentelemetry-go/issues/4401), [#​3846](https://togithub.com/open-telemetry/opentelemetry-go/issues/3846)) - Do not block the metric SDK when OTLP metric exports are blocked in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` and `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`. ([#​3925](https://togithub.com/open-telemetry/opentelemetry-go/issues/3925), [#​4395](https://togithub.com/open-telemetry/opentelemetry-go/issues/4395)) - Do not append `_total` if the counter already has that suffix for the Prometheus exproter in `go.opentelemetry.io/otel/exporter/prometheus`. ([#​4373](https://togithub.com/open-telemetry/opentelemetry-go/issues/4373)) - Fix resource detection data race in `go.opentelemetry.io/otel/sdk/resource`. ([#​4409](https://togithub.com/open-telemetry/opentelemetry-go/issues/4409)) - Use the first-seen instrument name during instrument name conflicts in `go.opentelemetry.io/otel/sdk/metric`. ([#​4428](https://togithub.com/open-telemetry/opentelemetry-go/issues/4428)) ##### Deprecated - The `go.opentelemetry.io/otel/exporters/jaeger` package is deprecated. OpenTelemetry dropped support for Jaeger exporter in July 2023. Use `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp` or `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc` instead. ([#​4423](https://togithub.com/open-telemetry/opentelemetry-go/issues/4423)) - The `go.opentelemetry.io/otel/example/jaeger` package is deprecated. ([#​4423](https://togithub.com/open-telemetry/opentelemetry-go/issues/4423)) - The `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal` package is deprecated. ([#​4420](https://togithub.com/open-telemetry/opentelemetry-go/issues/4420)) - The `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal/oconf` package is deprecated. ([#​4420](https://togithub.com/open-telemetry/opentelemetry-go/issues/4420)) - The `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal/otest` package is deprecated. ([#​4420](https://togithub.com/open-telemetry/opentelemetry-go/issues/4420)) - The `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal/transform` package is deprecated. ([#​4420](https://togithub.com/open-telemetry/opentelemetry-go/issues/4420)) - The `go.opentelemetry.io/otel/exporters/otlp/internal` package is deprecated. ([#​4421](https://togithub.com/open-telemetry/opentelemetry-go/issues/4421)) - The `go.opentelemetry.io/otel/exporters/otlp/internal/envconfig` package is deprecated. ([#​4421](https://togithub.com/open-telemetry/opentelemetry-go/issues/4421)) - The `go.opentelemetry.io/otel/exporters/otlp/internal/retry` package is deprecated. ([#​4421](https://togithub.com/open-telemetry/opentelemetry-go/issues/4421)) - The `go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal` package is deprecated. ([#​4425](https://togithub.com/open-telemetry/opentelemetry-go/issues/4425)) - The `go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/envconfig` package is deprecated. ([#​4425](https://togithub.com/open-telemetry/opentelemetry-go/issues/4425)) - The `go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/otlpconfig` package is deprecated. ([#​4425](https://togithub.com/open-telemetry/opentelemetry-go/issues/4425)) - The `go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/otlptracetest` package is deprecated. ([#​4425](https://togithub.com/open-telemetry/opentelemetry-go/issues/4425)) - The `go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/retry` package is deprecated. ([#​4425](https://togithub.com/open-telemetry/opentelemetry-go/issues/4425)) - The `go.opentelemetry.io/otel/sdk/metric/aggregation` package is deprecated. Use the aggregation types added to `go.opentelemetry.io/otel/sdk/metric` instead. ([#​4435](https://togithub.com/open-telemetry/opentelemetry-go/issues/4435)) ##### New Contributors - [@​serdarkalayci](https://togithub.com/serdarkalayci) made their first contribution in [https://github.com/open-telemetry/opentelemetry-go/pull/4129](https://togithub.com/open-telemetry/opentelemetry-go/pull/4129) - [@​Jorropo](https://togithub.com/Jorropo) made their first contribution in [https://github.com/open-telemetry/opentelemetry-go/pull/4226](https://togithub.com/open-telemetry/opentelemetry-go/pull/4226) - [@​hexdigest](https://togithub.com/hexdigest) made their first contribution in [https://github.com/open-telemetry/opentelemetry-go/pull/3899](https://togithub.com/open-telemetry/opentelemetry-go/pull/3899) - [@​gkze](https://togithub.com/gkze) made their first contribution in [https://github.com/open-telemetry/opentelemetry-go/pull/4402](https://togithub.com/open-telemetry/opentelemetry-go/pull/4402) - [@​jaredjenkins](https://togithub.com/jaredjenkins) made their first contribution in [https://github.com/open-telemetry/opentelemetry-go/pull/4409](https://togithub.com/open-telemetry/opentelemetry-go/pull/4409) - [@​utezduyar](https://togithub.com/utezduyar) made their first contribution in [https://github.com/open-telemetry/opentelemetry-go/pull/4456](https://togithub.com/open-telemetry/opentelemetry-go/pull/4456) **Full Changelog**: open-telemetry/opentelemetry-go@v1.16.0...v1.17.0 </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **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/open-feature/flagd). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNi42Ni4wIiwidXBkYXRlZEluVmVyIjoiMzYuNjYuMCIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==--> --------- Signed-off-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>
Replaced all occurences of:
git grep -E "atomic\.[a-zA-Z]+Pointer\("
with
atomic.Pointer
.Line numbers debug symbols aside this code will produce the exact same machine code. It removes a non needed use of unsafe and replace it with compile time type checked generics.
Will help keep code cleaner in case any of this ever gets refactored in the future.