From 0e8e7a2311bb93ae09083b9de7ab642214016651 Mon Sep 17 00:00:00 2001 From: Lev Zakharov Date: Mon, 28 Jul 2025 14:32:51 +0300 Subject: [PATCH 1/3] sdk/metric: use runtime.GOMAXPROCS(0) instead of runtime.NumCPU() in DefaultExemplarReservoirProviderSelector for the FixedSizeReservoirProvider default size --- CHANGELOG.md | 1 + sdk/metric/exemplar.go | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6fcc8a608ab..4dedede9519 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -53,6 +53,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm - Change `AssertEqual` in `go.opentelemetry.io/otel/log/logtest` to accept `TestingT` in order to support benchmarks and fuzz tests. (#6908) - Change `SDKProcessorLogQueueCapacity`, `SDKProcessorLogQueueSize`, `SDKProcessorSpanQueueSize`, and `SDKProcessorSpanQueueCapacity` in `go.opentelemetry.io/otel/semconv/v1.36.0/otelconv` to use a `Int64ObservableUpDownCounter`. (#7041) +- Change `DefaultExemplarReservoirProviderSelector` in `go.opentelemetry.io/otel/sdk/metric` to use `runtime.GOMAXPROCS(0)` instead of `runtime.NumCPU()` for the `FixedSizeReservoirProvider` default size. (#7094) diff --git a/sdk/metric/exemplar.go b/sdk/metric/exemplar.go index 549d3bd5f95..86d05d6dabf 100644 --- a/sdk/metric/exemplar.go +++ b/sdk/metric/exemplar.go @@ -69,7 +69,7 @@ func DefaultExemplarReservoirProviderSelector(agg Aggregation) exemplar.Reservoi // provided, the default size MAY be the number of possible // concurrent threads (e.g. number of CPUs) to help reduce // contention. Otherwise, a default size of 1 SHOULD be used. - n = runtime.NumCPU() + n = runtime.GOMAXPROCS(0) if n < 1 { // Should never be the case, but be defensive. n = 1 From 3e23b6f74a73ed3d7ec8f4ed729e81569a8f35b6 Mon Sep 17 00:00:00 2001 From: Lev Zakharov Date: Mon, 28 Jul 2025 20:12:57 +0300 Subject: [PATCH 2/3] Apply suggestion Co-authored-by: Tyler Yahn --- sdk/metric/exemplar.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sdk/metric/exemplar.go b/sdk/metric/exemplar.go index 86d05d6dabf..792301aaa03 100644 --- a/sdk/metric/exemplar.go +++ b/sdk/metric/exemplar.go @@ -69,6 +69,10 @@ func DefaultExemplarReservoirProviderSelector(agg Aggregation) exemplar.Reservoi // provided, the default size MAY be the number of possible // concurrent threads (e.g. number of CPUs) to help reduce // contention. Otherwise, a default size of 1 SHOULD be used. + // + // Use runtime.GOMAXPROCS instead of runtime.NumCPU to support + // containerized environments that may have less than the total number + // of logical CPUs available on the local machine allocated to it. n = runtime.GOMAXPROCS(0) if n < 1 { // Should never be the case, but be defensive. From 38839c587d8fc58b1aa23debba28176d619c4534 Mon Sep 17 00:00:00 2001 From: Tyler Yahn Date: Tue, 29 Jul 2025 08:07:10 -0700 Subject: [PATCH 3/3] Fix merge --- sdk/metric/exemplar.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/metric/exemplar.go b/sdk/metric/exemplar.go index 9fb9c66dfa5..38b8745e676 100644 --- a/sdk/metric/exemplar.go +++ b/sdk/metric/exemplar.go @@ -70,7 +70,7 @@ func DefaultExemplarReservoirProviderSelector(agg Aggregation) exemplar.Reservoi // Use runtime.GOMAXPROCS instead of runtime.NumCPU to support // containerized environments that may have less than the total number // of logical CPUs available on the local machine allocated to it. - n = max(runtime.GOMAXPROCS(0), 1) + n = max(runtime.GOMAXPROCS(0), 1) } return exemplar.FixedSizeReservoirProvider(n)