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

sdk/resource: Fix data race with emptyAttributes #4409

Merged
merged 14 commits into from Aug 7, 2023

Conversation

jaredjenkins
Copy link
Contributor

If mutliple instantiations of a Resources struct are happening in parallel, they can end up modifying the same underlying resource.

If mutliple instantiations of a Resources struct are happening
in parallel, they can end up modifying the same underlying resource.
@linux-foundation-easycla
Copy link

linux-foundation-easycla bot commented Aug 4, 2023

CLA Signed

The committers listed above are authorized under a signed CLA.

@MrAlias
Copy link
Contributor

MrAlias commented Aug 4, 2023

...they can end up modifying the same underlying resource.

How? Resources are immutable?

@MrAlias MrAlias added the blocked:CLA Waiting on CLA to be signed before progress can be made label Aug 4, 2023
@jaredjenkins
Copy link
Contributor Author

...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 emptyResource. Here is my sanitized stack trace:

==================
WARNING: DATA RACE
Write at 0x00010a8a2470 by goroutine 45:
  go.opentelemetry.io/otel/sdk/resource.NewWithAttributes()
      /Users/jared/.gvm/pkgsets/go1.20.1/global/pkg/mod/go.opentelemetry.io/otel/sdk@v1.16.0/resource/resource.go:63 +0x36c
  go.opentelemetry.io/otel/sdk/resource.Merge()
      /Users/jared/.gvm/pkgsets/go1.20.1/global/pkg/mod/go.opentelemetry.io/otel/sdk@v1.16.0/resource/resource.go:191 +0x84
  go.opentelemetry.io/otel/sdk/resource.detect()
      /Users/jared/.gvm/pkgsets/go1.20.1/global/pkg/mod/go.opentelemetry.io/otel/sdk@v1.16.0/resource/auto.go:73 +0x208
  go.opentelemetry.io/otel/sdk/resource.New()
      /Users/jared/.gvm/pkgsets/go1.20.1/global/pkg/mod/go.opentelemetry.io/otel/sdk@v1.16.0/resource/resource.go:54 
// OMITTED

Previous read at 0x00010a8a2470 by goroutine 44:
  go.opentelemetry.io/otel/sdk/resource.detect()
      /Users/jared/.gvm/pkgsets/go1.20.1/global/pkg/mod/go.opentelemetry.io/otel/sdk@v1.16.0/resource/auto.go:77 +0x2f8
  go.opentelemetry.io/otel/sdk/resource.New()
      /Users/jared/.gvm/pkgsets/go1.20.1/global/pkg/mod/go.opentelemetry.io/otel/sdk@v1.16.0/resource/resource.go:54 +0x1bc

My calling code inits a resource in the test but otherwise there is no shared state.

@jaredjenkins jaredjenkins reopened this Aug 4, 2023
@jaredjenkins
Copy link
Contributor Author

@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?

@MrAlias
Copy link
Contributor

MrAlias commented Aug 4, 2023

@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.

@jaredjenkins
Copy link
Contributor Author

jaredjenkins commented Aug 4, 2023 via email

@codecov
Copy link

codecov bot commented Aug 4, 2023

Codecov Report

Merging #4409 (d111810) into main (e1e6b96) will decrease coverage by 0.1%.
The diff coverage is 75.0%.

Additional details and impacted files

Impacted file tree graph

@@           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             
Files Changed Coverage Δ
sdk/resource/resource.go 76.5% <75.0%> (ø)

... and 1 file with indirect coverage changes

@jaredjenkins
Copy link
Contributor Author

Got a repro of the failure without the change:

==================
WARNING: DATA RACE
Write at 0x00010174d090 by goroutine 143:
  go.opentelemetry.io/otel/sdk/resource.NewWithAttributes()
      /Users/jared/go/src/github.com/open-telemetry/opentelemetry-go/sdk/resource/resource.go:63 +0x5c
  go.opentelemetry.io/otel/sdk/resource_test.fakeDetector.Detect()
      /Users/jared/go/src/github.com/open-telemetry/opentelemetry-go/sdk/resource/resource_test.go:797 +0x34
  go.opentelemetry.io/otel/sdk/resource_test.(*fakeDetector).Detect()
      <autogenerated>:1 +0x20
  go.opentelemetry.io/otel/sdk/resource.detect()
      /Users/jared/go/src/github.com/open-telemetry/opentelemetry-go/sdk/resource/auto.go:66 +0xd8
  go.opentelemetry.io/otel/sdk/resource.Detect()
      /Users/jared/go/src/github.com/open-telemetry/opentelemetry-go/sdk/resource/auto.go:50 +0xc0
  go.opentelemetry.io/otel/sdk/resource_test.TestResourceRace.func1()
      /Users/jared/go/src/github.com/open-telemetry/opentelemetry-go/sdk/resource/resource_test.go:785 +0x7c

Previous write at 0x00010174d090 by goroutine 144:
  go.opentelemetry.io/otel/sdk/resource.NewWithAttributes()
      /Users/jared/go/src/github.com/open-telemetry/opentelemetry-go/sdk/resource/resource.go:63 +0x5c
  go.opentelemetry.io/otel/sdk/resource_test.fakeDetector.Detect()
      /Users/jared/go/src/github.com/open-telemetry/opentelemetry-go/sdk/resource/resource_test.go:797 +0x34
  go.opentelemetry.io/otel/sdk/resource_test.(*fakeDetector).Detect()
      <autogenerated>:1 +0x20
  go.opentelemetry.io/otel/sdk/resource.detect()
      /Users/jared/go/src/github.com/open-telemetry/opentelemetry-go/sdk/resource/auto.go:66 +0xd8
  go.opentelemetry.io/otel/sdk/resource.Detect()
      /Users/jared/go/src/github.com/open-telemetry/opentelemetry-go/sdk/resource/auto.go:50 +0xc0
  go.opentelemetry.io/otel/sdk/resource_test.TestResourceRace.func1()
      /Users/jared/go/src/github.com/open-telemetry/opentelemetry-go/sdk/resource/resource_test.go:785 +0x7c

Goroutine 143 (running) created at:
  go.opentelemetry.io/otel/sdk/resource_test.TestResourceRace()
      /Users/jared/go/src/github.com/open-telemetry/opentelemetry-go/sdk/resource/resource_test.go:782 +0x58
  testing.tRunner()
      /Users/jared/.gvm/gos/go1.20.1/src/testing/testing.go:1576 +0x180
  testing.(*T).Run.func1()
      /Users/jared/.gvm/gos/go1.20.1/src/testing/testing.go:1629 +0x40

Goroutine 144 (finished) created at:
  go.opentelemetry.io/otel/sdk/resource_test.TestResourceRace()
      /Users/jared/go/src/github.com/open-telemetry/opentelemetry-go/sdk/resource/resource_test.go:782 +0x58
  testing.tRunner()
      /Users/jared/.gvm/gos/go1.20.1/src/testing/testing.go:1576 +0x180
  testing.(*T).Run.func1()
      /Users/jared/.gvm/gos/go1.20.1/src/testing/testing.go:1629 +0x40
==================
--- FAIL: TestResourceRace (0.00s)
    testing.go:1446: race detected during execution of test

@jaredjenkins
Copy link
Contributor Author

jaredjenkins commented Aug 5, 2023

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: @.>

Should be resolved by Monday. We've already signed the CLA for corporate contributions.

@pellared pellared removed the blocked:CLA Waiting on CLA to be signed before progress can be made label Aug 7, 2023
Copy link
Member

@pellared pellared left a 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 👍

sdk/resource/resource_test.go Outdated Show resolved Hide resolved
sdk/resource/resource_test.go Outdated Show resolved Hide resolved
sdk/resource/resource_test.go Outdated Show resolved Hide resolved
sdk/resource/resource_test.go Outdated Show resolved Hide resolved
jaredjenkins and others added 2 commits August 7, 2023 05:14
Co-authored-by: Robert Pająk <pellared@hotmail.com>
Co-authored-by: Robert Pająk <pellared@hotmail.com>
jaredjenkins and others added 4 commits August 7, 2023 05:15
Co-authored-by: Robert Pająk <pellared@hotmail.com>
Co-authored-by: Robert Pająk <pellared@hotmail.com>
@jaredjenkins jaredjenkins changed the title Fix ASAN bug with emptyAttributes Fix concurrency-safety bug with emptyAttributes Aug 7, 2023
CHANGELOG.md Outdated Show resolved Hide resolved
Co-authored-by: Robert Pająk <pellared@hotmail.com>
@jaredjenkins
Copy link
Contributor Author

Thanks for the guidance @pellared!

@pellared pellared changed the title Fix concurrency-safety bug with emptyAttributes Fix data race with emptyAttributes Aug 7, 2023
@pellared pellared changed the title Fix data race with emptyAttributes sdk/resource: Fix data race with emptyAttributes Aug 7, 2023
@MrAlias MrAlias added bug Something isn't working area:resources Part of OpenTelemetry resources labels Aug 7, 2023
@MrAlias MrAlias added this to the v1.17.0/v0.40.0 milestone Aug 7, 2023
@MrAlias MrAlias merged commit b221025 into open-telemetry:main Aug 7, 2023
21 of 22 checks passed
Kavindu-Dodan added a commit to open-feature/flagd that referenced this pull request Sep 8, 2023
[![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`.
([#&#8203;4244](https://togithub.com/open-telemetry/opentelemetry-go/issues/4244))
- Export the `PeriodicReader` struct in
`go.opentelemetry.io/otel/sdk/metric`.
([#&#8203;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.
([#&#8203;4245](https://togithub.com/open-telemetry/opentelemetry-go/issues/4245))
- Export the `Exporter` struct in
`go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc`.
([#&#8203;4272](https://togithub.com/open-telemetry/opentelemetry-go/issues/4272))
- Export the `Exporter` struct in
`go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`.
([#&#8203;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.
([#&#8203;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.
([#&#8203;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`.
([#&#8203;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.
([#&#8203;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`.
([#&#8203;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.
([#&#8203;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`
([#&#8203;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`.
([#&#8203;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.
([#&#8203;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.
([#&#8203;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.
([#&#8203;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`.
([#&#8203;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.
([#&#8203;4210](https://togithub.com/open-telemetry/opentelemetry-go/issues/4210))
- `NewManualReader` in `go.opentelemetry.io/otel/sdk/metric` returns
`*ManualReader` instead of `Reader`.
([#&#8203;4244](https://togithub.com/open-telemetry/opentelemetry-go/issues/4244))
- `NewPeriodicReader` in `go.opentelemetry.io/otel/sdk/metric` returns
`*PeriodicReader` instead of `Reader`.
([#&#8203;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`.
([#&#8203;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`.
([#&#8203;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`.
([#&#8203;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`.
([#&#8203;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.
([#&#8203;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.
([#&#8203;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.
([#&#8203;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.
([#&#8203;4356](https://togithub.com/open-telemetry/opentelemetry-go/issues/4356),
[#&#8203;4377](https://togithub.com/open-telemetry/opentelemetry-go/issues/4377))
- Upgrade all use of `go.opentelemetry.io/otel/semconv` to use
`v1.21.0`.
([#&#8203;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`.
([#&#8203;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`.
([#&#8203;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.
([#&#8203;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.
([#&#8203;4375](https://togithub.com/open-telemetry/opentelemetry-go/issues/4375))

##### Fixed

- Correctly format log messages from the
`go.opentelemetry.io/otel/exporters/zipkin` exporter.
([#&#8203;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.
([#&#8203;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`.
([#&#8203;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`.
([#&#8203;4337](https://togithub.com/open-telemetry/opentelemetry-go/issues/4337))
- Detect duplicate instruments for case-insensitive names in
`go.opentelemetry.io/otel/sdk/metric`.
([#&#8203;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`.
([#&#8203;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.
([#&#8203;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`.
([#&#8203;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`.
([#&#8203;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`.
([#&#8203;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.
([#&#8203;4397](https://togithub.com/open-telemetry/opentelemetry-go/issues/4397),
[#&#8203;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.
([#&#8203;4404](https://togithub.com/open-telemetry/opentelemetry-go/issues/4404),
[#&#8203;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.
([#&#8203;4407](https://togithub.com/open-telemetry/opentelemetry-go/issues/4407),
[#&#8203;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.
([#&#8203;4400](https://togithub.com/open-telemetry/opentelemetry-go/issues/4400),
[#&#8203;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.
([#&#8203;4401](https://togithub.com/open-telemetry/opentelemetry-go/issues/4401),
[#&#8203;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`.
([#&#8203;3925](https://togithub.com/open-telemetry/opentelemetry-go/issues/3925),
[#&#8203;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`.
([#&#8203;4373](https://togithub.com/open-telemetry/opentelemetry-go/issues/4373))
- Fix resource detection data race in
`go.opentelemetry.io/otel/sdk/resource`.
([#&#8203;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`.
([#&#8203;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.
([#&#8203;4423](https://togithub.com/open-telemetry/opentelemetry-go/issues/4423))
- The `go.opentelemetry.io/otel/example/jaeger` package is deprecated.
([#&#8203;4423](https://togithub.com/open-telemetry/opentelemetry-go/issues/4423))
- The `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal`
package is deprecated.
([#&#8203;4420](https://togithub.com/open-telemetry/opentelemetry-go/issues/4420))
- The
`go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal/oconf`
package is deprecated.
([#&#8203;4420](https://togithub.com/open-telemetry/opentelemetry-go/issues/4420))
- The
`go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal/otest`
package is deprecated.
([#&#8203;4420](https://togithub.com/open-telemetry/opentelemetry-go/issues/4420))
- The
`go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal/transform`
package is deprecated.
([#&#8203;4420](https://togithub.com/open-telemetry/opentelemetry-go/issues/4420))
- The `go.opentelemetry.io/otel/exporters/otlp/internal` package is
deprecated.
([#&#8203;4421](https://togithub.com/open-telemetry/opentelemetry-go/issues/4421))
- The `go.opentelemetry.io/otel/exporters/otlp/internal/envconfig`
package is deprecated.
([#&#8203;4421](https://togithub.com/open-telemetry/opentelemetry-go/issues/4421))
- The `go.opentelemetry.io/otel/exporters/otlp/internal/retry` package
is deprecated.
([#&#8203;4421](https://togithub.com/open-telemetry/opentelemetry-go/issues/4421))
- The `go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal`
package is deprecated.
([#&#8203;4425](https://togithub.com/open-telemetry/opentelemetry-go/issues/4425))
- The
`go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/envconfig`
package is deprecated.
([#&#8203;4425](https://togithub.com/open-telemetry/opentelemetry-go/issues/4425))
- The
`go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/otlpconfig`
package is deprecated.
([#&#8203;4425](https://togithub.com/open-telemetry/opentelemetry-go/issues/4425))
- The
`go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/otlptracetest`
package is deprecated.
([#&#8203;4425](https://togithub.com/open-telemetry/opentelemetry-go/issues/4425))
- The `go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/retry`
package is deprecated.
([#&#8203;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.
([#&#8203;4435](https://togithub.com/open-telemetry/opentelemetry-go/issues/4435))

##### New Contributors

- [@&#8203;serdarkalayci](https://togithub.com/serdarkalayci) made their
first contribution in
[open-telemetry/opentelemetry-go#4129
- [@&#8203;Jorropo](https://togithub.com/Jorropo) made their first
contribution in
[open-telemetry/opentelemetry-go#4226
- [@&#8203;hexdigest](https://togithub.com/hexdigest) made their first
contribution in
[open-telemetry/opentelemetry-go#3899
- [@&#8203;gkze](https://togithub.com/gkze) made their first
contribution in
[open-telemetry/opentelemetry-go#4402
- [@&#8203;jaredjenkins](https://togithub.com/jaredjenkins) made their
first contribution in
[open-telemetry/opentelemetry-go#4409
- [@&#8203;utezduyar](https://togithub.com/utezduyar) made their first
contribution in
[open-telemetry/opentelemetry-go#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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area:resources Part of OpenTelemetry resources bug Something isn't working
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants