Skip to content

Commit 45539cf

Browse files
dashpolepellared
andauthored
Only enforce cardinality limits when the attribute set does not already exist (#7422)
Fixes #7035 Benchmarks with a default value of 2000. Parallel ``` goos: linux goarch: amd64 pkg: go.opentelemetry.io/otel/sdk/metric cpu: Intel(R) Xeon(R) CPU @ 2.20GHz │ main24.txt │ newwithlimit24.txt │ │ sec/op │ sec/op vs base │ SyncMeasure/NoView/ExemplarsDisabled/Int64Counter/Attributes/0-24 272.4n ± 6% 287.6n ± 11% ~ (p=0.310 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64Counter/Attributes/1-24 318.1n ± 9% 289.9n ± 11% ~ (p=0.093 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64Counter/Attributes/10-24 305.5n ± 13% 273.4n ± 9% ~ (p=0.180 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64Counter/Attributes/0-24 263.4n ± 14% 273.1n ± 12% ~ (p=0.485 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64Counter/Attributes/1-24 276.8n ± 8% 284.3n ± 10% ~ (p=0.310 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64Counter/Attributes/10-24 266.2n ± 10% 285.9n ± 16% ~ (p=0.394 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64UpDownCounter/Attributes/0-24 265.9n ± 11% 286.4n ± 14% ~ (p=0.310 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64UpDownCounter/Attributes/1-24 301.6n ± 16% 286.1n ± 6% ~ (p=0.310 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64UpDownCounter/Attributes/10-24 256.1n ± 16% 282.7n ± 14% +10.41% (p=0.041 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64UpDownCounter/Attributes/0-24 269.1n ± 19% 272.0n ± 6% ~ (p=0.485 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64UpDownCounter/Attributes/1-24 299.5n ± 12% 261.6n ± 16% -12.67% (p=0.013 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64UpDownCounter/Attributes/10-24 286.3n ± 16% 275.8n ± 10% ~ (p=0.310 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64Gauge/Attributes/0-24 265.4n ± 4% 243.1n ± 11% ~ (p=0.093 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64Gauge/Attributes/1-24 260.6n ± 10% 258.7n ± 17% ~ (p=0.818 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64Gauge/Attributes/10-24 266.6n ± 15% 251.8n ± 16% ~ (p=0.699 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64Gauge/Attributes/0-24 265.4n ± 9% 263.3n ± 13% ~ (p=0.818 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64Gauge/Attributes/1-24 271.7n ± 15% 305.4n ± 21% ~ (p=0.132 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64Gauge/Attributes/10-24 287.4n ± 13% 265.7n ± 9% ~ (p=0.093 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64Histogram/Attributes/0-24 276.6n ± 9% 300.4n ± 25% ~ (p=0.180 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64Histogram/Attributes/1-24 294.9n ± 11% 276.8n ± 21% ~ (p=0.818 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64Histogram/Attributes/10-24 308.3n ± 8% 281.4n ± 20% ~ (p=0.180 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64Histogram/Attributes/0-24 296.1n ± 13% 286.5n ± 14% ~ (p=0.937 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64Histogram/Attributes/1-24 329.0n ± 19% 299.6n ± 8% ~ (p=0.240 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64Histogram/Attributes/10-24 288.1n ± 28% 309.9n ± 14% ~ (p=0.937 n=6) SyncMeasure/NoView/ExemplarsDisabled/ExponentialInt64Histogram/Attributes/0-24 298.3n ± 12% 282.9n ± 9% ~ (p=0.240 n=6) SyncMeasure/NoView/ExemplarsDisabled/ExponentialInt64Histogram/Attributes/1-24 309.7n ± 4% 355.2n ± 11% +14.67% (p=0.002 n=6) SyncMeasure/NoView/ExemplarsDisabled/ExponentialInt64Histogram/Attributes/10-24 308.5n ± 12% 307.6n ± 15% ~ (p=1.000 n=6) SyncMeasure/NoView/ExemplarsDisabled/ExponentialFloat64Histogram/Attributes/0-24 294.1n ± 17% 289.1n ± 24% ~ (p=0.818 n=6) SyncMeasure/NoView/ExemplarsDisabled/ExponentialFloat64Histogram/Attributes/1-24 326.6n ± 13% 299.2n ± 14% ~ (p=0.240 n=6) SyncMeasure/NoView/ExemplarsDisabled/ExponentialFloat64Histogram/Attributes/10-24 329.8n ± 19% 283.7n ± 15% ~ (p=0.132 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64Counter/Attributes/0-24 269.9n ± 15% 266.7n ± 6% ~ (p=0.818 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64Counter/Attributes/1-24 297.4n ± 9% 271.9n ± 5% -8.59% (p=0.009 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64Counter/Attributes/10-24 326.4n ± 20% 276.3n ± 5% -15.32% (p=0.002 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64Counter/Attributes/0-24 298.1n ± 10% 259.6n ± 10% -12.92% (p=0.009 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64Counter/Attributes/1-24 311.4n ± 6% 276.8n ± 7% -11.11% (p=0.002 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64Counter/Attributes/10-24 312.4n ± 7% 264.1n ± 8% -15.45% (p=0.002 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64UpDownCounter/Attributes/0-24 286.2n ± 8% 272.9n ± 13% ~ (p=0.180 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64UpDownCounter/Attributes/1-24 310.1n ± 4% 289.2n ± 11% ~ (p=0.065 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64UpDownCounter/Attributes/10-24 329.8n ± 8% 277.1n ± 11% -15.95% (p=0.002 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64UpDownCounter/Attributes/0-24 261.4n ± 17% 262.8n ± 7% ~ (p=0.965 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64UpDownCounter/Attributes/1-24 292.3n ± 10% 271.2n ± 8% -7.22% (p=0.026 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64UpDownCounter/Attributes/10-24 306.6n ± 12% 271.9n ± 7% ~ (p=0.065 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64Gauge/Attributes/0-24 263.2n ± 22% 254.7n ± 6% ~ (p=0.240 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64Gauge/Attributes/1-24 284.8n ± 5% 285.0n ± 11% ~ (p=0.937 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64Gauge/Attributes/10-24 285.7n ± 17% 296.6n ± 10% ~ (p=0.485 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64Gauge/Attributes/0-24 272.3n ± 11% 261.4n ± 8% ~ (p=0.093 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64Gauge/Attributes/1-24 281.9n ± 21% 287.8n ± 11% ~ (p=0.937 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64Gauge/Attributes/10-24 283.3n ± 15% 254.3n ± 12% -10.24% (p=0.041 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64Histogram/Attributes/0-24 296.1n ± 13% 295.5n ± 9% ~ (p=0.937 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64Histogram/Attributes/1-24 310.0n ± 19% 301.7n ± 11% ~ (p=0.485 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64Histogram/Attributes/10-24 298.8n ± 17% 297.1n ± 3% ~ (p=0.937 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64Histogram/Attributes/0-24 303.4n ± 7% 280.9n ± 8% ~ (p=0.093 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64Histogram/Attributes/1-24 292.2n ± 14% 290.7n ± 13% ~ (p=1.000 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64Histogram/Attributes/10-24 313.9n ± 20% 314.4n ± 8% ~ (p=1.000 n=6) SyncMeasure/NoView/ExemplarsEnabled/ExponentialInt64Histogram/Attributes/0-24 289.8n ± 3% 287.3n ± 3% ~ (p=1.000 n=6) SyncMeasure/NoView/ExemplarsEnabled/ExponentialInt64Histogram/Attributes/1-24 321.0n ± 6% 308.7n ± 8% -3.82% (p=0.041 n=6) SyncMeasure/NoView/ExemplarsEnabled/ExponentialInt64Histogram/Attributes/10-24 313.1n ± 9% 315.4n ± 5% ~ (p=0.818 n=6) SyncMeasure/NoView/ExemplarsEnabled/ExponentialFloat64Histogram/Attributes/0-24 318.9n ± 13% 285.8n ± 24% ~ (p=0.180 n=6) SyncMeasure/NoView/ExemplarsEnabled/ExponentialFloat64Histogram/Attributes/1-24 319.0n ± 9% 317.0n ± 12% ~ (p=0.937 n=6) SyncMeasure/NoView/ExemplarsEnabled/ExponentialFloat64Histogram/Attributes/10-24 396.8n ± 15% 300.3n ± 5% -24.30% (p=0.002 n=6) geomean 294.1n 282.9n -3.80% ``` Single-threaded: ``` goos: linux goarch: amd64 pkg: go.opentelemetry.io/otel/sdk/metric cpu: Intel(R) Xeon(R) CPU @ 2.20GHz │ main1.txt │ newwithlimit1.txt │ │ sec/op │ sec/op vs base │ SyncMeasure/NoView/ExemplarsDisabled/Int64Counter/Attributes/0 117.5n ± 5% 109.8n ± 20% ~ (p=0.089 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64Counter/Attributes/1 128.5n ± 35% 118.5n ± 3% -7.79% (p=0.002 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64Counter/Attributes/10 126.4n ± 4% 117.3n ± 4% -7.16% (p=0.004 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64Counter/Attributes/0 110.4n ± 1% 112.2n ± 3% +1.59% (p=0.028 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64Counter/Attributes/1 119.8n ± 2% 118.4n ± 4% ~ (p=0.171 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64Counter/Attributes/10 120.1n ± 2% 121.9n ± 3% ~ (p=0.394 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64UpDownCounter/Attributes/0 117.3n ± 38% 109.5n ± 2% ~ (p=0.093 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64UpDownCounter/Attributes/1 120.8n ± 28% 119.9n ± 8% ~ (p=1.000 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64UpDownCounter/Attributes/10 121.1n ± 3% 117.0n ± 2% -3.38% (p=0.009 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64UpDownCounter/Attributes/0 111.8n ± 11% 111.0n ± 2% ~ (p=0.331 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64UpDownCounter/Attributes/1 121.7n ± 9% 117.5n ± 1% -3.49% (p=0.002 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64UpDownCounter/Attributes/10 126.5n ± 4% 122.3n ± 8% ~ (p=0.290 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64Gauge/Attributes/0 125.5n ± 25% 109.2n ± 3% -12.98% (p=0.002 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64Gauge/Attributes/1 121.7n ± 6% 116.5n ± 6% -4.31% (p=0.022 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64Gauge/Attributes/10 119.9n ± 4% 120.8n ± 4% ~ (p=0.838 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64Gauge/Attributes/0 112.5n ± 6% 109.7n ± 40% ~ (p=0.310 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64Gauge/Attributes/1 121.2n ± 6% 121.4n ± 3% ~ (p=0.727 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64Gauge/Attributes/10 118.6n ± 2% 120.5n ± 2% +1.69% (p=0.045 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64Histogram/Attributes/0 97.38n ± 14% 96.56n ± 10% ~ (p=0.240 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64Histogram/Attributes/1 107.1n ± 4% 105.6n ± 5% ~ (p=0.240 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64Histogram/Attributes/10 109.7n ± 5% 108.4n ± 3% ~ (p=0.221 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64Histogram/Attributes/0 98.30n ± 4% 96.02n ± 2% -2.31% (p=0.015 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64Histogram/Attributes/1 107.9n ± 9% 106.2n ± 14% ~ (p=0.180 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64Histogram/Attributes/10 107.6n ± 1% 107.0n ± 1% ~ (p=0.485 n=6) SyncMeasure/NoView/ExemplarsDisabled/ExponentialInt64Histogram/Attributes/0 151.5n ± 3% 149.7n ± 2% ~ (p=0.071 n=6) SyncMeasure/NoView/ExemplarsDisabled/ExponentialInt64Histogram/Attributes/1 161.2n ± 2% 158.5n ± 3% -1.67% (p=0.035 n=6) SyncMeasure/NoView/ExemplarsDisabled/ExponentialInt64Histogram/Attributes/10 162.3n ± 2% 159.9n ± 37% ~ (p=0.240 n=6) SyncMeasure/NoView/ExemplarsDisabled/ExponentialFloat64Histogram/Attributes/0 154.7n ± 10% 149.0n ± 1% -3.68% (p=0.002 n=6) SyncMeasure/NoView/ExemplarsDisabled/ExponentialFloat64Histogram/Attributes/1 161.0n ± 2% 160.5n ± 3% ~ (p=0.732 n=6) SyncMeasure/NoView/ExemplarsDisabled/ExponentialFloat64Histogram/Attributes/10 162.9n ± 1% 162.6n ± 27% ~ (p=0.838 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64Counter/Attributes/0 180.1n ± 4% 174.0n ± 7% ~ (p=0.065 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64Counter/Attributes/1 193.2n ± 12% 198.7n ± 10% ~ (p=1.000 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64Counter/Attributes/10 191.4n ± 43% 183.8n ± 3% -4.02% (p=0.004 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64Counter/Attributes/0 182.7n ± 5% 179.8n ± 4% ~ (p=0.132 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64Counter/Attributes/1 199.4n ± 3% 185.1n ± 2% -7.17% (p=0.002 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64Counter/Attributes/10 198.5n ± 6% 193.0n ± 5% ~ (p=0.589 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64UpDownCounter/Attributes/0 184.7n ± 19% 173.5n ± 5% ~ (p=0.058 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64UpDownCounter/Attributes/1 183.2n ± 7% 180.7n ± 2% -1.39% (p=0.037 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64UpDownCounter/Attributes/10 185.3n ± 21% 183.6n ± 3% ~ (p=0.180 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64UpDownCounter/Attributes/0 187.4n ± 7% 183.8n ± 6% ~ (p=0.310 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64UpDownCounter/Attributes/1 194.6n ± 4% 189.2n ± 2% -2.75% (p=0.004 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64UpDownCounter/Attributes/10 199.9n ± 5% 189.4n ± 3% -5.23% (p=0.026 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64Gauge/Attributes/0 179.2n ± 5% 187.7n ± 4% ~ (p=0.065 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64Gauge/Attributes/1 188.6n ± 2% 192.1n ± 4% ~ (p=0.221 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64Gauge/Attributes/10 186.2n ± 1% 189.9n ± 3% +2.04% (p=0.009 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64Gauge/Attributes/0 179.4n ± 4% 183.6n ± 8% ~ (p=0.093 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64Gauge/Attributes/1 188.0n ± 2% 190.6n ± 2% ~ (p=0.180 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64Gauge/Attributes/10 197.1n ± 6% 188.3n ± 6% ~ (p=0.180 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64Histogram/Attributes/0 222.6n ± 10% 227.8n ± 5% ~ (p=0.310 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64Histogram/Attributes/1 224.2n ± 7% 230.8n ± 6% ~ (p=0.937 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64Histogram/Attributes/10 240.6n ± 10% 233.6n ± 6% ~ (p=0.394 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64Histogram/Attributes/0 216.9n ± 4% 222.0n ± 5% ~ (p=0.937 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64Histogram/Attributes/1 223.3n ± 3% 221.4n ± 4% ~ (p=0.372 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64Histogram/Attributes/10 240.8n ± 5% 224.5n ± 19% ~ (p=0.093 n=6) SyncMeasure/NoView/ExemplarsEnabled/ExponentialInt64Histogram/Attributes/0 224.5n ± 2% 218.2n ± 2% -2.83% (p=0.030 n=6) SyncMeasure/NoView/ExemplarsEnabled/ExponentialInt64Histogram/Attributes/1 230.9n ± 2% 228.8n ± 1% -0.95% (p=0.026 n=6) SyncMeasure/NoView/ExemplarsEnabled/ExponentialInt64Histogram/Attributes/10 231.5n ± 4% 242.1n ± 5% ~ (p=0.093 n=6) SyncMeasure/NoView/ExemplarsEnabled/ExponentialFloat64Histogram/Attributes/0 237.1n ± 3% 221.8n ± 6% -6.47% (p=0.004 n=6) SyncMeasure/NoView/ExemplarsEnabled/ExponentialFloat64Histogram/Attributes/1 245.3n ± 0% 234.4n ± 4% -4.46% (p=0.002 n=6) SyncMeasure/NoView/ExemplarsEnabled/ExponentialFloat64Histogram/Attributes/10 249.3n ± 11% 240.9n ± 17% ~ (p=0.589 n=6) geomean 159.1n 156.0n -1.97% ``` --------- Co-authored-by: Robert Pająk <[email protected]>
1 parent 59ac46c commit 45539cf

File tree

4 files changed

+43
-31
lines changed

4 files changed

+43
-31
lines changed

sdk/metric/internal/aggregate/exponential_histogram.go

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -338,13 +338,18 @@ func (e *expoHistogram[N]) measure(
338338
e.valuesMu.Lock()
339339
defer e.valuesMu.Unlock()
340340

341-
attr := e.limit.Attributes(fltrAttr, e.values)
342-
v, ok := e.values[attr.Equivalent()]
341+
v, ok := e.values[fltrAttr.Equivalent()]
343342
if !ok {
344-
v = newExpoHistogramDataPoint[N](attr, e.maxSize, e.maxScale, e.noMinMax, e.noSum)
345-
v.res = e.newRes(attr)
346-
347-
e.values[attr.Equivalent()] = v
343+
fltrAttr = e.limit.Attributes(fltrAttr, e.values)
344+
// If we overflowed, make sure we add to the existing overflow series
345+
// if it already exists.
346+
v, ok = e.values[fltrAttr.Equivalent()]
347+
if !ok {
348+
v = newExpoHistogramDataPoint[N](fltrAttr, e.maxSize, e.maxScale, e.noMinMax, e.noSum)
349+
v.res = e.newRes(fltrAttr)
350+
351+
e.values[fltrAttr.Equivalent()] = v
352+
}
348353
}
349354
v.record(value)
350355
v.res.Offer(ctx, value, droppedAttr)

sdk/metric/internal/aggregate/histogram.go

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -97,22 +97,27 @@ func (s *histValues[N]) measure(
9797
s.valuesMu.Lock()
9898
defer s.valuesMu.Unlock()
9999

100-
attr := s.limit.Attributes(fltrAttr, s.values)
101-
b, ok := s.values[attr.Equivalent()]
100+
b, ok := s.values[fltrAttr.Equivalent()]
102101
if !ok {
103-
// N+1 buckets. For example:
104-
//
105-
// bounds = [0, 5, 10]
106-
//
107-
// Then,
108-
//
109-
// buckets = (-∞, 0], (0, 5.0], (5.0, 10.0], (10.0, +∞)
110-
b = newBuckets[N](attr, len(s.bounds)+1)
111-
b.res = s.newRes(attr)
112-
113-
// Ensure min and max are recorded values (not zero), for new buckets.
114-
b.min, b.max = value, value
115-
s.values[attr.Equivalent()] = b
102+
fltrAttr = s.limit.Attributes(fltrAttr, s.values)
103+
// If we overflowed, make sure we add to the existing overflow series
104+
// if it already exists.
105+
b, ok = s.values[fltrAttr.Equivalent()]
106+
if !ok {
107+
// N+1 buckets. For example:
108+
//
109+
// bounds = [0, 5, 10]
110+
//
111+
// Then,
112+
//
113+
// buckets = (-∞, 0], (0, 5.0], (5.0, 10.0], (10.0, +∞)
114+
b = newBuckets[N](fltrAttr, len(s.bounds)+1)
115+
b.res = s.newRes(fltrAttr)
116+
117+
// Ensure min and max are recorded values (not zero), for new buckets.
118+
b.min, b.max = value, value
119+
s.values[fltrAttr.Equivalent()] = b
120+
}
116121
}
117122
b.bin(idx)
118123
if !s.noMinMax {

sdk/metric/internal/aggregate/lastvalue.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,17 +42,18 @@ func (s *lastValue[N]) measure(ctx context.Context, value N, fltrAttr attribute.
4242
s.Lock()
4343
defer s.Unlock()
4444

45-
attr := s.limit.Attributes(fltrAttr, s.values)
46-
d, ok := s.values[attr.Equivalent()]
45+
d, ok := s.values[fltrAttr.Equivalent()]
4746
if !ok {
48-
d.res = s.newRes(attr)
47+
fltrAttr = s.limit.Attributes(fltrAttr, s.values)
48+
d = s.values[fltrAttr.Equivalent()]
49+
d.res = s.newRes(fltrAttr)
50+
d.attrs = fltrAttr
4951
}
5052

51-
d.attrs = attr
5253
d.value = value
5354
d.res.Offer(ctx, value, droppedAttr)
5455

55-
s.values[attr.Equivalent()] = d
56+
s.values[fltrAttr.Equivalent()] = d
5657
}
5758

5859
func (s *lastValue[N]) delta(

sdk/metric/internal/aggregate/sum.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,18 @@ func (s *valueMap[N]) measure(ctx context.Context, value N, fltrAttr attribute.S
3838
s.Lock()
3939
defer s.Unlock()
4040

41-
attr := s.limit.Attributes(fltrAttr, s.values)
42-
v, ok := s.values[attr.Equivalent()]
41+
v, ok := s.values[fltrAttr.Equivalent()]
4342
if !ok {
44-
v.res = s.newRes(attr)
43+
fltrAttr = s.limit.Attributes(fltrAttr, s.values)
44+
v = s.values[fltrAttr.Equivalent()]
45+
v.res = s.newRes(fltrAttr)
46+
v.attrs = fltrAttr
4547
}
4648

47-
v.attrs = attr
4849
v.n += value
4950
v.res.Offer(ctx, value, droppedAttr)
5051

51-
s.values[attr.Equivalent()] = v
52+
s.values[fltrAttr.Equivalent()] = v
5253
}
5354

5455
// newSum returns an aggregator that summarizes a set of measurements as their

0 commit comments

Comments
 (0)