-
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
sdk/resource: Fix data race with emptyAttributes #4409
Conversation
If mutliple instantiations of a Resources struct are happening in parallel, they can end up modifying the same underlying resource.
How? Resources are immutable? |
If you have two different goroutines trying to create Resources, it looks like they can end up merging into the
My calling code inits a resource in the test but otherwise there is no shared state. |
@MrAlias it looks like this is actually stemming from the writing of the schemaVersion field:
in my case, auto.go takes a copy of the |
Ah, gotcha 👍. Thanks for catching this. Please be sure to sign the CLA so we can accept these changes. |
Yep. I am waiting on my employer to give the go ahead.
…On Fri, Aug 4, 2023 at 12:15 PM Tyler Yahn ***@***.***> wrote:
@MrAlias <https://github.com/MrAlias> it looks like this is actually
stemming from the writing of the schemaVersion field:
func NewWithAttributes(schemaURL string, attrs ...attribute.KeyValue) *Resource {
resource := NewSchemaless(attrs...)
resource.schemaURL = schemaURL
return resource
}
in my case, auto.go takes a copy of the emptyResource struct while we're
attempting to write to it's schema version. In any case, making
emptyResponse a global doesn't seem worth it?
Ah, gotcha 👍. Thanks for catching this.
Please be sure to sign the CLA so we can accept these changes.
—
Reply to this email directly, view it on GitHub
<#4409 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AAB74BWXN2FM3YHUFL32JC3XTUU3HANCNFSM6AAAAAA3ELPUHM>
.
You are receiving this because you modified the open/close state.Message
ID: ***@***.***>
|
Codecov Report
Additional details and impacted files@@ Coverage Diff @@
## main #4409 +/- ##
=======================================
- Coverage 83.5% 83.5% -0.1%
=======================================
Files 229 229
Lines 18653 18653
=======================================
- Hits 15586 15584 -2
- Misses 2749 2751 +2
Partials 318 318
|
Got a repro of the failure without the change:
|
Should be resolved by Monday. We've already signed the CLA for corporate contributions. |
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.
Please update the changelog.
In general looks OK 👍
Co-authored-by: Robert Pająk <pellared@hotmail.com>
Co-authored-by: Robert Pająk <pellared@hotmail.com>
Co-authored-by: Robert Pająk <pellared@hotmail.com>
Co-authored-by: Robert Pająk <pellared@hotmail.com>
Co-authored-by: Robert Pająk <pellared@hotmail.com>
Thanks for the guidance @pellared! |
[![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>
If mutliple instantiations of a Resources struct are happening in parallel, they can end up modifying the same underlying resource.