Skip to content

Commit 9329437

Browse files
committed
try rwlock for histograms as well
1 parent f4f3a87 commit 9329437

File tree

2 files changed

+10
-7
lines changed

2 files changed

+10
-7
lines changed

sdk/metric/internal/aggregate/exponential_histogram.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,7 @@ type expoHistogram[N int64 | float64] struct {
319319
newRes func(attribute.Set) FilteredExemplarReservoir[N]
320320
limit limiter[expoHistogramDataPoint[N]]
321321
values map[attribute.Distinct]*expoHistogramDataPoint[N]
322-
valuesMu sync.Mutex
322+
valuesMu sync.RWMutex
323323

324324
start time.Time
325325
}
@@ -335,9 +335,7 @@ func (e *expoHistogram[N]) measure(
335335
return
336336
}
337337

338-
e.valuesMu.Lock()
339-
defer e.valuesMu.Unlock()
340-
338+
e.valuesMu.RLock()
341339
attr := e.limit.Attributes(fltrAttr, e.values)
342340
v, ok := e.values[attr.Equivalent()]
343341
if !ok {
@@ -346,7 +344,10 @@ func (e *expoHistogram[N]) measure(
346344

347345
e.values[attr.Equivalent()] = v
348346
}
347+
e.valuesMu.RUnlock()
348+
e.valuesMu.Lock()
349349
v.record(value)
350+
e.valuesMu.Unlock()
350351
v.res.Offer(ctx, value, droppedAttr)
351352
}
352353

sdk/metric/internal/aggregate/histogram.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ type histValues[N int64 | float64] struct {
5050
newRes func(attribute.Set) FilteredExemplarReservoir[N]
5151
limit limiter[buckets[N]]
5252
values map[attribute.Distinct]*buckets[N]
53-
valuesMu sync.Mutex
53+
valuesMu sync.RWMutex
5454
}
5555

5656
func newHistValues[N int64 | float64](
@@ -89,8 +89,7 @@ func (s *histValues[N]) measure(
8989
// (s.bounds[len(s.bounds)-1], +∞).
9090
idx := sort.SearchFloat64s(s.bounds, float64(value))
9191

92-
s.valuesMu.Lock()
93-
defer s.valuesMu.Unlock()
92+
s.valuesMu.RLock()
9493

9594
attr := s.limit.Attributes(fltrAttr, s.values)
9695
b, ok := s.values[attr.Equivalent()]
@@ -109,10 +108,13 @@ func (s *histValues[N]) measure(
109108
b.min, b.max = value, value
110109
s.values[attr.Equivalent()] = b
111110
}
111+
s.valuesMu.RUnlock()
112+
s.valuesMu.Lock()
112113
b.bin(idx, value)
113114
if !s.noSum {
114115
b.sum(value)
115116
}
117+
s.valuesMu.Unlock()
116118
b.res.Offer(ctx, value, droppedAttr)
117119
}
118120

0 commit comments

Comments
 (0)