1
0
mirror of https://github.com/open-telemetry/opentelemetry-go.git synced 2026-06-03 18:35:08 +02:00
Commit Graph

1192 Commits

Author SHA1 Message Date
Oleksandr Redko 60161f97c4 refactor: replace uint64 and int32 with atomic types in tests (#7941)
Because [atomic types](https://go.dev/doc/go1.19#atomic_types) are
easier to use.
2026-03-04 17:20:31 +01:00
Tyler Yahn 5b5c2c5d6d Upgrade to semconv/v1.40.0 (#7991) 2026-03-04 12:13:40 +01:00
renovate[bot] a18614cbc2 chore(deps): update module github.com/securego/gosec/v2 to v2.24.7 (#7988)
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
|
[github.com/securego/gosec/v2](https://redirect.github.com/securego/gosec)
| `v2.23.0` → `v2.24.7` |
![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fsecurego%2fgosec%2fv2/v2.24.7?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fsecurego%2fgosec%2fv2/v2.23.0/v2.24.7?slim=true)
|

---

> [!WARNING]
> Some dependencies could not be looked up. Check the [Dependency
Dashboard](../issues/5322) for more information.

---

### Release Notes

<details>
<summary>securego/gosec (github.com/securego/gosec/v2)</summary>

###
[`v2.24.7`](https://redirect.github.com/securego/gosec/releases/tag/v2.24.7)

[Compare
Source](https://redirect.github.com/securego/gosec/compare/v2.24.6...v2.24.7)

#### Changelog

-
[`bb17e42`](https://redirect.github.com/securego/gosec/commit/bb17e422fc34bf4c0a2e5cab9d07dc45a68c040c)
Ignore nosec comments in action integration workflow to generate some
warnings
([#&#8203;1573](https://redirect.github.com/securego/gosec/issues/1573))
-
[`e1502ad`](https://redirect.github.com/securego/gosec/commit/e1502ad21653d1c6717e33f1221c3ce2d5c8581f)
Add a workflow for action integration test
([#&#8203;1571](https://redirect.github.com/securego/gosec/issues/1571))
-
[`f8691bd`](https://redirect.github.com/securego/gosec/commit/f8691bd77bab5430ccb538e6f253275e82577afc)
fix(sarif): avoid invalid null relationships in SARIF output
([#&#8203;1569](https://redirect.github.com/securego/gosec/issues/1569))
-
[`ade1d0e`](https://redirect.github.com/securego/gosec/commit/ade1d0e0a04ec8ae98da98614d42524621d40df2)
chore: migrate gosec container image references to GHCR
([#&#8203;1567](https://redirect.github.com/securego/gosec/issues/1567))

###
[`v2.24.6`](https://redirect.github.com/securego/gosec/releases/tag/v2.24.6)

[Compare
Source](https://redirect.github.com/securego/gosec/compare/v2.24.5...v2.24.6)

#### Changelog

-
[`88835e8`](https://redirect.github.com/securego/gosec/commit/88835e86bba381290c2f60a1c73610995b1502eb)
Update gorelease to use the latest cosign bundle argument
([#&#8203;1565](https://redirect.github.com/securego/gosec/issues/1565))

###
[`v2.24.5`](https://redirect.github.com/securego/gosec/compare/v2.24.4...v2.24.5)

[Compare
Source](https://redirect.github.com/securego/gosec/compare/v2.24.4...v2.24.5)

###
[`v2.24.4`](https://redirect.github.com/securego/gosec/compare/v2.24.3...v2.24.4)

[Compare
Source](https://redirect.github.com/securego/gosec/compare/v2.24.3...v2.24.4)

###
[`v2.24.3`](https://redirect.github.com/securego/gosec/compare/v2.24.2...v2.24.3)

[Compare
Source](https://redirect.github.com/securego/gosec/compare/v2.24.2...v2.24.3)

###
[`v2.24.2`](https://redirect.github.com/securego/gosec/compare/v2.24.1...v2.24.2)

[Compare
Source](https://redirect.github.com/securego/gosec/compare/v2.24.1...v2.24.2)

###
[`v2.24.1`](https://redirect.github.com/securego/gosec/compare/v2.24.0...v2.24.1)

[Compare
Source](https://redirect.github.com/securego/gosec/compare/v2.24.0...v2.24.1)

###
[`v2.24.0`](https://redirect.github.com/securego/gosec/releases/tag/v2.24.0)

[Compare
Source](https://redirect.github.com/securego/gosec/compare/v2.23.0...v2.24.0)

#### Changelog

-
[`271492b`](https://redirect.github.com/securego/gosec/commit/271492bcd930ef72dfb9d00e5bb9544b3b407fb5)
fix: G704 false positive on const URL
([#&#8203;1551](https://redirect.github.com/securego/gosec/issues/1551))
-
[`1341aea`](https://redirect.github.com/securego/gosec/commit/1341aeadb4c334014c4834c745344edb9dcf85b0)
fix(G705): eliminate false positive for non-HTTP io.Writer
([#&#8203;1550](https://redirect.github.com/securego/gosec/issues/1550))
-
[`f2262c8`](https://redirect.github.com/securego/gosec/commit/f2262c88ffdfc9eb7be8444db19caa17cc71810f)
G120: avoid false positive when MaxBytesReader is applied in middleware
([#&#8203;1547](https://redirect.github.com/securego/gosec/issues/1547))
-
[`5b580c7`](https://redirect.github.com/securego/gosec/commit/5b580c76e4714fa553b2ceb8169a071e45bf6428)
Fix G602 regression coverage for issue
[#&#8203;1545](https://redirect.github.com/securego/gosec/issues/1545)
and stabilize G117 TOML test dependency
([#&#8203;1546](https://redirect.github.com/securego/gosec/issues/1546))
-
[`eba2d15`](https://redirect.github.com/securego/gosec/commit/eba2d1582b13e37d5b6c991b643827bc60e58156)
taint: skip `context.Context` arguments during taint propagation to fix
false positives
([#&#8203;1543](https://redirect.github.com/securego/gosec/issues/1543))
-
[`a6381c1`](https://redirect.github.com/securego/gosec/commit/a6381c1e2fe9a9a33ef105c76bea3191402ea4b3)
test: add missing rules to formatter report tests
([#&#8203;1540](https://redirect.github.com/securego/gosec/issues/1540))
-
[`fea9725`](https://redirect.github.com/securego/gosec/commit/fea9725934065d3dd5c96352f89f75d117ac12f6)
chore(deps): update all dependencies
([#&#8203;1541](https://redirect.github.com/securego/gosec/issues/1541))
-
[`f3e2fac`](https://redirect.github.com/securego/gosec/commit/f3e2fac4d58b7eca54307cd40ce2a836a12e4d95)
Regenrate the TLS config rule
([#&#8203;1539](https://redirect.github.com/securego/gosec/issues/1539))
-
[`200461f`](https://redirect.github.com/securego/gosec/commit/200461fcf74ed836305bf95f72568c20925730c5)
Improve documentation
([#&#8203;1538](https://redirect.github.com/securego/gosec/issues/1538))
-
[`078a62a`](https://redirect.github.com/securego/gosec/commit/078a62afc3331206fec1cd9a03637983ec4f9fc8)
Expand analyzer-core test coverage for orchestration, go/analysis
adapter logic, and taint integration
([#&#8203;1537](https://redirect.github.com/securego/gosec/issues/1537))
-
[`ffdc620`](https://redirect.github.com/securego/gosec/commit/ffdc6205c82278cee0b62923814141923794219e)
Add unit tests for CLI orchestration, TLS config generation, and SSA
cache behavior
([#&#8203;1536](https://redirect.github.com/securego/gosec/issues/1536))
-
[`c13a486`](https://redirect.github.com/securego/gosec/commit/c13a48626bc160ef1caa293679044b5667d4d8ef)
Add G707 taint analyzer for SMTP command/header injection
([#&#8203;1535](https://redirect.github.com/securego/gosec/issues/1535))
-
[`f61ed31`](https://redirect.github.com/securego/gosec/commit/f61ed314c2467116ec3a5126150cb2b29a623406)
Add G123 analyzer for tls.VerifyPeerCertificate resumption bypass risk
([#&#8203;1534](https://redirect.github.com/securego/gosec/issues/1534))
-
[`b568aa1`](https://redirect.github.com/securego/gosec/commit/b568aa1445e110ed12abe5c2433b3cfbcd0a5935)
Add G122 SSA analyzer for filepath.Walk/WalkDir symlink TOCTOU race
risks
([#&#8203;1532](https://redirect.github.com/securego/gosec/issues/1532))
-
[`1735e5a`](https://redirect.github.com/securego/gosec/commit/1735e5a9acd155702b8c6137d323df886c0252b5)
fix(G602): avoid false positives for range-over-array indexing
([#&#8203;1531](https://redirect.github.com/securego/gosec/issues/1531))
-
[`caf93d0`](https://redirect.github.com/securego/gosec/commit/caf93d07f10ef7d07006011b17f1d9bd218b5a9d)
Improve taint analyzer performance with shared SSA cache, parallel
analyzer execution, and CI regression guard
([#&#8203;1530](https://redirect.github.com/securego/gosec/issues/1530))
-
[`bd11fbe`](https://redirect.github.com/securego/gosec/commit/bd11fbe2bacb0abf1e541df8b6ec6b040bbe2723)
fix: taint analysis false positives with G703,G705
([#&#8203;1522](https://redirect.github.com/securego/gosec/issues/1522))
-
[`e34e8dd`](https://redirect.github.com/securego/gosec/commit/e34e8dd8e880694cfa801d79977e2d9973df3fa1)
Extend the G117 rule to cover other types of serialization such as
yaml/xml/toml
([#&#8203;1529](https://redirect.github.com/securego/gosec/issues/1529))
-
[`b940702`](https://redirect.github.com/securego/gosec/commit/b940702d5e385d1a68def10326b1658e780655fe)
Fix the G117 rule to take the JSON serialization into account
([#&#8203;1528](https://redirect.github.com/securego/gosec/issues/1528))
-
[`4f84627`](https://redirect.github.com/securego/gosec/commit/4f846273804abaf7e040f77b26bf2866336e8af9)
(docs) fix justification format
([#&#8203;1524](https://redirect.github.com/securego/gosec/issues/1524))
-
[`36ba72b`](https://redirect.github.com/securego/gosec/commit/36ba72bb7f91306f5210a821f409696c03dcbf2b)
Add G121 analyzer for unsafe CORS bypass patterns in
CrossOriginProtection
([#&#8203;1521](https://redirect.github.com/securego/gosec/issues/1521))
-
[`238f982`](https://redirect.github.com/securego/gosec/commit/238f9823256b1c4a6d7b0ccd7fa0f2ce1123c820)
Add G120 SSA analyzer for unbounded form parsing in HTTP handlers
([#&#8203;1520](https://redirect.github.com/securego/gosec/issues/1520))
-
[`89cde27`](https://redirect.github.com/securego/gosec/commit/89cde277b5e2b4a5dc47eb710911c51a0cb33b63)
Add G119 analyzer for unsafe redirect header propagation in
CheckRedirect callbacks
([#&#8203;1519](https://redirect.github.com/securego/gosec/issues/1519))
-
[`14fdd9c`](https://redirect.github.com/securego/gosec/commit/14fdd9cb07c02ab1506fcc336f49c84bf27a5c2d)
Fix G115 false positives and negatives (Issue
[#&#8203;1501](https://redirect.github.com/securego/gosec/issues/1501))
([#&#8203;1518](https://redirect.github.com/securego/gosec/issues/1518))
-
[`cec54ec`](https://redirect.github.com/securego/gosec/commit/cec54ec685eda3083e2ab1adf72b6b7ec6cfdb6e)
chore(deps): update all dependencies
([#&#8203;1517](https://redirect.github.com/securego/gosec/issues/1517))
-
[`2b2077e`](https://redirect.github.com/securego/gosec/commit/2b2077e921b56c7ce6545cccceea0556ff8d5d91)
Add G118 SSA analyzer for context propagation failures that can cause
goroutine/resource leaks
([#&#8203;1516](https://redirect.github.com/securego/gosec/issues/1516))
-
[`a7666f3`](https://redirect.github.com/securego/gosec/commit/a7666f3c70c94d07dfb03e81613fed34bccc89ae)
Add G113: Detect HTTP Request Smuggling via conflicting headers
(CVE-2025-22891, CWE-444)
([#&#8203;1515](https://redirect.github.com/securego/gosec/issues/1515))
-
[`47f8b52`](https://redirect.github.com/securego/gosec/commit/47f8b52fb8700c7ba017ffcc0ea6a32c83e33115)
Add G408: SSH PublicKeyCallback Authentication Bypass Analyzer
([#&#8203;1513](https://redirect.github.com/securego/gosec/issues/1513))
-
[`4f1f362`](https://redirect.github.com/securego/gosec/commit/4f1f362671654660f7145c3c8655ffeaed037d55)
Add more unit tests to improve coverage
([#&#8203;1512](https://redirect.github.com/securego/gosec/issues/1512))
-
[`9344582`](https://redirect.github.com/securego/gosec/commit/9344582ee4bd87b8fa5bc2e483d90fa661f8aa71)
Improve test coverage in various areas
([#&#8203;1511](https://redirect.github.com/securego/gosec/issues/1511))
-
[`8d1b2c6`](https://redirect.github.com/securego/gosec/commit/8d1b2c63ae44e315fb0232813e535891ff0568fc)
Imprve the test coverage
([#&#8203;1510](https://redirect.github.com/securego/gosec/issues/1510))
-
[`993c1c4`](https://redirect.github.com/securego/gosec/commit/993c1c4da2d4426f7567591e23f53ee9f613d07c)
Fix incorrect detection of fixed iv in G407
([#&#8203;1509](https://redirect.github.com/securego/gosec/issues/1509))
-
[`8668b74`](https://redirect.github.com/securego/gosec/commit/8668b748925d8995cf7712d22bde62cbc96f2304)
Add support for go 1.26.x and removed support for go 1.24.x
([#&#8203;1508](https://redirect.github.com/securego/gosec/issues/1508))
-
[`514225c`](https://redirect.github.com/securego/gosec/commit/514225c8cb01a6bab714db1dd557aeb0d7ab9dc9)
Fix the sonar report to follow the latest schema
([#&#8203;1507](https://redirect.github.com/securego/gosec/issues/1507))
-
[`000384e`](https://redirect.github.com/securego/gosec/commit/000384e510a84a1e2a1118e0fbc56518d290113d)
fix: broken taint analysis causing false positives
([#&#8203;1506](https://redirect.github.com/securego/gosec/issues/1506))
-
[`616192c`](https://redirect.github.com/securego/gosec/commit/616192c9d92792998e2ff38530c080cd0fe293a8)
fix: panic on float constants in overflow analyzer
([#&#8203;1505](https://redirect.github.com/securego/gosec/issues/1505))
-
[`79956a3`](https://redirect.github.com/securego/gosec/commit/79956a3b4cdedc9a4cde5f567c57fc8b367448cf)
fix: panic when scanning multi-module repos from root
([#&#8203;1504](https://redirect.github.com/securego/gosec/issues/1504))
-
[`5736e8b`](https://redirect.github.com/securego/gosec/commit/5736e8b88b6ca97fc7e09ef1bf24b205ab35fd9c)
fix: G602 false positive for array element access
([#&#8203;1499](https://redirect.github.com/securego/gosec/issues/1499))
-
[`1b7e1e9`](https://redirect.github.com/securego/gosec/commit/1b7e1e94bc2077fc1adccfc1358399fad2958d5a)
Update gosec to version v2.23.0 in the Github action
([#&#8203;1496](https://redirect.github.com/securego/gosec/issues/1496))

</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 is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/open-telemetry/opentelemetry-go).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My40OC4xIiwidXBkYXRlZEluVmVyIjoiNDMuNDguMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiU2tpcCBDaGFuZ2Vsb2ciLCJkZXBlbmRlbmNpZXMiXX0=-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Tyler Yahn <codingalias@gmail.com>
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
2026-03-03 11:59:53 -08:00
Tyler Yahn d5febb955e Drop support for Go 1.24 (#7984) 2026-03-02 22:25:05 +01:00
Robert Pająk 4575a9774d Release 1.41.0/0.63.0/0.17.0/0.0.15 (#7977)
This release is the last to support [Go 1.24].
The next release will require at least [Go 1.25].

### Added

- Support testing of [Go 1.26]. (#7902)

### Fixed

- Update `Baggage` in `go.opentelemetry.io/otel/propagation` and `Parse`
and `New` in `go.opentelemetry.io/otel/baggage` to comply with W3C
Baggage specification limits.
`New` and `Parse` now return partial baggage along with an error when
limits are exceeded.
Errors from baggage extraction are reported to the global error handler.
(#7880)

[Go 1.26]: https://go.dev/doc/go1.26
[Go 1.25]: https://go.dev/doc/go1.25
[Go 1.24]: https://go.dev/doc/go1.24
2026-03-02 19:39:57 +01:00
renovate[bot] 0f1a22484e chore(deps): update module github.com/securego/gosec/v2 to v2.23.0 (#7899) 2026-02-28 21:51:27 +01:00
renovate[bot] dbeb92241a fix(deps): update module golang.org/x/sys to v0.41.0 (#7885)
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [golang.org/x/sys](https://pkg.go.dev/golang.org/x/sys) | [`v0.40.0` →
`v0.41.0`](https://cs.opensource.google/go/x/sys/+/refs/tags/v0.40.0...refs/tags/v0.41.0)
|
![age](https://developer.mend.io/api/mc/badges/age/go/golang.org%2fx%2fsys/v0.41.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/go/golang.org%2fx%2fsys/v0.40.0/v0.41.0?slim=true)
|

---

> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.

---

### 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 is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/open-telemetry/opentelemetry-go).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi45NS4yIiwidXBkYXRlZEluVmVyIjoiNDIuOTUuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiU2tpcCBDaGFuZ2Vsb2ciLCJkZXBlbmRlbmNpZXMiXX0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-09 09:16:59 +01:00
Nesterov Yehor e0ad47f3fe sdk/log/observ: guard LogProcessed with Enabled (#7848)
Guards SLP.LogProcessed with processed.Enabled(ctx) to avoid building
metric
options/attributes when the processed counter is disabled.

BenchmarkSLP (noop MeterProvider):

LogProcessedWithError: ~106 ns/op, 232 B/op, 3 allocs/op -> ~0.46 ns/op,
0 B/op, 0 allocs/op
No behavior change when enabled; existing tests cover enabled path.
I don't believe this is a "notable" change, so doesn't need a CHANGELOG
entry.
Issue: #7800

Co-authored-by: Robert Pająk <pellared@hotmail.com>
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
2026-02-03 13:43:20 -08:00
Tyler Yahn a3a5317c5c Release v1.40.0 (#7859)
### Added

- Add `Enabled` method to all synchronous instrument interfaces
(`Float64Counter`, `Float64UpDownCounter`, `Float64Histogram`,
`Float64Gauge`, `Int64Counter`, `Int64UpDownCounter`, `Int64Histogram`,
`Int64Gauge`,) in `go.opentelemetry.io/otel/metric`. This stabilizes the
synchronous instrument enabled feature, allowing users to check if an
instrument will process measurements before performing computationally
expensive operations. (#7763)
- Add `AlwaysRecord` sampler in `go.opentelemetry.io/otel/sdk/trace`.
(#7724)
- Add `go.opentelemetry.io/otel/semconv/v1.39.0` package. The package
contains semantic conventions from the `v1.39.0` version of the
OpenTelemetry Semantic Conventions. See the [migration
documentation](https://github.com/open-telemetry/opentelemetry-go/blob/298cbedf256b7a9ab3c21e41fc5e3e6d6e4e94aa/semconv/v1.39.0/MIGRATION.md)
for information on how to upgrade from
`go.opentelemetry.io/otel/semconv/v1.38.0.` (#7783, #7789)

### Changed

- `Exporter` in `go.opentelemetry.io/otel/exporter/prometheus` ignores
metrics with the scope `go.opentelemetry.io/contrib/bridges/prometheus`.
This prevents scrape failures when the Prometheus exporter is
misconfigured to get data from the Prometheus bridge. (#7688)
- Improve performance of concurrent histogram measurements in
`go.opentelemetry.io/otel/sdk/metric`. (#7474)
- Add experimental observability metrics in
`go.opentelemetry.io/otel/exporters/stdout/stdoutmetric`. (#7492)
- Improve the concurrent performance of `HistogramReservoir` in
`go.opentelemetry.io/otel/sdk/metric/exemplar` by 4x. (#7443)
- Improve performance of concurrent synchronous gauge measurements in
`go.opentelemetry.io/otel/sdk/metric`. (#7478)
- Improve performance of concurrent exponential histogram measurements
in `go.opentelemetry.io/otel/sdk/metric`. (#7702)
- Improve the concurrent performance of `FixedSizeReservoir` in
`go.opentelemetry.io/otel/sdk/metric/exemplar`. (#7447)
- The `rpc.grpc.status_code` attribute in the experimental metrics
emitted from
`go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc` is
replaced with the `rpc.response.status_code` attribute to align with the
semantic conventions. (#7854)
- The `rpc.grpc.status_code` attribute in the experimental metrics
emitted from
`go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc` is
replaced with the `rpc.response.status_code` attribute to align with the
semantic conventions. (#7854)

### Fixed

- Fix bad log message when key-value pairs are dropped because of key
duplication in `go.opentelemetry.io/otel/sdk/log`. (#7662)
- Fix `DroppedAttributes` on `Record` in
`go.opentelemetry.io/otel/sdk/log` to not count the non-attribute
key-value pairs dropped because of key duplication. (#7662)
- Fix `SetAttributes` on `Record` in `go.opentelemetry.io/otel/sdk/log`
to not log that attributes are dropped when they are actually not
dropped. (#7662)
- `WithHostID` detector in `go.opentelemetry.io/otel/sdk/resource` to
use full path for `ioreg` command on Darwin (macOS). (#7818)
- Fix missing `request.GetBody` in
`go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp` to
correctly handle HTTP2 GOAWAY frame. (#7794)

### Deprecated

- Deprecate `go.opentelemetry.io/otel/exporters/zipkin`. For more
information, see the [OTel blog post deprecating the Zipkin
exporter](https://opentelemetry.io/blog/2025/deprecating-zipkin-exporters/).
(#7670)

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-02 09:46:33 -08:00
Oleksandr Redko 3264bf171b refactor: modernize code (#7850)
Enable the
[`modernize`](https://golangci-lint.run/docs/linters/configuration/#modernize)
linter in the golangci-lint configuration and fix the reported issues by
running `golangci-lint run --enable-only modernize --fix`. The
`modernize` linter is internally the same as [gopls
modernize](https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/modernize).

Similar to #7089.
2026-01-30 18:15:17 +01:00
Flc゛ 82bf2f87b4 fix(x): correct source filename in generated test files (#7766)
ref:
https://github.com/open-telemetry/opentelemetry-go/pull/7735#discussion_r2667558812
2026-01-26 19:18:33 -08:00
David Ashpole 714ca7c32e Optimize fixedsize reservoir (#7447)
~Depends on #7441, #7443~

This improves the concurrent performance of the fixed size reservoir's
Offer function by 4x (i.e. 75% reduction). This improves the performance
of Measure() for fixed-size reservoirs by 60% overall.

Accomplish this by:

* using a single atomic for count and next. This assumes that both can
fit in a uint32.
* only use a lock to guard changing `w` and `next` together.

Offer benchmarks:
```
                           │   main.txt   │           fixedsize.txt            │
                           │    sec/op    │   sec/op     vs base               │
FixedSizeReservoirOffer-24   185.25n ± 4%   45.58n ± 1%  -75.40% (p=0.002 n=6)
```

Measure benchmarks:
```
                                                                          │   main.txt   │            fixedsize.txt            │
                                                                          │    sec/op    │    sec/op     vs base               │
SyncMeasure/NoView/ExemplarsEnabled/Int64Counter/Attributes/0-24            175.45n ± 6%   67.01n ±  9%  -61.81% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Int64Counter/Attributes/1-24            170.25n ± 1%   69.82n ±  6%  -58.99% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Int64Counter/Attributes/10-24           167.40n ± 2%   64.52n ± 10%  -61.46% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Float64Counter/Attributes/0-24          173.55n ± 0%   69.17n ± 12%  -60.14% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Float64Counter/Attributes/1-24          169.50n ± 1%   68.55n ±  5%  -59.56% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Float64Counter/Attributes/10-24         166.95n ± 1%   65.82n ±  6%  -60.58% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Int64UpDownCounter/Attributes/0-24      168.85n ± 1%   67.99n ± 11%  -59.73% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Int64UpDownCounter/Attributes/1-24      173.50n ± 1%   66.69n ±  2%  -61.56% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Int64UpDownCounter/Attributes/10-24     171.30n ± 5%   67.73n ±  8%  -60.46% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Float64UpDownCounter/Attributes/0-24    168.90n ± 2%   67.69n ±  9%  -59.92% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Float64UpDownCounter/Attributes/1-24    173.35n ± 2%   68.25n ±  9%  -60.63% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Float64UpDownCounter/Attributes/10-24   172.95n ± 2%   70.90n ±  7%  -59.01% (p=0.002 n=6)
geomean                                                                      171.0n        67.83n        -60.33%
```

---------

Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
Co-authored-by: Robert Pająk <pellared@hotmail.com>
2026-01-23 09:27:43 -05:00
Robert Pająk d45961bcda resource: specify full path for ioreg command in Darwin host ID reader (#7818)
Use full path when calling `ioreg` to mitigate potential malicious code
execution in case of [Path
Interception](https://attack.mitre.org/techniques/T1574/007/).

Note that path interception typically requires the attacker to influence
the environment or place a malicious executable earlier in $PATH, which,
in this context, generally implies the script itself would need to be
introduced/uploaded (or otherwise placed/executed) in the target
environment for the attacker’s substitute `ioreg` to be reached during
execution.

Reference:
- https://cwe.mitre.org/data/definitions/426.html
2026-01-21 18:33:00 +01:00
Saharsh Tibrewala 61f0e4855c Bump semconv from v1.37.0 to v1.39.0 (#7789)
Fixes #7788

---------

Co-authored-by: Damien Mathieu <42@dmathieu.com>
2026-01-21 10:42:41 +01:00
Rodrigo Mecheri f98af48bcc sdk/log: fix "limit reached" logging and Record.DroppedAttributes (#7662)
Fixes: #6983

Enhance logging and error reporting in the log record
attribute handling code, specifically around dropped attributes and
duplicate key-value pairs. The main focus is to provide clearer warnings
when key-value pairs are dropped due to duplication, and to ensure
warnings are only logged when actual drops occur.

---------

Co-authored-by: Robert Pająk <pellared@hotmail.com>
2026-01-13 14:43:36 +01:00
Saharsh Tibrewala b9920822c3 Add TestMergeIdempotent and TestEquivalentStability tests (#7764)
Verifies that Resource.Equivalent() and Resource.Equal() are independent
of attribute insertion order, ensuring stable equality semantics and
safe use as map keys.Ensures that merging a resource with itself is a
no-op, preserving both attributes and schema URL

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Damien Mathieu <42@dmathieu.com>
2026-01-13 09:59:32 +01:00
Robert Pająk 7706e21e4a metric: add Enabled method to synchronous instruments (#7763)
Fixes https://github.com/open-telemetry/opentelemetry-go/issues/7681
2026-01-12 16:21:49 +01:00
Vitor Vasconcellos 7e1ff96f6c sdk/trace: Add AlwaysRecord sampler (#7724)
### Description

- Add `AlwaysRecord` sampler to `sdk/trace`.
 
### Related issue

Closes #7714.

---------

Signed-off-by: Vitor Vasconcellos <vitor.vasconcellos@mercadolivre.com>
Co-authored-by: Flc゛ <i@flc.io>
Co-authored-by: Damien Mathieu <42@dmathieu.com>
2026-01-12 14:57:31 +01:00
renovate[bot] 8b00c5fa9c fix(deps): update module golang.org/x/sys to v0.40.0 (#7761)
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [golang.org/x/sys](https://pkg.go.dev/golang.org/x/sys) | [`v0.39.0` →
`v0.40.0`](https://cs.opensource.google/go/x/sys/+/refs/tags/v0.39.0...refs/tags/v0.40.0)
|
![age](https://developer.mend.io/api/mc/badges/age/go/golang.org%2fx%2fsys/v0.40.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/go/golang.org%2fx%2fsys/v0.39.0/v0.40.0?slim=true)
|

---

> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.

---

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

🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/open-telemetry/opentelemetry-go).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi42OS4xIiwidXBkYXRlZEluVmVyIjoiNDIuNjkuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiU2tpcCBDaGFuZ2Vsb2ciLCJkZXBlbmRlbmNpZXMiXX0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-08 13:46:16 +01:00
renovate[bot] 594a13d31e fix(deps): update module github.com/golangci/golangci-lint/v2 to v2.8.0 (#7758)
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
|
[github.com/golangci/golangci-lint/v2](https://redirect.github.com/golangci/golangci-lint)
| `v2.7.2` → `v2.8.0` |
![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fgolangci%2fgolangci-lint%2fv2/v2.8.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fgolangci%2fgolangci-lint%2fv2/v2.7.2/v2.8.0?slim=true)
|

---

> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.

---

### Release Notes

<details>
<summary>golangci/golangci-lint
(github.com/golangci/golangci-lint/v2)</summary>

###
[`v2.8.0`](https://redirect.github.com/golangci/golangci-lint/blob/HEAD/CHANGELOG.md#v280)

[Compare
Source](https://redirect.github.com/golangci/golangci-lint/compare/v2.7.2...v2.8.0)

*Released on 2026-01-07*

1. Linters new features or changes
- `godoc-lint`: from 0.10.2 to 0.11.1 (new rule:
`require-stdlib-doclink`)
- `golines`: from
[`442fd00`](https://redirect.github.com/golangci/golangci-lint/commit/442fd0091d95)
to 0.14.0
   - `gomoddirectives`: from 0.7.1 to 0.8.0
- `gosec`: from
[`daccba6`](https://redirect.github.com/golangci/golangci-lint/commit/daccba6b93d7)
to 2.22.11 (new rule: `G116`)
- `modernize`: from 0.39.0 to 0.40.0 (new analyzers: `stringscut`,
`unsafefuncs`)
   - `prealloc`: from 1.0.0 to 1.0.1 (message changes)
- `unqueryvet`: from 1.3.0 to 1.4.0 (new options:
`check-aliased-wildcard`, `check-string-concat`, `check-format-strings`,
`check-string-builder`, `check-subqueries`, `ignored-functions`,
`sql-builders`)
2. Linters bug fixes
   - `go-critic`: from 0.14.2 to 0.14.3
   - `go-errorlint`: from 1.8.0 to 1.9.0
   - `govet`: from 0.39.0 to 0.40.0
   - `protogetter`: from 0.3.17 to 0.3.18
   - `revive`: add missing enable-default-rules setting
3. Documentation
   - docs: split installation page

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

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/open-telemetry/opentelemetry-go).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi42OS4xIiwidXBkYXRlZEluVmVyIjoiNDIuNjkuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiU2tpcCBDaGFuZ2Vsb2ciLCJkZXBlbmRlbmNpZXMiXX0=-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: dmathieu <damien.mathieu@elastic.co>
2026-01-08 11:52:17 +01:00
David Ashpole fa89e4c5ed address feedback from #7478 (#7718)
Addresses
https://github.com/open-telemetry/opentelemetry-go/pull/7478#pullrequestreview-3583818326,
which was left after the PR merged.
2025-12-16 13:01:43 -05:00
David Ashpole 279f1453fe Exponential histogram: defer computing count until collect (#7702)
Tiny part of
https://github.com/open-telemetry/opentelemetry-go/pull/7535

It doesn't make much of a difference now, since we are bound by lock
contention, but it matters once we move to atomics.

```
                                                                                  │  main.txt   │           defercount.txt           │
                                                                                  │   sec/op    │    sec/op     vs base              │
SyncMeasure/NoView/ExemplarsDisabled/ExponentialInt64Histogram/Attributes/0-24      300.9n ± 7%   282.8n ± 10%       ~ (p=0.394 n=6)
SyncMeasure/NoView/ExemplarsDisabled/ExponentialInt64Histogram/Attributes/1-24      300.0n ± 8%   307.5n ±  3%       ~ (p=0.394 n=6)
SyncMeasure/NoView/ExemplarsDisabled/ExponentialInt64Histogram/Attributes/10-24     301.4n ± 5%   300.7n ±  5%       ~ (p=0.485 n=6)
SyncMeasure/NoView/ExemplarsDisabled/ExponentialFloat64Histogram/Attributes/0-24    286.4n ± 4%   284.8n ±  3%       ~ (p=0.420 n=6)
SyncMeasure/NoView/ExemplarsDisabled/ExponentialFloat64Histogram/Attributes/1-24    303.8n ± 3%   294.3n ±  2%  -3.11% (p=0.006 n=6)
SyncMeasure/NoView/ExemplarsDisabled/ExponentialFloat64Histogram/Attributes/10-24   297.9n ± 4%   291.6n ±  3%  -2.10% (p=0.024 n=6)
geomean                                                                             298.3n        293.5n        -1.62%
```
2025-12-16 11:03:52 -05:00
David Ashpole 68d2f72614 Use sync.Map and atomics for lastvalue aggregations (#7478)
Depends on https://github.com/open-telemetry/opentelemetry-go/pull/7474

This applies similar optimizations as
https://github.com/open-telemetry/opentelemetry-go/pull/7427 to the last
value aggregation.

Changes for last value are contained in
https://github.com/open-telemetry/opentelemetry-go/pull/7478/commits/27e14829716bfa5b6cfcdf4841c45c93bf5f0a91.


Parallel benchmarks:
```
                                                                   │   main.txt   │               lv.txt               │
                                                                   │    sec/op    │   sec/op     vs base               │
SyncMeasure/NoView/ExemplarsDisabled/Int64Gauge/Attributes/10-24     264.60n ± 3%   66.46n ± 1%  -74.88% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Float64Gauge/Attributes/10-24   270.25n ± 4%   69.69n ± 1%  -74.21% (p=0.002 n=6)
geomean                                                               267.4n        68.05n       -74.55%
```

Co-authored-by: Damien Mathieu <42@dmathieu.com>
2025-12-16 09:23:13 +01:00
David Ashpole e8542ae7f3 Optimize histogram reservoir (#7443)
This improves the concurrent performance of the histogram reservoir's
Offer function by 4x (i.e. 75% reduction).

Accomplish this by locking each measurement, rather than locking around
the entire storage. Also, defer extracting the trace context from
context.Context until collection time. This improves the performance of
Offer, which is on the measure hot path. Exemplars are often
overwritten, so deferring the operation until Collect reduces the
overall work.

```
                           │   main.txt   │              hist.txt              │
                           │    sec/op    │   sec/op     vs base               │
FixedSizeReservoirOffer-24    211.4n ± 3%   177.5n ± 3%  -16.04% (p=0.002 n=6)
HistogramReservoirOffer-24   200.85n ± 2%   47.41n ± 2%  -76.40% (p=0.002 n=6)
geomean                       206.1n        91.73n       -55.48%
```

Benchmarks for Measure:
```
                                                                                 │  main.txt   │             histres.txt             │
                                                                                 │   sec/op    │    sec/op     vs base               │
SyncMeasure/NoView/ExemplarsEnabled/Int64Histogram/Attributes/0-24                 436.7n ± 4%   114.8n ±  5%  -73.72% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Int64Histogram/Attributes/10-24                472.2n ± 2%   169.7n ±  8%  -64.08% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Float64Histogram/Attributes/0-24               431.0n ± 2%   116.3n ±  2%  -73.01% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Float64Histogram/Attributes/10-24              470.9n ± 1%   171.0n ±  5%  -63.70% (p=0.002 n=6)
```

I explored using a []atomic.Pointer[measurement], but this had similar
performance while being much more complex (needing a sync.Pool to
eliminate allocations). The single-threaded performance was also much
worse for that solution. See
https://github.com/open-telemetry/opentelemetry-go/compare/main...dashpole:optimize_histogram_reservoir_old.

---------

Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
Co-authored-by: Damien Mathieu <42@dmathieu.com>
2025-12-15 09:59:34 -05:00
Robert Pająk 5b8a1d1294 sdk/log: improve Processor documentation (#7695)
Fixes https://github.com/open-telemetry/opentelemetry-go/issues/7685

- Clarify EnabledParameters contents and Enabled decision semantics
- Remove the requirement of Enabled that param cannot be held by the
implementation as it is immutable
- Refine OnEmit docs around context cancellation and retry handling
- Update Shutdown docs to mention Processor/Exporter and OnEmit instead
of Export
2025-12-12 19:41:20 +01:00
David Ashpole f57bf14de2 Use sync.Map and atomics for fixed bucket histograms (#7474)
Implement a lockless histogram using atomics, and use a sync.Map for
attribute access. This improves performance by ~2x.

The design is very similar to
https://github.com/open-telemetry/opentelemetry-go/pull/7427, but with
one additional change to make the histogram data point itself atomic:

* For cumulative histograms, which do not use a hot/cold limitedSyncMap,
we use a hot/cold data point. This way, we maintain the keys in the sync
map, but still ensure that collection gets a consistent view of
measure() calls.

Parallel benchmarks:
```
                                                                       │  main.txt   │              hist.txt              │
                                                                       │   sec/op    │   sec/op     vs base               │
SyncMeasure/NoView/ExemplarsDisabled/Int64Histogram/Attributes/10-24     274.5n ± 2%   125.2n ± 5%  -54.42% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Float64Histogram/Attributes/10-24   274.1n ± 2%   132.5n ± 2%  -51.65% (p=0.002 n=6)
geomean                                                                  274.3n        128.8n       -53.05%
```

zero memory allocations before and after this change for Measure().
Omitted for brevity

Benchmarks for collect:
```
                                                    │   main.txt    │               hist.txt               │
                                                    │    sec/op     │    sec/op     vs base                │
Collect/NoView/Int64Histogram/1/Attributes/0-24       1.799µ ±  60%    1.702µ ± 6%         ~ (p=1.000 n=6)
Collect/NoView/Int64Histogram/1/Attributes/1-24       973.7n ±  28%   1720.0n ± 5%   +76.65% (p=0.002 n=6)
Collect/NoView/Int64Histogram/1/Attributes/10-24      881.0n ±  17%   1710.0n ± 5%   +94.09% (p=0.002 n=6)
Collect/NoView/Int64Histogram/10/Attributes/0-24      996.1n ±  14%   1781.5n ± 4%   +78.85% (p=0.002 n=6)
Collect/NoView/Int64Histogram/10/Attributes/1-24      1.029µ ±  67%    1.733µ ± 3%   +68.42% (p=0.009 n=6)
Collect/NoView/Int64Histogram/10/Attributes/10-24     1.533µ ±  18%    1.708µ ± 4%         ~ (p=0.240 n=6)
Collect/NoView/Float64Histogram/1/Attributes/0-24     1.222µ ± 120%    1.733µ ± 4%         ~ (p=0.065 n=6)
Collect/NoView/Float64Histogram/1/Attributes/1-24     893.3n ±   8%   1733.0n ± 4%   +94.00% (p=0.002 n=6)
Collect/NoView/Float64Histogram/1/Attributes/10-24    860.7n ±   2%   1732.0n ± 5%  +101.23% (p=0.002 n=6)
Collect/NoView/Float64Histogram/10/Attributes/0-24    852.5n ±   4%   1758.0n ± 3%  +106.22% (p=0.002 n=6)
Collect/NoView/Float64Histogram/10/Attributes/1-24    853.8n ±   3%   1725.0n ± 3%  +102.04% (p=0.002 n=6)
Collect/NoView/Float64Histogram/10/Attributes/10-24   843.4n ±   2%   1755.0n ± 4%  +108.10% (p=0.002 n=6)
geomean                                               1.028µ           1.732µ        +68.46%

                                                    │  main.txt  │               hist.txt               │
                                                    │    B/op    │     B/op      vs base                │
Collect/NoView/Int64Histogram/1/Attributes/0-24       336.0 ± 0%    2131.0 ± 0%  +534.23% (p=0.002 n=6)
Collect/NoView/Int64Histogram/1/Attributes/1-24       336.0 ± 0%    2131.0 ± 0%  +534.23% (p=0.002 n=6)
Collect/NoView/Int64Histogram/1/Attributes/10-24      336.0 ± 0%    2131.0 ± 0%  +534.23% (p=0.002 n=6)
Collect/NoView/Int64Histogram/10/Attributes/0-24      336.0 ± 0%    2131.0 ± 0%  +534.23% (p=0.002 n=6)
Collect/NoView/Int64Histogram/10/Attributes/1-24      336.0 ± 0%    2131.0 ± 0%  +534.23% (p=0.002 n=6)
Collect/NoView/Int64Histogram/10/Attributes/10-24     336.0 ± 0%    2131.0 ± 0%  +534.23% (p=0.002 n=6)
Collect/NoView/Float64Histogram/1/Attributes/0-24     336.0 ± 0%    2131.0 ± 0%  +534.23% (p=0.002 n=6)
Collect/NoView/Float64Histogram/1/Attributes/1-24     336.0 ± 0%    2130.5 ± 0%  +534.08% (p=0.002 n=6)
Collect/NoView/Float64Histogram/1/Attributes/10-24    336.0 ± 0%    2131.0 ± 0%  +534.23% (p=0.002 n=6)
Collect/NoView/Float64Histogram/10/Attributes/0-24    336.0 ± 0%    2131.0 ± 0%  +534.23% (p=0.002 n=6)
Collect/NoView/Float64Histogram/10/Attributes/1-24    336.0 ± 0%    2131.0 ± 0%  +534.23% (p=0.002 n=6)
Collect/NoView/Float64Histogram/10/Attributes/10-24   336.0 ± 0%    2131.0 ± 0%  +534.23% (p=0.002 n=6)
geomean                                               336.0        2.081Ki       +534.21%

                                                    │  main.txt  │             hist.txt              │
                                                    │ allocs/op  │ allocs/op   vs base               │
Collect/NoView/Int64Histogram/1/Attributes/0-24       5.000 ± 0%   6.000 ± 0%  +20.00% (p=0.002 n=6)
Collect/NoView/Int64Histogram/1/Attributes/1-24       5.000 ± 0%   6.000 ± 0%  +20.00% (p=0.002 n=6)
Collect/NoView/Int64Histogram/1/Attributes/10-24      5.000 ± 0%   6.000 ± 0%  +20.00% (p=0.002 n=6)
Collect/NoView/Int64Histogram/10/Attributes/0-24      5.000 ± 0%   6.000 ± 0%  +20.00% (p=0.002 n=6)
Collect/NoView/Int64Histogram/10/Attributes/1-24      5.000 ± 0%   6.000 ± 0%  +20.00% (p=0.002 n=6)
Collect/NoView/Int64Histogram/10/Attributes/10-24     5.000 ± 0%   6.000 ± 0%  +20.00% (p=0.002 n=6)
Collect/NoView/Float64Histogram/1/Attributes/0-24     5.000 ± 0%   6.000 ± 0%  +20.00% (p=0.002 n=6)
Collect/NoView/Float64Histogram/1/Attributes/1-24     5.000 ± 0%   6.000 ± 0%  +20.00% (p=0.002 n=6)
Collect/NoView/Float64Histogram/1/Attributes/10-24    5.000 ± 0%   6.000 ± 0%  +20.00% (p=0.002 n=6)
Collect/NoView/Float64Histogram/10/Attributes/0-24    5.000 ± 0%   6.000 ± 0%  +20.00% (p=0.002 n=6)
Collect/NoView/Float64Histogram/10/Attributes/1-24    5.000 ± 0%   6.000 ± 0%  +20.00% (p=0.002 n=6)
Collect/NoView/Float64Histogram/10/Attributes/10-24   5.000 ± 0%   6.000 ± 0%  +20.00% (p=0.002 n=6)
geomean                                               5.000        6.000       +20.00%
```

Collect does get substantially worse, but Measure is expected to be
called significantly more often than collect.

---------

Co-authored-by: Bartlomiej Plotka <bwplotka@gmail.com>
2025-12-11 11:56:03 -05:00
renovate[bot] 545883eb6a fix(deps): update opentelemetry-go monorepo to v0.15.0 (#7690)
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
|
[go.opentelemetry.io/otel/log](https://redirect.github.com/open-telemetry/opentelemetry-go)
| `v0.14.0` -> `v0.15.0` |
![age](https://developer.mend.io/api/mc/badges/age/go/go.opentelemetry.io%2fotel%2flog/v0.15.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/go/go.opentelemetry.io%2fotel%2flog/v0.14.0/v0.15.0?slim=true)
|
|
[go.opentelemetry.io/otel/sdk/log](https://redirect.github.com/open-telemetry/opentelemetry-go)
| `v0.14.0` -> `v0.15.0` |
![age](https://developer.mend.io/api/mc/badges/age/go/go.opentelemetry.io%2fotel%2fsdk%2flog/v0.15.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/go/go.opentelemetry.io%2fotel%2fsdk%2flog/v0.14.0/v0.15.0?slim=true)
|

---

> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.

---

### Release Notes

<details>
<summary>open-telemetry/opentelemetry-go
(go.opentelemetry.io/otel/log)</summary>

###
[`v0.15.0`](https://redirect.github.com/open-telemetry/opentelemetry-go/releases/tag/v0.15.0)

[Compare
Source](https://redirect.github.com/open-telemetry/opentelemetry-go/compare/v0.14.0...v0.15.0)

##### Added

- The `WithIDGenerator` `TracerProviderOption` is added to the
`go.opentelemetry.io/otel/trace` package to configure an `IDGenerator`
for the `TracerProvider`.
([#&#8203;1363](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/1363))

##### Changed

- The Zipkin exporter now uses the Span status code to determine.
([#&#8203;1328](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/1328))
- `NewExporter` and `Start` functions in
`go.opentelemetry.io/otel/exporters/otlp` now receive `context.Context`
as a first parameter.
([#&#8203;1357](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/1357))
- Move the OpenCensus example into `example` directory.
([#&#8203;1359](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/1359))
- Moved the SDK's `internal.IDGenerator` interface in to the `sdk/trace`
package to enable support for externally-defined ID generators.
([#&#8203;1363](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/1363))
- Bump `github.com/google/go-cmp` from 0.5.3 to 0.5.4
([#&#8203;1374](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/1374))
- Bump `github.com/golangci/golangci-lint` in `/internal/tools`
([#&#8203;1375](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/1375))

##### Fixed

- Metric SDK `SumObserver` and `UpDownSumObserver` instruments
correctness fixes.
([#&#8203;1381](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/1381))

# Raw changes made between v0.14.0 and v0.15.0


[`61e07a0`](https://redirect.github.com/open-telemetry/opentelemetry-go/commit/61e07a0d629ff6a0c8f7054205972adc09540a53)
(HEAD -> master, tag: v0.15.0, tag: sdk/v0.15.0, tag:
exporters/trace/zipkin/v0.15.0, tag: exporters/trace/jaeger/v0.15.0,
tag: exporters/stdout/v0.15.0, tag: exporters/otlp/v0.15.0, tag:
exporters/metric/prometheus/v0.15.0, tag: example/zipkin/v0.15.0, tag:
example/prometheus/v0.15.0, tag: example/otel-collector/v0.15.0, tag:
example/opencensus/v0.15.0, tag: example/namedtracer/v0.15.0, tag:
example/jaeger/v0.15.0, tag: example/basic/v0.15.0, tag:
bridge/opentracing/v0.15.0, tag: bridge/opencensus/v0.15.0,
upstream/master, origin/master, origin/HEAD) Release v0.15.0
([#&#8203;1392](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/1392))

[`599c080`](https://redirect.github.com/open-telemetry/opentelemetry-go/commit/599c0803ccf2113875e7934b6bf3fdbf5733494b)
Fix typo in readme
([#&#8203;1390](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/1390))

[`eb28005`](https://redirect.github.com/open-telemetry/opentelemetry-go/commit/eb28005e2fad10fe050b777a585b64be8cf593cb)
Metric Accumulator fix for SumObservers
([#&#8203;1381](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/1381))

[`970755b`](https://redirect.github.com/open-telemetry/opentelemetry-go/commit/970755bd087801619575b7473806356818e24e15)
Enable support for externally-defined ID generators
([#&#8203;1363](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/1363))

[`0021ab0`](https://redirect.github.com/open-telemetry/opentelemetry-go/commit/0021ab0a3a47e4abb116bdb227fd77e912006b9e)
Rework proto generation
([#&#8203;1371](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/1371))

[`787e3f4`](https://redirect.github.com/open-telemetry/opentelemetry-go/commit/787e3f457a07e3659a7c08a0bd886505da1affab)
chore(zipkin-exporter): relay on the status code for the request but
still read the response body.
([#&#8203;1328](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/1328))

[`66db2d8`](https://redirect.github.com/open-telemetry/opentelemetry-go/commit/66db2d845ba72bae8fcc1b3d43965470cbe8f5c3)
(johananl/master) Build examples last
([#&#8203;1370](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/1370))

[`958041d`](https://redirect.github.com/open-telemetry/opentelemetry-go/commit/958041ddf619a1282e92cfd4c50859f2bc71f9c8)
Bump github.com/golangci/golangci-lint in /internal/tools
([#&#8203;1375](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/1375))

[`e1ff2d1`](https://redirect.github.com/open-telemetry/opentelemetry-go/commit/e1ff2d15cfdebe3516d241048f40baa49980f60f)
Bump github.com/google/go-cmp from 0.5.3 to 0.5.4
([#&#8203;1374](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/1374))

[`5d0372d`](https://redirect.github.com/open-telemetry/opentelemetry-go/commit/5d0372dd2ed447fed6fd036f219d208f77d5468d)
Fix typo in comment
([#&#8203;1377](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/1377))

[`55ff277`](https://redirect.github.com/open-telemetry/opentelemetry-go/commit/55ff27787da2cdbdd5cde3564e57841267757e58)
Fix golint issue caused by typo
([#&#8203;1372](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/1372))

[`5a728db`](https://redirect.github.com/open-telemetry/opentelemetry-go/commit/5a728db2e9713b66615943129568834c5af86ff8)
Another batch of cleanups in otlp exporter
([#&#8203;1357](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/1357))

[`e081978`](https://redirect.github.com/open-telemetry/opentelemetry-go/commit/e0819780f9d4ea1e8169109cd71b848fe08f788c)
Move opencensus example to the example directory
([#&#8203;1359](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/1359))

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

🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/open-telemetry/opentelemetry-go).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi4zMi4yIiwidXBkYXRlZEluVmVyIjoiNDIuMzIuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiU2tpcCBDaGFuZ2Vsb2ciLCJkZXBlbmRlbmNpZXMiXX0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-08 13:15:42 -08:00
Tyler Yahn 6ce14298b9 Release v1.39.0 (#7676)
## Overview

### Added

- Greatly reduce the cost of recording metrics in
`go.opentelemetry.io/otel/sdk/metric` using hashing for map keys.
(#7175)
- Add `WithInstrumentationAttributeSet` option to
`go.opentelemetry.io/otel/log`, `go.opentelemetry.io/otel/metric`, and
`go.opentelemetry.io/otel/trace` packages. This provides a
concurrent-safe and performant alternative to
`WithInstrumentationAttributes` by accepting a pre-constructed
`attribute.Set`. (#7287)
- Add experimental observability for the Prometheus exporter in
`go.opentelemetry.io/otel/exporters/prometheus`. Check the
`go.opentelemetry.io/otel/exporters/prometheus/internal/x` package
documentation for more information. (#7345)
- Add experimental observability metrics in
`go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc`. (#7353)
- Add temporality selector functions `DeltaTemporalitySelector`,
`CumulativeTemporalitySelector`, `LowMemoryTemporalitySelector` to
`go.opentelemetry.io/otel/sdk/metric`. (#7434)
- Add experimental observability metrics for simple log processor in
`go.opentelemetry.io/otel/sdk/log`. (#7548)
- Add experimental observability metrics in
`go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc`.
(#7459)
- Add experimental observability metrics in
`go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`.
(#7486)
- Add experimental observability metrics for simple span processor in
`go.opentelemetry.io/otel/sdk/trace`. (#7374)
- Add experimental observability metrics in
`go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp`. (#7512)
- Add experimental observability metrics for manual reader in
`go.opentelemetry.io/otel/sdk/metric`. (#7524)
- Add experimental observability metrics for periodic reader in
`go.opentelemetry.io/otel/sdk/metric`. (#7571)
- Support `OTEL_EXPORTER_OTLP_LOGS_INSECURE` and
`OTEL_EXPORTER_OTLP_INSECURE` environmental variables in
`go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp`. (#7608)
- Add `Enabled` method to the `Processor` interface in
`go.opentelemetry.io/otel/sdk/log`. All `Processor` implementations now
include an `Enabled` method. (#7639)
- The `go.opentelemetry.io/otel/semconv/v1.38.0` package. The package
contains semantic conventions from the `v1.38.0` version of the
OpenTelemetry Semantic Conventions. See the [migration
documentation](./semconv/v1.38.0/MIGRATION.md) for information on how to
upgrade from `go.opentelemetry.io/otel/semconv/v1.37.0.`(#7648)

### Changed

- `Distinct` in `go.opentelemetry.io/otel/attribute` is no longer
guaranteed to uniquely identify an attribute set. Collisions between
`Distinct` values for different Sets are possible with extremely high
cardinality (billions of series per instrument), but are highly
unlikely. (#7175)
- `WithInstrumentationAttributes` in `go.opentelemetry.io/otel/trace`
synchronously de-duplicates the passed attributes instead of delegating
it to the returned `TracerOption`. (#7266)
- `WithInstrumentationAttributes` in `go.opentelemetry.io/otel/meter`
synchronously de-duplicates the passed attributes instead of delegating
it to the returned `MeterOption`. (#7266)
- `WithInstrumentationAttributes` in `go.opentelemetry.io/otel/log`
synchronously de-duplicates the passed attributes instead of delegating
it to the returned `LoggerOption`. (#7266)
- Rename the `OTEL_GO_X_SELF_OBSERVABILITY` environment variable to
`OTEL_GO_X_OBSERVABILITY` in `go.opentelemetry.io/otel/sdk/trace`,
`go.opentelemetry.io/otel/sdk/log`, and
`go.opentelemetry.io/otel/exporters/stdout/stdouttrace`. (#7302)
- Improve performance of histogram `Record` in
`go.opentelemetry.io/otel/sdk/metric` when min and max are disabled
using `NoMinMax`. (#7306)
- Improve error handling for dropped data during translation by using
`prometheus.NewInvalidMetric` in
`go.opentelemetry.io/otel/exporters/prometheus`. ⚠️ **Breaking Change:**
Previously, these cases were only logged and scrapes succeeded. Now,
when translation would drop data (e.g., invalid label/value), the
exporter emits a `NewInvalidMetric`, and Prometheus scrapes **fail with
HTTP 500** by default. To preserve the prior behavior (scrapes succeed
while errors are logged), configure your Prometheus HTTP handler with:
`promhttp.HandlerOpts{ ErrorHandling: promhttp.ContinueOnError }`.
(#7363)
- Replace fnv hash with xxhash in `go.opentelemetry.io/otel/attribute`
for better performance. (#7371)
- The default `TranslationStrategy` in
`go.opentelemetry.io/exporters/prometheus` is changed from
`otlptranslator.NoUTF8EscapingWithSuffixes` to
`otlptranslator.UnderscoreEscapingWithSuffixes`. (#7421)
- Improve performance of concurrent measurements in
`go.opentelemetry.io/otel/sdk/metric`. (#7427)
- Include W3C TraceFlags (bits 0–7) in the OTLP `Span.Flags` field in
`go.opentelemetry.io/exporters/otlp/otlptrace/otlptracehttp` and
`go.opentelemetry.io/exporters/otlp/otlptrace/otlptracegrpc`. (#7438)
- The `ErrorType` function in `go.opentelemetry.io/otel/semconv/v1.37.0`
now handles custom error types.
If an error implements an `ErrorType() string` method, the return value
of that method will be used as the error type. (#7442)

### Fixed

- Fix `WithInstrumentationAttributes` options in
`go.opentelemetry.io/otel/trace`, `go.opentelemetry.io/otel/metric`, and
`go.opentelemetry.io/otel/log` to properly merge attributes when passed
multiple times instead of replacing them. Attributes with duplicate keys
will use the last value passed. (#7300)
- The equality of `attribute.Set` when using the `Equal` method is not
affected by the user overriding the empty set pointed to by
`attribute.EmptySet` in `go.opentelemetry.io/otel/attribute`. (#7357)
- Return partial OTLP export errors to the caller in
`go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc`. (#7372)
- Return partial OTLP export errors to the caller in
`go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp`. (#7372)
- Return partial OTLP export errors to the caller in
`go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc`.
(#7372)
- Return partial OTLP export errors to the caller in
`go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`.
(#7372)
- Return partial OTLP export errors to the caller in
`go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc`.
(#7372)
- Return partial OTLP export errors to the caller in
`go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`.
(#7372)
- Fix `AddAttributes`, `SetAttributes`, `SetBody` on `Record` in
`go.opentelemetry.io/otel/sdk/log` to not mutate input. (#7403)
- Do not double record measurements of `RecordSet` methods in
`go.opentelemetry.io/otel/semconv/v1.37.0`. (#7655)
- Do not double record measurements of `RecordSet` methods in
`go.opentelemetry.io/otel/semconv/v1.36.0`. (#7656)

### Removed

- Drop support for [Go 1.23]. (#7274)
- Remove the `FilterProcessor` interface in
`go.opentelemetry.io/otel/sdk/log`. The `Enabled` method has been added
to the `Processor` interface instead. All `Processor` implementations
must now implement the `Enabled` method. Custom processors that do not
filter records can implement `Enabled` to return `true`. (#7639)
2025-12-08 08:30:47 -08:00
Robert Pająk 12e421a706 sdk/log: move Enabled method from FilterProcessor to Processor (#7639)
Fixes #7617

Simplify the Logs SDK by unifying processor capabilities into a single
interface.

- Add `Enabled(ctx context.Context, p EnabledParameters) bool` to
`sdk/log.Processor`.
- Remove `sdk/log.FilterProcessor` interface.

`Processor` implementations must now implement the `Enabled` method.
Custom processors that do not filter records can implement `Enabled` to
return `true`.
2025-12-08 15:26:05 +01:00
renovate[bot] 5982f16d24 fix(deps): update module golang.org/x/sys to v0.39.0 (#7684)
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| golang.org/x/sys | `v0.38.0` -> `v0.39.0` |
![age](https://developer.mend.io/api/mc/badges/age/go/golang.org%2fx%2fsys/v0.39.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/go/golang.org%2fx%2fsys/v0.38.0/v0.39.0?slim=true)
|

---

> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.

---

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

🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/open-telemetry/opentelemetry-go).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi4zMi4yIiwidXBkYXRlZEluVmVyIjoiNDIuMzIuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiU2tpcCBDaGFuZ2Vsb2ciLCJkZXBlbmRlbmNpZXMiXX0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: dmathieu <42@dmathieu.com>
2025-12-08 14:46:26 +01:00
ian ca53078985 Instrument the SimpleLogProcessor from sdk/log (#7548)
ref #7016


```txt
goarch: amd64
pkg: go.opentelemetry.io/otel/sdk/log
cpu: Intel(R) Core(TM) i7-14700
                                                │ before.txt  │  .\after_res.txt   │
                                                │   sec/op    │   sec/op     vs base   │
SimpleProcessorObservability/NoObservability-28   27.68n ± 4%
SimpleProcessorObservability/Observability-28                   27.39n ± 5%
geomean                                           27.68n        27.38n       ? ¹ ²
¹ benchmark set differs from baseline; geomeans may not be comparable
² ratios must be >0 to compute geomean

                                                │  before.txt  │   .\after_res.txt   │
                                                │     B/op     │    B/op     vs base │
SimpleProcessorObservability/NoObservability-28   0.000 ± 0%
SimpleProcessorObservability/Observability-28                    0.000 ± 0%
geomean                                                      ¹               ? ² ¹ ³
¹ summaries must be >0 to compute geomean
² benchmark set differs from baseline; geomeans may not be comparable
³ ratios must be >0 to compute geomean

                                                │  before.txt  │   .\after_res.txt   │
                                                │  allocs/op   │ allocs/op   vs base │
SimpleProcessorObservability/NoObservability-28   0.000 ± 0%
SimpleProcessorObservability/Observability-28                    0.000 ± 0%
geomean                                                      ¹               ? ² ¹ ³
¹ summaries must be >0 to compute geomean
² benchmark set differs from baseline; geomeans may not be comparable
³ ratios must be >0 to compute geomean
```

---------

Co-authored-by: Flc゛ <i@flc.io>
Co-authored-by: Cijo Thomas <cithomas@microsoft.com>
Co-authored-by: Robert Pająk <pellared@hotmail.com>
Co-authored-by: dmathieu <42@dmathieu.com>
2025-12-04 13:28:07 +01:00
Preeti Dewani 49292857b7 Replace fnv with xxhash (#7497)
**Objective**:
- Performance comparison between fnv and xxhash in terms of ops/sec,
allocations and collisions
- Implement xxhash according to first objective

**Changes**:
- fnv is replaced by xxhash. 
  Perform stats:
  - **Collision**: No collision upto 100M
  - **Allocations**: Same in both cases
- **Ops/sec**: xxhash performed better in cases with medium to large
strings
 
 **Benchmarks**:
 ```
 benchstat old.txt new.txt
goos: darwin
goarch: arm64
pkg: go.opentelemetry.io/otel/attribute
cpu: Apple M2
│ old.txt │ new.txt │
│ sec/op │ sec/op vs base │
NewSet-8 205.5n ± 1% 229.4n ± 1% +11.61% (p=0.002 n=6)
NewSetSmallStrings-8 160.5n ± 1% 169.0n ± 5% +5.26% (p=0.002 n=6)
NewSetMediumStrings-8 263.8n ± 6% 185.0n ± 1% -29.89% (p=0.002 n=6)
NewSetLargeStrings-8 426.4n ± 9% 210.2n ± 1% -50.72% (p=0.002 n=6)
NewSetVeryLargeStrings-8 1012.5n ± 7% 238.7n ± 2% -76.43% (p=0.002 n=6)
NewSetHugeStrings-8 3622.0n ± 8% 397.1n ± 1% -89.04% (p=0.002 n=6)
geomean                     488.6n        228.6n       -53.21%

│ old.txt │ new.txt │
│ B/op │ B/op vs base │
NewSet-8 448.0 ± 0% 448.0 ± 0% ~ (p=1.000 n=6) ¹
NewSetSmallStrings-8 320.0 ± 0% 320.0 ± 0% ~ (p=1.000 n=6) ¹
NewSetMediumStrings-8 320.0 ± 0% 320.0 ± 0% ~ (p=1.000 n=6) ¹
NewSetLargeStrings-8 320.0 ± 0% 320.0 ± 0% ~ (p=1.000 n=6) ¹
NewSetVeryLargeStrings-8 320.0 ± 0% 320.0 ± 0% ~ (p=1.000 n=6) ¹
NewSetHugeStrings-8 320.0 ± 0% 320.0 ± 0% ~ (p=1.000 n=6) ¹
geomean                    338.5        338.5       +0.00%
¹ all samples are equal

│ old.txt │ new.txt │
│ allocs/op │ allocs/op vs base │
NewSet-8 1.000 ± 0% 1.000 ± 0% ~ (p=1.000 n=6) ¹
NewSetSmallStrings-8 1.000 ± 0% 1.000 ± 0% ~ (p=1.000 n=6) ¹
NewSetMediumStrings-8 1.000 ± 0% 1.000 ± 0% ~ (p=1.000 n=6) ¹
NewSetLargeStrings-8 1.000 ± 0% 1.000 ± 0% ~ (p=1.000 n=6) ¹
NewSetVeryLargeStrings-8 1.000 ± 0% 1.000 ± 0% ~ (p=1.000 n=6) ¹
NewSetHugeStrings-8 1.000 ± 0% 1.000 ± 0% ~ (p=1.000 n=6) ¹
geomean                    1.000        1.000       +0.00%
¹ all samples are equal
```

Previous implementation for reference: 
https://github.com/open-telemetry/opentelemetry-go/blame/d0483a7c89d936dcced557fb523465daeac16967/CHANGELOG.md#L16

---------

Co-authored-by: Robert Pająk <pellared@hotmail.com>
2025-11-19 11:06:20 +01:00
renovate[bot] d1ebd7b9ff fix(deps): update golang.org/x (#7590)
This PR contains the following updates:

| Package | Change | Age | Confidence |
|---|---|---|---|
| golang.org/x/sync | `v0.17.0` -> `v0.18.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/golang.org%2fx%2fsync/v0.18.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/golang.org%2fx%2fsync/v0.17.0/v0.18.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| golang.org/x/sys | `v0.37.0` -> `v0.38.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/golang.org%2fx%2fsys/v0.38.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/golang.org%2fx%2fsys/v0.37.0/v0.38.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.

---

### 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 is behind base branch, or you tick the
rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config
help](https://redirect.github.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/open-telemetry/opentelemetry-go).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNTkuNCIsInVwZGF0ZWRJblZlciI6IjQxLjE1OS40IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJTa2lwIENoYW5nZWxvZyIsImRlcGVuZGVuY2llcyJdfQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-10 10:51:12 +01:00
Robert Pająk fe47da3017 sdk/log: update ExampleProcessor_eventName to use otel.event.name attribute (#7568)
Per https://github.com/open-telemetry/semantic-conventions/issues/2913
and https://github.com/open-telemetry/semantic-conventions/pull/2914

Related semconv PR:
- https://github.com/open-telemetry/semantic-conventions/pull/3034
2025-11-07 10:55:09 +01:00
Robert Wu a80ee2de89 feat: instrument periodic reader from sdk/metric (#7571)
Resolve: #7010 

### Benchmarks

```
➜ benchstat /tmp/bench_disabled.txt /tmp/bench_enabled.txt
goos: darwin
goarch: arm64
pkg: go.opentelemetry.io/otel/sdk/metric
cpu: Apple M1 Max
                                                 │ /tmp/bench_disabled.txt │       /tmp/bench_enabled.txt       │
                                                 │         sec/op          │   sec/op     vs base               │
PeriodicReaderInstrumentation/NoObservability-10               17.00µ ± 0%   17.02µ ± 0%       ~ (p=0.400 n=50)
PeriodicReaderInstrumentation/Observability-10                 17.48µ ± 0%   17.47µ ± 0%       ~ (p=0.361 n=50)
geomean                                                        17.24µ        17.24µ       +0.04%

                                                 │ /tmp/bench_disabled.txt │       /tmp/bench_enabled.txt        │
                                                 │          B/op           │     B/op      vs base               │
PeriodicReaderInstrumentation/NoObservability-10              47.63Ki ± 0%   47.63Ki ± 0%       ~ (p=0.159 n=50)
PeriodicReaderInstrumentation/Observability-10                47.65Ki ± 0%   47.65Ki ± 0%       ~ (p=0.780 n=50)
geomean                                                       47.64Ki        47.64Ki       +0.00%

                                                 │ /tmp/bench_disabled.txt │       /tmp/bench_enabled.txt        │
                                                 │        allocs/op        │ allocs/op   vs base                 │
PeriodicReaderInstrumentation/NoObservability-10                376.0 ± 0%   376.0 ± 0%       ~ (p=1.000 n=50) ¹
PeriodicReaderInstrumentation/Observability-10                  376.0 ± 0%   376.0 ± 0%       ~ (p=1.000 n=50) ¹
geomean                                                         376.0        376.0       +0.00%
¹ all samples are equal
```

---------

Co-authored-by: Damien Mathieu <42@dmathieu.com>
2025-11-05 10:19:20 +01:00
Robert Wu 68190cc102 Instrument manual reader from sdk/metric (#7524)
Resolve: #7009 

### Benchmarks

```
➜ benchstat /tmp/manual_bench_disabled.txt /tmp/manual_bench_enabled.txt
goos: darwin
goarch: arm64
pkg: go.opentelemetry.io/otel/sdk/metric
cpu: Apple M1 Max
                                               │ /tmp/manual_bench_disabled.txt │    /tmp/manual_bench_enabled.txt    │
                                               │             sec/op             │    sec/op     vs base               │
ManualReaderInstrumentation/NoObservability-10                     35.98µ ± 14%   36.29µ ± 11%       ~ (p=0.665 n=40)
ManualReaderInstrumentation/Observability-10                       26.98µ ±  9%   28.23µ ±  3%       ~ (p=0.207 n=40)
geomean                                                            31.16µ         32.01µ        +2.73%

                                               │ /tmp/manual_bench_disabled.txt │    /tmp/manual_bench_enabled.txt    │
                                               │              B/op              │     B/op      vs base               │
ManualReaderInstrumentation/NoObservability-10                     49.24Ki ± 1%   49.24Ki ± 1%       ~ (p=1.000 n=40)
ManualReaderInstrumentation/Observability-10                       51.78Ki ± 0%   51.78Ki ± 0%       ~ (p=0.485 n=40)
geomean                                                            50.50Ki        50.50Ki       +0.00%

                                               │ /tmp/manual_bench_disabled.txt │   /tmp/manual_bench_enabled.txt   │
                                               │           allocs/op            │ allocs/op   vs base               │
ManualReaderInstrumentation/NoObservability-10                       381.0 ± 1%   381.0 ± 1%       ~ (p=1.000 n=40)
ManualReaderInstrumentation/Observability-10                         387.0 ± 0%   387.0 ± 1%       ~ (p=0.485 n=40)
geomean                                                              384.0        384.0       +0.00%
```

---------

Co-authored-by: Damien Mathieu <42@dmathieu.com>
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
2025-11-03 14:55:09 -08:00
Damien Mathieu e308db8adf chore: handle Float64Histogram in log/observe errMeter (#7555)
Calling other metrics from this meter provider should be a noop, not a
panic.
This fixes the test suite in
https://github.com/open-telemetry/opentelemetry-go/pull/7524
2025-10-31 13:55:01 -07:00
ian b15942f345 Added the internal/observ package to log (#7532)
-  part of #7016

```txt
goos: darwin
goarch: arm64
pkg: go.opentelemetry.io/otel/sdk/log/internal/observ
cpu: Apple M3
                            │ bench_res.txt │
                            │    sec/op     │
SLP/LogProcessed-8             0.8900n ± 2%
SLP/LogProcessedWithError-8     119.2n ± 5%
geomean                         10.30n

                            │ bench_res.txt │
                            │     B/op      │
SLP/LogProcessed-8             0.000 ± 0%
SLP/LogProcessedWithError-8    232.0 ± 0%
geomean                                   ¹
¹ summaries must be >0 to compute geomean

                            │ bench_res.txt │
                            │   allocs/op   │
SLP/LogProcessed-8             0.000 ± 0%
SLP/LogProcessedWithError-8    3.000 ± 0%
geomean                                   ¹
¹ summaries must be >0 to compute geomean
```

---------

Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
Co-authored-by: Damien Mathieu <42@dmathieu.com>
2025-10-24 10:06:48 +02:00
renovate[bot] 56138d1060 fix(deps): update golang.org/x (#7482)
This PR contains the following updates:

| Package | Type | Update | Change | Age | Confidence |
|---|---|---|---|---|---|
| golang.org/x/exp | require | digest | `27f1f14` -> `90e834f` |
[![age](https://developer.mend.io/api/mc/badges/age/go/golang.org%2fx%2fexp/v0.0.0-20251017212417-90e834f514db?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/golang.org%2fx%2fexp/v0.0.0-20251002181428-27f1f14c8bb9/v0.0.0-20251017212417-90e834f514db?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| golang.org/x/exp/typeparams | indirect | digest | `27f1f14` ->
`90e834f` |
[![age](https://developer.mend.io/api/mc/badges/age/go/golang.org%2fx%2fexp%2ftypeparams/v0.0.0-20251017212417-90e834f514db?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/golang.org%2fx%2fexp%2ftypeparams/v0.0.0-20251002181428-27f1f14c8bb9/v0.0.0-20251017212417-90e834f514db?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| golang.org/x/net | indirect | minor | `v0.45.0` -> `v0.46.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/golang.org%2fx%2fnet/v0.46.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/golang.org%2fx%2fnet/v0.45.0/v0.46.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| golang.org/x/telemetry | indirect | digest | `ca0c2a9` -> `24f779f` |
[![age](https://developer.mend.io/api/mc/badges/age/go/golang.org%2fx%2ftelemetry/v0.0.0-20251014153721-24f779f6aaef?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/golang.org%2fx%2ftelemetry/v0.0.0-20251008162818-ca0c2a905e73/v0.0.0-20251014153721-24f779f6aaef?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| golang.org/x/tools | require | minor | `v0.37.0` -> `v0.38.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/golang.org%2fx%2ftools/v0.38.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/golang.org%2fx%2ftools/v0.37.0/v0.38.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.

---

### 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 is behind base branch, or you tick the
rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config
help](https://redirect.github.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/open-telemetry/opentelemetry-go).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xMzEuOSIsInVwZGF0ZWRJblZlciI6IjQxLjE0My4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJTa2lwIENoYW5nZWxvZyIsImRlcGVuZGVuY2llcyJdfQ==-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Tyler Yahn <codingalias@gmail.com>
2025-10-20 09:09:34 -07:00
Robert Wu eb7ec3eb96 Simulate failures for histogram creation paths without risking a nil-interface panic (#7518)
Manual reader need to add Observability metric: #7009 .

If the code under test calls meter.Float64Histogram(...), the call will
be dispatched to the embedded mapi.Meter interface field, which is nil →
runtime panic (nil interface method call).

```
go test -timeout 60s -race ./sdk/...
ok  	go.opentelemetry.io/otel/sdk	(cached)
?   	go.opentelemetry.io/otel/sdk/instrumentation	[no test files]
ok  	go.opentelemetry.io/otel/sdk/internal/x	(cached)
ok  	go.opentelemetry.io/otel/sdk/resource	(cached)
ok  	go.opentelemetry.io/otel/sdk/trace	1.995s
?   	go.opentelemetry.io/otel/sdk/trace/internal	[no test files]
ok  	go.opentelemetry.io/otel/sdk/trace/internal/env	(cached)
2025/10/14 23:56:39 internal_logging.go:50: "msg"="Setting meter provider to its current value. No delegate will be configured" "error"="no delegate configured in meter provider"
--- FAIL: TestBSPCallback (0.00s)
panic: runtime error: invalid memory address or nil pointer dereference [recovered, repanicked]
[signal SIGSEGV: segmentation violation code=0x2 addr=0x28 pc=0x1044c8c24]
```

**Resolution**:
Add `Float64Histogram` to `errMeter`

**Context**:


https://github.com/open-telemetry/opentelemetry-go/pull/7500#discussion_r2431050902
2025-10-20 07:50:56 -07:00
Mahendra Bishnoi f7d2882606 feat: sdk/trace: span processed metric for simple span processor (#7374)
Fixes #7004 

This PR adds support for experimental otel.sdk.processor.span.processed
metric in simple span processor.
Definition of metric at:
https://github.com/open-telemetry/semantic-conventions/blob/v1.36.0/docs/otel/sdk-metrics.md

Experimental metrics are behind a feature flag:
`OTEL_GO_X_OBSERVABILITY`

<details>
<summary>Observability Implementation Checklist</summary>

## Observability Implementation Checklist
Based on the [project Observability
guidelines](https://github.com/open-telemetry/opentelemetry-go/blob/e4ab3141123d0811125a69823dbbe4d9ec5a9b8f/CONTRIBUTING.md#observability),
ensure the following are completed:

### Environment Variable Activation
* [x] Observability features are disabled by default
* [x] Features are activated through the `OTEL_GO_X_OBSERVABILITY`
environment variable
* [x] Use consistent pattern with `x.Observability.Enabled()` check [^1]
* [x] Follow established experimental feature pattern [^2][^3]

[^1]:
https://github.com/open-telemetry/opentelemetry-go/blob/e4ab3141123d0811125a69823dbbe4d9ec5a9b8f/exporters/stdout/stdouttrace/internal/observ/instrumentation.go#L101-L103
[^2]:
https://github.com/open-telemetry/opentelemetry-go/blob/e4ab3141123d0811125a69823dbbe4d9ec5a9b8f/exporters/stdout/stdouttrace/internal/x/x.go
[^3]:
https://github.com/open-telemetry/opentelemetry-go/blob/e4ab3141123d0811125a69823dbbe4d9ec5a9b8f/sdk/internal/x/x.go

### Encapsulation
* [x] Instrumentation is encapsulated within a dedicated `struct` (e.g.,
[`Instrumentation`](https://github.com/open-telemetry/opentelemetry-go/blob/e4ab3141123d0811125a69823dbbe4d9ec5a9b8f/exporters/stdout/stdouttrace/internal/observ/instrumentation.go#L86-L94))
* [x] Instrumentation is not mixed into the instrumented component
* [x] Instrumentation code is in its own file or package if
complex/reused
* [x] Instrumentation setup doesn't bloat the main component code

### Initialization
* [x] Initialization is only done when observability is enabled
* [x] Setup is explicit and side-effect free
* [x] Return errors from initialization when appropriate
* [x] Use the global Meter provider (e.g., `otel.GetMeterProvider()`)
* [x] Include proper meter configuration with:
  * [x] Instrumentation package name is used for the Meter
* [x] Instrumentation version (e.g.
[`Version`](https://github.com/open-telemetry/opentelemetry-go/blob/e4ab3141123d0811125a69823dbbe4d9ec5a9b8f/exporters/stdout/stdouttrace/internal/observ/instrumentation.go#L40-L43))
* [x] Schema URL (e.g.
[`SchemaURL`](https://github.com/open-telemetry/opentelemetry-go/blob/e4ab3141123d0811125a69823dbbe4d9ec5a9b8f/exporters/stdout/stdouttrace/internal/observ/instrumentation.go#L36-L38))

### Performance
* [x] Little to no overhead when observability is disabled
* [x] Expensive operations are only executed when observability is
enabled
* [x] When enabled, instrumentation code paths are optimized to reduce
allocation/computation overhead

#### Attribute and Option Allocation Management
* [x] Use `sync.Pool` for attribute slices and options with dynamic
attributes
* [x] Pool objects are properly reset before returning to pool
* [x] Pools are scoped for maximum efficiency while ensuring correctness

#### Caching
* [x] Static attribute sets known at compile time are pre-computed and
cached
* [x] Common attribute combinations use lookup tables/maps

#### Benchmarking
* [x] Benchmarks provided for all instrumentation code
* [ ] Benchmark scenarios include both enabled and disabled
observability
* [x] Benchmark results show impact on allocs/op, B/op, and ns/op (use
`b.ReportAllocs()` in benchmarks)

### Error Handling and Robustness
* [x] Errors are reported back to caller when possible
* [x] Partial failures are handled gracefully
* [x] Use partially initialized components when available
* [x] Return errors to caller instead of only using `otel.Handle()`
* [x] Use `otel.Handle()` only when component cannot report error to
user

### Context Propagation
* [x] Observability measurements receive the context from the function
being measured (don't break context propagation by using
`context.Background()`)

### Semantic Conventions Compliance
* [x] All metrics follow [OpenTelemetry Semantic
Conventions](https://github.com/open-telemetry/semantic-conventions/blob/5ee549b1ce30fe11fcb9b7e3bd35ebfb363f467f/docs/otel/sdk-metrics.md)
* [x] Use the
[`otelconv`](https://pkg.go.dev/go.opentelemetry.io/otel@v1.38.0/semconv/v1.37.0/otelconv)
convenience package for metric semantic conventions
* [x] Component names follow semantic conventions
* [x] Use package path scope type as stable identifier for non-standard
components
* [x] Component names are stable unique identifiers
* [x] Use global counter for uniqueness if necessary
* [x] Component ID counter is resettable for deterministic testing

### Testing
* [x] Use deterministic testing with isolated state
* [x] Restore previous state after tests (`t.Cleanup()`)
* [x] Isolate meter provider for testing
* [x] Use `t.Setenv()` for environment variable testing
* [x] Reset component ID counter for deterministic component names
* [x] Test order doesn't affect results
</details>

### Benchmarks

```console
> benchstat bmark.result
goos: darwin
goarch: arm64
pkg: go.opentelemetry.io/otel/sdk/trace/internal/observ
cpu: Apple M1 Pro
                             │ bmark.result │
                             │    sec/op    │
SSP/SpanProcessed-8            146.7n ± 15%
SSP/SpanProcessedWithError-8   205.1n ±  3%
geomean                        173.5n

                             │ bmark.result │
                             │     B/op     │
SSP/SpanProcessed-8              280.0 ± 0%
SSP/SpanProcessedWithError-8     408.0 ± 0%
geomean                          338.0

                             │ bmark.result │
                             │  allocs/op   │
SSP/SpanProcessed-8              3.000 ± 0%
SSP/SpanProcessedWithError-8     3.000 ± 0%
geomean                          3.000
```

---------

Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
2025-10-17 15:57:35 -07:00
Robert Pająk b5b6989c7a sdk/log: Fix AddAttributes, SetAttributes, SetBody on Record to not mutate input (#7403)
Fixes #7364

The allocations happen only when necessary.
This is when deduplication happens or data is truncated because of the
limits.

```
goos: linux
goarch: amd64
pkg: go.opentelemetry.io/otel/sdk/log
cpu: 13th Gen Intel(R) Core(TM) i7-13800H
                                              │    old.txt    │                new.txt                 │
                                              │    sec/op     │    sec/op      vs base                 │
AddAttributes/Single/NoLimits-20                 57.91n ± 19%    29.12n ±  5%   -49.71% (p=0.000 n=10)
AddAttributes/Single/AllowDuplicates-20          24.21n ±  2%    24.46n ± 17%    +1.05% (p=0.011 n=10)
AddAttributes/Unique/NoLimits-20                 174.6n ±  8%    184.2n ±  7%    +5.47% (p=0.027 n=10)
AddAttributes/Unique/AllowDuplicates-20          69.79n ± 22%    67.83n ±  9%    -2.81% (p=0.019 n=10)
AddAttributes/Deduplication/Enabled-20           144.5n ±  4%    165.8n ±  4%   +14.71% (p=0.000 n=10)
AddAttributes/NestedDeduplication/Enabled-20     439.2n ±  2%    792.4n ± 11%   +80.41% (p=0.000 n=10)
AddAttributes/NestedDeduplication/Disabled-20   162.60n ±  1%    86.84n ±  5%   -46.59% (p=0.000 n=10)
AddAttributes/Deduplication/Disabled-20          68.15n ±  8%    67.59n ±  8%         ~ (p=0.190 n=10)
AddAttributes/CountLimit/Hit-20                  629.1n ±  4%    621.0n ±  7%         ~ (p=0.325 n=10)
AddAttributes/CountLimit/NotHit-20               914.6n ±  7%    944.2n ± 13%         ~ (p=0.393 n=10)
AddAttributes/ValueLimit/Hit-20                  133.5n ±  2%    162.1n ±  2%   +21.43% (p=0.000 n=10)
AddAttributes/ValueLimit/NotHit-20               115.8n ±  9%    131.2n ±  8%   +13.26% (p=0.000 n=10)
SetAttributes/Single/NoLimits-20                 59.38n ±  2%    28.89n ± 22%   -51.36% (p=0.000 n=10)
SetAttributes/Single/AllowDuplicates-20          24.19n ±  1%    24.30n ±  2%         ~ (p=0.867 n=10)
SetAttributes/Unique/NoLimits-20                 179.8n ±  2%    200.7n ±  6%   +11.66% (p=0.000 n=10)
SetAttributes/Unique/AllowDuplicates-20          72.65n ±  6%    71.91n ±  6%         ~ (p=0.218 n=10)
SetAttributes/Deduplication/Enabled-20           143.9n ±  6%    188.5n ± 12%   +30.96% (p=0.000 n=10)
SetAttributes/Deduplication/Disabled-20          77.68n ± 12%    69.20n ±  8%   -10.92% (p=0.008 n=10)
SetAttributes/NestedDeduplication/Enabled-20     443.7n ± 11%    770.8n ±  7%   +73.75% (p=0.000 n=10)
SetAttributes/NestedDeduplication/Disabled-20   172.60n ±  4%    91.73n ± 11%   -46.85% (p=0.000 n=10)
SetAttributes/CountLimit/Hit-20                  629.1n ±  2%    631.3n ±  7%         ~ (p=0.971 n=10)
SetAttributes/CountLimit/NotHit-20               909.2n ±  8%    866.4n ±  7%         ~ (p=0.143 n=10)
SetAttributes/ValueLimit/Hit-20                  135.5n ±  2%    150.2n ±  5%   +10.85% (p=0.000 n=10)
SetAttributes/ValueLimit/NotHit-20               121.7n ±  7%    137.2n ±  6%   +12.65% (p=0.001 n=10)
SetAttributes/Overwrite/Existing-20              176.0n ±  5%    184.1n ±  2%    +4.60% (p=0.005 n=10)
SetBody/Simple/NoLimits-20                       13.54n ±  1%    13.34n ±  2%    -1.48% (p=0.027 n=10)
SetBody/Simple/WithLimits-20                     13.46n ± 11%    13.91n ±  9%         ~ (p=0.541 n=10)
SetBody/UniqueMap/NoLimits-20                    216.2n ±  8%    183.8n ±  3%   -14.94% (p=0.000 n=10)
SetBody/UniqueMap/AllowDuplicates-20             12.89n ±  1%    12.75n ±  1%    -1.05% (p=0.001 n=10)
SetBody/Deduplication/Enabled-20                 113.5n ±  2%    164.4n ±  4%   +44.85% (p=0.000 n=10)
SetBody/Deduplication/Disabled-20                12.93n ± 41%    12.74n ±  1%    -1.51% (p=0.000 n=10)
SetBody/NestedDeduplication/Enabled-20           206.4n ±  2%    493.4n ±  2%  +139.05% (p=0.000 n=10)
SetBody/NestedDeduplication/Disabled-20          12.93n ±  1%    12.98n ± 11%         ~ (p=0.515 n=10)
SetBody/ValueLimit/Hit-20                        86.22n ±  1%   110.25n ±  3%   +27.87% (p=0.000 n=10)
SetBody/ValueLimit/NoHit-20                      85.52n ±  8%   104.25n ±  1%   +21.91% (p=0.000 n=10)
geomean                                          104.2n          107.1n          +2.84%

                                              │   old.txt    │            new.txt             │
                                              │     B/op     │    B/op     vs base            │
AddAttributes/Single/NoLimits-20                0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
AddAttributes/Single/AllowDuplicates-20         0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
AddAttributes/Unique/NoLimits-20                0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
AddAttributes/Unique/AllowDuplicates-20         0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
AddAttributes/Deduplication/Enabled-20            0.0 ± 0%     128.0 ± 0%  ? (p=0.000 n=10)
AddAttributes/NestedDeduplication/Enabled-20      0.0 ± 0%     312.0 ± 0%  ? (p=0.000 n=10)
AddAttributes/NestedDeduplication/Disabled-20   0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
AddAttributes/Deduplication/Disabled-20         0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
AddAttributes/CountLimit/Hit-20                 208.0 ± 0%     208.0 ± 0%  ~ (p=1.000 n=10) ¹
AddAttributes/CountLimit/NotHit-20              640.0 ± 0%     640.0 ± 0%  ~ (p=1.000 n=10) ¹
AddAttributes/ValueLimit/Hit-20                 0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
AddAttributes/ValueLimit/NotHit-20              0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
SetAttributes/Single/NoLimits-20                0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
SetAttributes/Single/AllowDuplicates-20         0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
SetAttributes/Unique/NoLimits-20                0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
SetAttributes/Unique/AllowDuplicates-20         0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
SetAttributes/Deduplication/Enabled-20            0.0 ± 0%     128.0 ± 0%  ? (p=0.000 n=10)
SetAttributes/Deduplication/Disabled-20         0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
SetAttributes/NestedDeduplication/Enabled-20      0.0 ± 0%     312.0 ± 0%  ? (p=0.000 n=10)
SetAttributes/NestedDeduplication/Disabled-20   0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
SetAttributes/CountLimit/Hit-20                 208.0 ± 0%     208.0 ± 0%  ~ (p=1.000 n=10) ¹
SetAttributes/CountLimit/NotHit-20              640.0 ± 0%     640.0 ± 0%  ~ (p=1.000 n=10) ¹
SetAttributes/ValueLimit/Hit-20                 0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
SetAttributes/ValueLimit/NotHit-20              0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
SetAttributes/Overwrite/Existing-20             0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
SetBody/Simple/NoLimits-20                      0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
SetBody/Simple/WithLimits-20                    0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
SetBody/UniqueMap/NoLimits-20                   0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
SetBody/UniqueMap/AllowDuplicates-20            0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
SetBody/Deduplication/Enabled-20                  0.0 ± 0%     128.0 ± 0%  ? (p=0.000 n=10)
SetBody/Deduplication/Disabled-20               0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
SetBody/NestedDeduplication/Enabled-20            0.0 ± 0%     280.0 ± 0%  ? (p=0.000 n=10)
SetBody/NestedDeduplication/Disabled-20         0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
SetBody/ValueLimit/Hit-20                       0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
SetBody/ValueLimit/NoHit-20                     0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
geomean                                                    ²               ?                ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                              │   old.txt    │            new.txt             │
                                              │  allocs/op   │ allocs/op   vs base            │
AddAttributes/Single/NoLimits-20                0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
AddAttributes/Single/AllowDuplicates-20         0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
AddAttributes/Unique/NoLimits-20                0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
AddAttributes/Unique/AllowDuplicates-20         0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
AddAttributes/Deduplication/Enabled-20          0.000 ± 0%     1.000 ± 0%  ? (p=0.000 n=10)
AddAttributes/NestedDeduplication/Enabled-20    0.000 ± 0%     5.000 ± 0%  ? (p=0.000 n=10)
AddAttributes/NestedDeduplication/Disabled-20   0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
AddAttributes/Deduplication/Disabled-20         0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
AddAttributes/CountLimit/Hit-20                 1.000 ± 0%     1.000 ± 0%  ~ (p=1.000 n=10) ¹
AddAttributes/CountLimit/NotHit-20              1.000 ± 0%     1.000 ± 0%  ~ (p=1.000 n=10) ¹
AddAttributes/ValueLimit/Hit-20                 0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
AddAttributes/ValueLimit/NotHit-20              0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
SetAttributes/Single/NoLimits-20                0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
SetAttributes/Single/AllowDuplicates-20         0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
SetAttributes/Unique/NoLimits-20                0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
SetAttributes/Unique/AllowDuplicates-20         0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
SetAttributes/Deduplication/Enabled-20          0.000 ± 0%     1.000 ± 0%  ? (p=0.000 n=10)
SetAttributes/Deduplication/Disabled-20         0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
SetAttributes/NestedDeduplication/Enabled-20    0.000 ± 0%     5.000 ± 0%  ? (p=0.000 n=10)
SetAttributes/NestedDeduplication/Disabled-20   0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
SetAttributes/CountLimit/Hit-20                 1.000 ± 0%     1.000 ± 0%  ~ (p=1.000 n=10) ¹
SetAttributes/CountLimit/NotHit-20              1.000 ± 0%     1.000 ± 0%  ~ (p=1.000 n=10) ¹
SetAttributes/ValueLimit/Hit-20                 0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
SetAttributes/ValueLimit/NotHit-20              0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
SetAttributes/Overwrite/Existing-20             0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
SetBody/Simple/NoLimits-20                      0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
SetBody/Simple/WithLimits-20                    0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
SetBody/UniqueMap/NoLimits-20                   0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
SetBody/UniqueMap/AllowDuplicates-20            0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
SetBody/Deduplication/Enabled-20                0.000 ± 0%     1.000 ± 0%  ? (p=0.000 n=10)
SetBody/Deduplication/Disabled-20               0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
SetBody/NestedDeduplication/Enabled-20          0.000 ± 0%     4.000 ± 0%  ? (p=0.000 n=10)
SetBody/NestedDeduplication/Disabled-20         0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
SetBody/ValueLimit/Hit-20                       0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
SetBody/ValueLimit/NoHit-20                     0.000 ± 0%     0.000 ± 0%  ~ (p=1.000 n=10) ¹
geomean                                                    ²               ?                ²
¹ all samples are equal
² summaries must be >0 to compute geomean
```
2025-10-16 21:07:08 +02:00
Nikhil Mantri f346decaf6 chore: sdk/internal/x - generate x package from shared template (#7495)
Closes #7384 

- Add sdk/internal/gen.go with gotmpl directives to generate x/x.go and
x/x_test.go
- Refactor sdk/internal/x/x.go to generic Feature[T] with multi-key
support and Keys()
- Move Resource feature into sdk/internal/x/features.go
(case-insensitive true enables)
- Add tests: generic feature tests in x_test.go and Resource tests in
features_test.go
- Aligns with sdk/log/internal/x pattern introduced in PR #7389

Internal note: replaces Key() with Keys() for internal Feature API.
Build and lints pass

---------

Co-authored-by: Damien Mathieu <42@dmathieu.com>
2025-10-16 09:23:17 +02:00
renovate[bot] 9dea78c87f chore(deps): update module github.com/go-critic/go-critic to v0.14.0 (#7509)
This PR contains the following updates:

| Package | Change | Age | Confidence |
|---|---|---|---|
|
[github.com/go-critic/go-critic](https://redirect.github.com/go-critic/go-critic)
| `v0.13.0` -> `v0.14.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fgo-critic%2fgo-critic/v0.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fgo-critic%2fgo-critic/v0.13.0/v0.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.

---

### Release Notes

<details>
<summary>go-critic/go-critic (github.com/go-critic/go-critic)</summary>

###
[`v0.14.0`](https://redirect.github.com/go-critic/go-critic/releases/tag/v0.14.0)

[Compare
Source](https://redirect.github.com/go-critic/go-critic/compare/v0.13.0...v0.14.0)

#### What's Changed

- checkers/exitAfterDefer: handle optional `defer` properly by
[@&#8203;Afterous](https://redirect.github.com/Afterous) in
[#&#8203;1437](https://redirect.github.com/go-critic/go-critic/pull/1437)
- checkers/deprecatedComment: check that deprecated convention appears
in a separate paragraph by
[@&#8203;mx-psi](https://redirect.github.com/mx-psi) in
[#&#8203;1470](https://redirect.github.com/go-critic/go-critic/pull/1470)
- dev: enable goprintffuncname linter by
[@&#8203;alexandear](https://redirect.github.com/alexandear) in
[#&#8203;1478](https://redirect.github.com/go-critic/go-critic/pull/1478)
- checkers: add dupOption by
[@&#8203;alingse](https://redirect.github.com/alingse) in
[#&#8203;1471](https://redirect.github.com/go-critic/go-critic/pull/1471)
- all: rename gocritic to go-critic by
[@&#8203;cristaloleg](https://redirect.github.com/cristaloleg) in
[#&#8203;1482](https://redirect.github.com/go-critic/go-critic/pull/1482)
- deps: bump golang.org/x/tools from 0.31.0 to 0.32.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;1484](https://redirect.github.com/go-critic/go-critic/pull/1484)
- checker/badCond: rhs should be also check for safe expr by
[@&#8203;codeimmortal](https://redirect.github.com/codeimmortal) in
[#&#8203;1486](https://redirect.github.com/go-critic/go-critic/pull/1486)
- deps: bump golang.org/x/tools from 0.32.0 to 0.33.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;1489](https://redirect.github.com/go-critic/go-critic/pull/1489)
- checker: add `zeroByteRepeat` for avoiding `bytes.Repeat([]byte{0},
x)` by [@&#8203;codeimmortal](https://redirect.github.com/codeimmortal)
in
[#&#8203;1488](https://redirect.github.com/go-critic/go-critic/pull/1488)
- docs/readme: add Homebrew install instructions by
[@&#8203;krehel](https://redirect.github.com/krehel) in
[#&#8203;1491](https://redirect.github.com/go-critic/go-critic/pull/1491)
- deps: bump golang.org/x/tools from 0.33.0 to 0.34.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;1492](https://redirect.github.com/go-critic/go-critic/pull/1492)
- deps: bump golang.org/x/tools from 0.34.0 to 0.35.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;1498](https://redirect.github.com/go-critic/go-critic/pull/1498)
- ci: bump actions/checkout from 4 to 5 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;1501](https://redirect.github.com/go-critic/go-critic/pull/1501)
- ci: bump actions/setup-go from 5 to 6 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;1503](https://redirect.github.com/go-critic/go-critic/pull/1503)
- deps: bump golang.org/x/tools from 0.35.0 to 0.36.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;1500](https://redirect.github.com/go-critic/go-critic/pull/1500)

#### New Contributors

- [@&#8203;mx-psi](https://redirect.github.com/mx-psi) made their first
contribution in
[#&#8203;1470](https://redirect.github.com/go-critic/go-critic/pull/1470)
- [@&#8203;codeimmortal](https://redirect.github.com/codeimmortal) made
their first contribution in
[#&#8203;1486](https://redirect.github.com/go-critic/go-critic/pull/1486)
- [@&#8203;krehel](https://redirect.github.com/krehel) made their first
contribution in
[#&#8203;1491](https://redirect.github.com/go-critic/go-critic/pull/1491)

**Full Changelog**:
<https://github.com/go-critic/go-critic/compare/v0.13.0...v0.14.0>

</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 is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/open-telemetry/opentelemetry-go).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNDMuMSIsInVwZGF0ZWRJblZlciI6IjQxLjE0My4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJTa2lwIENoYW5nZWxvZyIsImRlcGVuZGVuY2llcyJdfQ==-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: dmathieu <damien.mathieu@elastic.co>
2025-10-15 11:26:48 +02:00
Damien Mathieu 691638a817 Move sdk/internal/env to sdk/trace/internal/env (#7437)
The `sdk/internal/env` package is only used by tracing, and having that
internal package at the `sdk/` level means traces have a dependency on a
specific version of the SDK, causing issues such as
https://github.com/open-telemetry/opentelemetry-go/issues/6981

This moves the package to `sdk/trace/internal/env` to remove that
dependency.
2025-10-10 08:57:44 +02:00
renovate[bot] 0c97dfd6bd fix(deps): update golang.org/x (#7475)
This PR contains the following updates:

| Package | Change | Age | Confidence | Type | Update |
|---|---|---|---|---|---|
| golang.org/x/sys | `v0.36.0` -> `v0.37.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/golang.org%2fx%2fsys/v0.37.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/golang.org%2fx%2fsys/v0.36.0/v0.37.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| indirect | minor |
| golang.org/x/sys | `v0.36.0` -> `v0.37.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/golang.org%2fx%2fsys/v0.37.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/golang.org%2fx%2fsys/v0.36.0/v0.37.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| require | minor |
| golang.org/x/telemetry | `4eae98a` -> `badf71c` |
[![age](https://developer.mend.io/api/mc/badges/age/go/golang.org%2fx%2ftelemetry/v0.0.0-20251008142558-badf71c62812?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/golang.org%2fx%2ftelemetry/v0.0.0-20251001141935-4eae98a72453/v0.0.0-20251008142558-badf71c62812?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| indirect | digest |

---

> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.

---

### 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 is behind base branch, or you tick the
rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config
help](https://redirect.github.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/open-telemetry/opentelemetry-go).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xMzEuOSIsInVwZGF0ZWRJblZlciI6IjQxLjEzMS45IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJTa2lwIENoYW5nZWxvZyIsImRlcGVuZGVuY2llcyJdfQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-08 07:55:16 -07:00
David Ashpole 5f5f4af5e5 Document the ordering guarantees provided by the metrics SDK (#7453)
Forked from this discussion here:
https://github.com/open-telemetry/opentelemetry-go/pull/7443#discussion_r2402481912

It seems like a good idea for us as a group to align on and document
what we are comfortable with in terms of how ordered measurements are
reflected in collected metric data.

---------

Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
2025-10-07 11:21:58 -04:00
David Ashpole c8e3897521 Use sync.Map and atomics to improve sum performance (#7427)
Alternative to
https://github.com/open-telemetry/opentelemetry-go/pull/7380

This uses a sync.Map and atomics for the sum's counter value. This
intentionally introduces a new race condition that didn't previously
exist:
* It is possible for the exemplar to be recorded in the batch of metrics
after the add() for cumulative sum aggregations. For cumulative, this
isn't a huge issue since exemplars are expected to persist across
collection cycles. This is difficult to fix because we can't manage the
internal storage of an exemplar.Reservoir (to atomically swap between
hot and cold storage). If we are able to make assumptions about how
exemplar reservoirs are managed (i.e. that the number of and order of
exemplars returned is always the same), then we could possibly fix this
by merging at export time.

### Alternatives Considered

#### RWLock for the map instead of sync.Map

This is significantly less performant.

#### Single sync.Map without hotColdWaitGroup

Deleting keys from the sync.Map concurrently with measurements (during
Clear() of the sync.Map) can cause measurements to be made to a counter
that has already been read, exported and deleted. This can produce
incorrect sums when delta is used. Instead, atomically switching writes
to a completely empty sync.Map and waiting for writes to the previous
sync.Map complete eliminates this issue.

#### Use two sync.Map for cumulative sums

One idea I explored was doing a hot-cold swap for cumulative sums just
like we do for delta sums. We would swap the hot and cold sync.Maps,
wait for writes to the cold sync.Map to complete while new writes go to
the hot map. Then, once we are done reading the cold map, we could merge
the contents of the cold map back into the new hot map.

This approach has two issues:

* It isn't possible to "merge" one exemplar reservoir into another. This
is an issue for persistent exemplars that aren't overwritten in a
collection interval.
* We can't keep a consistent set of keys in overflow scenarios.
Measurements that are made to the hot map before the merge of the cold
into hot that should have been overflows will be added as new attribute
sets. That, in turn, means we will need to change previously-exported
attribute sets to the overflow set, which will cause issues for users.

### Benchmarks

Parallel:
```
goos: linux
goarch: amd64
pkg: go.opentelemetry.io/otel/sdk/metric
cpu: AMD EPYC 7B12
                                                                                  │  main24.txt   │            new24_new.txt            │
                                                                                  │    sec/op     │    sec/op     vs base               │
SyncMeasure/NoView/ExemplarsDisabled/Int64Counter/Attributes/0-24                   255.65n ± 13%   68.06n ±  3%  -73.38% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Int64Counter/Attributes/1-24                   286.70n ±  8%   67.66n ±  4%  -76.40% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Int64Counter/Attributes/10-24                  287.15n ± 14%   69.90n ±  3%  -75.66% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Float64Counter/Attributes/0-24                 244.75n ±  9%   68.83n ±  4%  -71.88% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Float64Counter/Attributes/1-24                 267.20n ± 14%   65.86n ±  3%  -75.35% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Float64Counter/Attributes/10-24                291.50n ± 13%   66.59n ± 11%  -77.15% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Int64UpDownCounter/Attributes/0-24             247.85n ±  7%   66.06n ±  3%  -73.34% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Int64UpDownCounter/Attributes/1-24             286.75n ± 10%   68.52n ±  2%  -76.10% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Int64UpDownCounter/Attributes/10-24            289.50n ± 20%   67.45n ±  4%  -76.70% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Float64UpDownCounter/Attributes/0-24           246.25n ± 14%   66.69n ±  2%  -72.92% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Float64UpDownCounter/Attributes/1-24           289.55n ±  9%   65.54n ±  5%  -77.36% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Float64UpDownCounter/Attributes/10-24          286.05n ± 14%   67.55n ±  2%  -76.39% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Int64Gauge/Attributes/0-24                      254.8n ± 23%   225.9n ± 17%  -11.32% (p=0.026 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Int64Gauge/Attributes/1-24                      304.4n ± 13%   234.4n ± 19%  -23.01% (p=0.004 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Int64Gauge/Attributes/10-24                     308.9n ± 20%   217.6n ± 10%  -29.56% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Float64Gauge/Attributes/0-24                    267.8n ± 14%   220.1n ± 19%  -17.80% (p=0.004 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Float64Gauge/Attributes/1-24                    274.1n ± 21%   226.5n ±  5%  -17.38% (p=0.024 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Float64Gauge/Attributes/10-24                   239.0n ± 14%   236.1n ± 18%        ~ (p=0.589 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Int64Histogram/Attributes/0-24                  223.7n ± 11%   234.8n ±  7%        ~ (p=0.240 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Int64Histogram/Attributes/1-24                  253.9n ± 10%   244.8n ± 11%        ~ (p=0.240 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Int64Histogram/Attributes/10-24                 272.6n ±  7%   250.0n ± 12%   -8.33% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Float64Histogram/Attributes/0-24                232.6n ±  4%   232.2n ±  8%        ~ (p=0.937 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Float64Histogram/Attributes/1-24                276.7n ± 20%   249.2n ± 11%        ~ (p=0.485 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Float64Histogram/Attributes/10-24               265.9n ± 18%   246.4n ±  9%        ~ (p=0.240 n=6)
SyncMeasure/NoView/ExemplarsDisabled/ExponentialInt64Histogram/Attributes/0-24       294.0n ± 11%   269.0n ±  5%   -8.47% (p=0.015 n=6)
SyncMeasure/NoView/ExemplarsDisabled/ExponentialInt64Histogram/Attributes/1-24       314.6n ± 10%   268.8n ±  6%  -14.54% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsDisabled/ExponentialInt64Histogram/Attributes/10-24      303.9n ± 11%   285.4n ±  4%        ~ (p=0.180 n=6)
SyncMeasure/NoView/ExemplarsDisabled/ExponentialFloat64Histogram/Attributes/0-24     274.7n ± 13%   262.9n ±  7%        ~ (p=0.145 n=6)
SyncMeasure/NoView/ExemplarsDisabled/ExponentialFloat64Histogram/Attributes/1-24     296.1n ±  6%   288.9n ±  9%        ~ (p=0.180 n=6)
SyncMeasure/NoView/ExemplarsDisabled/ExponentialFloat64Histogram/Attributes/10-24    276.0n ± 14%   299.4n ± 12%        ~ (p=0.240 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Int64Counter/Attributes/0-24                     191.4n ±  4%   176.0n ±  3%   -8.05% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Int64Counter/Attributes/1-24                     223.2n ±  8%   172.8n ±  3%  -22.54% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Int64Counter/Attributes/10-24                    265.7n ± 19%   172.2n ±  2%  -35.21% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Float64Counter/Attributes/0-24                   179.4n ± 18%   171.0n ±  3%   -4.74% (p=0.009 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Float64Counter/Attributes/1-24                   209.1n ± 16%   175.4n ±  5%  -16.07% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Float64Counter/Attributes/10-24                  222.5n ± 17%   175.6n ±  4%  -21.08% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Int64UpDownCounter/Attributes/0-24               194.4n ± 11%   176.9n ±  5%   -9.03% (p=0.004 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Int64UpDownCounter/Attributes/1-24               207.5n ± 13%   175.1n ±  2%  -15.66% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Int64UpDownCounter/Attributes/10-24              243.7n ± 13%   172.6n ±  3%  -29.15% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Float64UpDownCounter/Attributes/0-24             218.3n ± 10%   177.6n ±  2%  -18.67% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Float64UpDownCounter/Attributes/1-24             193.5n ± 10%   176.1n ±  2%   -8.99% (p=0.004 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Float64UpDownCounter/Attributes/10-24            192.8n ± 11%   173.7n ±  2%   -9.91% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Int64Gauge/Attributes/0-24                       185.1n ±  9%   204.8n ±  9%  +10.61% (p=0.004 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Int64Gauge/Attributes/1-24                       218.8n ± 14%   229.7n ± 16%        ~ (p=0.310 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Int64Gauge/Attributes/10-24                      242.7n ±  8%   209.1n ± 18%  -13.84% (p=0.041 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Float64Gauge/Attributes/0-24                     182.8n ± 42%   255.2n ±  8%  +39.67% (p=0.015 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Float64Gauge/Attributes/1-24                     198.0n ±  7%   280.6n ± 22%  +41.72% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Float64Gauge/Attributes/10-24                    236.3n ± 18%   261.7n ±  8%        ~ (p=0.065 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Int64Histogram/Attributes/0-24                   223.2n ±  9%   226.9n ±  4%        ~ (p=0.965 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Int64Histogram/Attributes/1-24                   270.1n ± 10%   280.2n ±  6%        ~ (p=0.143 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Int64Histogram/Attributes/10-24                  257.2n ±  7%   252.0n ±  7%        ~ (p=0.485 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Float64Histogram/Attributes/0-24                 277.0n ±  5%   310.4n ± 12%        ~ (p=0.065 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Float64Histogram/Attributes/1-24                 287.3n ±  9%   271.2n ± 12%        ~ (p=0.699 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Float64Histogram/Attributes/10-24                281.8n ±  9%   316.5n ± 22%  +12.29% (p=0.041 n=6)
SyncMeasure/NoView/ExemplarsEnabled/ExponentialInt64Histogram/Attributes/0-24        289.1n ±  9%   297.1n ± 12%        ~ (p=0.310 n=6)
SyncMeasure/NoView/ExemplarsEnabled/ExponentialInt64Histogram/Attributes/1-24        277.8n ±  6%   353.1n ± 11%  +27.11% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsEnabled/ExponentialInt64Histogram/Attributes/10-24       281.8n ± 11%   352.2n ± 16%  +24.94% (p=0.009 n=6)
SyncMeasure/NoView/ExemplarsEnabled/ExponentialFloat64Histogram/Attributes/0-24      294.1n ±  7%   317.5n ±  9%        ~ (p=0.065 n=6)
SyncMeasure/NoView/ExemplarsEnabled/ExponentialFloat64Histogram/Attributes/1-24      281.7n ± 10%   332.1n ±  8%  +17.89% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsEnabled/ExponentialFloat64Histogram/Attributes/10-24     238.9n ± 12%   318.1n ±  9%  +33.13% (p=0.002 n=6)
geomean                                                                              251.9n         184.4n        -26.77%
```


Single-threaded:
```
goos: linux
goarch: amd64
pkg: go.opentelemetry.io/otel/sdk/metric
cpu: Intel(R) Xeon(R) CPU @ 2.20GHz
                                                                               │  main1.txt   │              sync1.txt              │
                                                                               │    sec/op    │    sec/op     vs base               │
SyncMeasure/NoView/ExemplarsDisabled/Int64Counter/Attributes/0                   109.8n ±  7%   113.4n ± 23%        ~ (p=1.000 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Int64Counter/Attributes/1                   115.0n ±  4%   113.3n ± 20%        ~ (p=0.729 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Int64Counter/Attributes/10                  177.1n ± 34%   110.2n ± 16%  -37.78% (p=0.009 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Float64Counter/Attributes/0                 110.5n ± 42%   109.2n ± 19%        ~ (p=0.457 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Float64Counter/Attributes/1                 118.8n ±  2%   118.4n ±  5%        ~ (p=0.619 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Float64Counter/Attributes/10                119.0n ±  2%   116.8n ± 42%        ~ (p=0.699 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Int64UpDownCounter/Attributes/0             106.9n ±  1%   102.5n ±  5%   -4.16% (p=0.030 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Int64UpDownCounter/Attributes/1             117.2n ±  2%   116.9n ±  7%        ~ (p=1.000 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Int64UpDownCounter/Attributes/10            115.4n ±  1%   115.1n ±  5%        ~ (p=0.937 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Float64UpDownCounter/Attributes/0           109.5n ±  5%   104.2n ±  8%   -4.84% (p=0.041 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Float64UpDownCounter/Attributes/1           118.7n ± 14%   113.8n ± 35%        ~ (p=0.240 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Float64UpDownCounter/Attributes/10          116.6n ±  1%   116.8n ±  8%        ~ (p=0.968 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Int64Gauge/Attributes/0                     106.6n ±  4%   109.4n ±  5%        ~ (p=0.093 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Int64Gauge/Attributes/1                     114.7n ±  4%   117.9n ±  4%        ~ (p=0.240 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Int64Gauge/Attributes/10                    115.2n ±  4%   114.5n ±  1%        ~ (p=0.162 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Float64Gauge/Attributes/0                   109.4n ±  5%   107.5n ±  3%        ~ (p=0.132 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Float64Gauge/Attributes/1                   118.3n ±  2%   117.9n ±  3%        ~ (p=0.589 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Float64Gauge/Attributes/10                  117.7n ±  2%   120.8n ± 14%        ~ (p=0.093 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Int64Histogram/Attributes/0                 96.78n ±  1%   99.37n ±  3%        ~ (p=0.065 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Int64Histogram/Attributes/1                 103.0n ±  3%   116.5n ± 26%  +13.16% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Int64Histogram/Attributes/10                102.8n ±  1%   107.6n ± 22%   +4.67% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Float64Histogram/Attributes/0               93.95n ± 22%   99.88n ± 18%   +6.32% (p=0.041 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Float64Histogram/Attributes/1               102.7n ±  5%   106.2n ±  6%        ~ (p=0.089 n=6)
SyncMeasure/NoView/ExemplarsDisabled/Float64Histogram/Attributes/10              104.1n ±  4%   108.3n ± 27%   +4.03% (p=0.026 n=6)
SyncMeasure/NoView/ExemplarsDisabled/ExponentialInt64Histogram/Attributes/0      146.3n ±  1%   154.0n ± 24%   +5.23% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsDisabled/ExponentialInt64Histogram/Attributes/1      154.8n ±  3%   161.2n ±  2%   +4.20% (p=0.004 n=6)
SyncMeasure/NoView/ExemplarsDisabled/ExponentialInt64Histogram/Attributes/10     155.5n ±  1%   164.0n ±  4%   +5.43% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsDisabled/ExponentialFloat64Histogram/Attributes/0    145.9n ±  2%   159.7n ± 12%   +9.42% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsDisabled/ExponentialFloat64Histogram/Attributes/1    155.2n ±  0%   164.0n ±  6%   +5.70% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsDisabled/ExponentialFloat64Histogram/Attributes/10   219.3n ± 29%   159.5n ±  3%        ~ (p=0.065 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Int64Counter/Attributes/0                    263.6n ± 36%   177.2n ±  1%        ~ (p=0.065 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Int64Counter/Attributes/1                    189.1n ±  8%   190.4n ± 12%        ~ (p=0.589 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Int64Counter/Attributes/10                   184.3n ±  3%   189.4n ±  6%        ~ (p=0.065 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Float64Counter/Attributes/0                  180.7n ±  1%   182.7n ±  2%        ~ (p=0.457 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Float64Counter/Attributes/1                  192.8n ±  9%   192.0n ±  1%        ~ (p=1.000 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Float64Counter/Attributes/10                 192.3n ±  4%   190.2n ±  4%        ~ (p=0.093 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Int64UpDownCounter/Attributes/0              176.5n ±  2%   181.7n ±  4%   +2.95% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Int64UpDownCounter/Attributes/1              184.0n ±  4%   192.0n ±  1%   +4.32% (p=0.015 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Int64UpDownCounter/Attributes/10             184.4n ±  1%   195.2n ±  3%   +5.83% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Float64UpDownCounter/Attributes/0            183.0n ±  3%   177.4n ±  5%   -3.06% (p=0.048 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Float64UpDownCounter/Attributes/1            194.4n ±  4%   188.1n ±  5%        ~ (p=0.084 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Float64UpDownCounter/Attributes/10           193.0n ±  5%   194.1n ±  5%        ~ (p=0.699 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Int64Gauge/Attributes/0                      178.4n ± 14%   185.6n ± 29%        ~ (p=0.240 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Int64Gauge/Attributes/1                      189.0n ±  8%   193.2n ±  2%        ~ (p=0.132 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Int64Gauge/Attributes/10                     197.7n ±  5%   198.8n ±  2%        ~ (p=0.619 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Float64Gauge/Attributes/0                    185.5n ±  3%   188.8n ±  4%        ~ (p=0.310 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Float64Gauge/Attributes/1                    191.2n ±  3%   190.2n ±  7%        ~ (p=0.732 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Float64Gauge/Attributes/10                   186.8n ±  2%   197.1n ±  6%   +5.54% (p=0.004 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Int64Histogram/Attributes/0                  224.2n ±  4%   227.3n ±  2%        ~ (p=0.394 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Int64Histogram/Attributes/1                  232.5n ±  3%   242.5n ±  5%        ~ (p=0.132 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Int64Histogram/Attributes/10                 232.5n ±  3%   237.1n ±  5%   +2.00% (p=0.045 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Float64Histogram/Attributes/0                227.5n ±  2%   238.5n ±  5%   +4.81% (p=0.017 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Float64Histogram/Attributes/1                239.4n ±  8%   250.1n ±  6%        ~ (p=0.240 n=6)
SyncMeasure/NoView/ExemplarsEnabled/Float64Histogram/Attributes/10               241.5n ±  4%   254.0n ±  2%   +5.18% (p=0.004 n=6)
SyncMeasure/NoView/ExemplarsEnabled/ExponentialInt64Histogram/Attributes/0       231.1n ±  5%   239.2n ±  3%        ~ (p=0.084 n=6)
SyncMeasure/NoView/ExemplarsEnabled/ExponentialInt64Histogram/Attributes/1       260.2n ± 16%   253.8n ±  4%        ~ (p=0.190 n=6)
SyncMeasure/NoView/ExemplarsEnabled/ExponentialInt64Histogram/Attributes/10      234.3n ±  1%   246.8n ±  2%   +5.29% (p=0.002 n=6)
SyncMeasure/NoView/ExemplarsEnabled/ExponentialFloat64Histogram/Attributes/0     221.8n ±  6%   232.0n ±  4%   +4.58% (p=0.037 n=6)
SyncMeasure/NoView/ExemplarsEnabled/ExponentialFloat64Histogram/Attributes/1     228.2n ±  7%   240.6n ±  1%   +5.41% (p=0.041 n=6)
SyncMeasure/NoView/ExemplarsEnabled/ExponentialFloat64Histogram/Attributes/10    228.6n ±  7%   244.7n ±  1%   +7.04% (p=0.015 n=6)
geomean                                                                          158.1n         158.1n         +0.00%
```

---------

Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
2025-10-07 09:40:23 -04:00
Mahendra Bishnoi a10652b501 sdk/trace: trace id high 64 bit tests (#7212)
Fixes https://github.com/open-telemetry/opentelemetry-go/issues/7160

- Modified `testIDGenerator` to have both low and high bits (in uint64
form) since we can't store 128 bits integer
- start with high seed values (taken from
https://github.com/open-telemetry/opentelemetry-go/pull/7155)
- validate both high and low 64 bits of trace id

Does not need a CHANGELOG entry - test only.

---------

Co-authored-by: Damien Mathieu <42@dmathieu.com>
Co-authored-by: Robert Pająk <pellared@hotmail.com>
Co-authored-by: dmathieu <damien.mathieu@elastic.co>
2025-10-06 11:13:51 +02:00
David Ashpole bd1b3da91c Add exemplar reservoir parallel benchmarks (#7441)
This also fixes a bug introduced in
https://github.com/open-telemetry/opentelemetry-go/pull/7423, where we
were only locking around storage and not around other shared fields
(e.g. count). Fixing the bug is required for benchmarks to run properly,
but wasn't caught by concurrent safe tests because the SDK does not
currently call exemplar methods concurrently.

```
goos: linux
goarch: amd64
pkg: go.opentelemetry.io/otel/sdk/metric/exemplar
cpu: Intel(R) Xeon(R) CPU @ 2.20GHz
BenchmarkFixedSizeReservoirOffer-24    	  498955	       248.4 ns/op	       0 B/op	       0 allocs/op
BenchmarkHistogramReservoirOffer-24    	  478068	       250.1 ns/op	       0 B/op	       0 allocs/op
```
2025-10-03 09:11:00 +02:00