File tree Expand file tree Collapse file tree 2 files changed +10
-7
lines changed
sdk/metric/internal/aggregate Expand file tree Collapse file tree 2 files changed +10
-7
lines changed Original file line number Diff line number Diff 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
Original file line number Diff line number Diff 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
5656func 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
You can’t perform that action at this time.
0 commit comments