Merge pull request #1623 from krajorama/data-race-in-histogram-write
native histogram: Fix race between Write and addExemplar
This commit is contained in:
commit
05fcde9fe4
|
@ -1,5 +1,7 @@
|
||||||
## Unreleased
|
## Unreleased
|
||||||
|
|
||||||
|
* [BUGFIX] histograms: Fix possible data race when appending exemplars vs metrics gather. #1623
|
||||||
|
|
||||||
## 1.20.3 / 2024-09-05
|
## 1.20.3 / 2024-09-05
|
||||||
|
|
||||||
* [BUGFIX] histograms: Fix possible data race when appending exemplars. #1608
|
* [BUGFIX] histograms: Fix possible data race when appending exemplars. #1608
|
||||||
|
|
|
@ -844,9 +844,7 @@ func (h *histogram) Write(out *dto.Metric) error {
|
||||||
}}
|
}}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If exemplars are not configured, the cap will be 0.
|
if h.nativeExemplars.isEnabled() {
|
||||||
// So append is not needed in this case.
|
|
||||||
if cap(h.nativeExemplars.exemplars) > 0 {
|
|
||||||
h.nativeExemplars.Lock()
|
h.nativeExemplars.Lock()
|
||||||
his.Exemplars = append(his.Exemplars, h.nativeExemplars.exemplars...)
|
his.Exemplars = append(his.Exemplars, h.nativeExemplars.exemplars...)
|
||||||
h.nativeExemplars.Unlock()
|
h.nativeExemplars.Unlock()
|
||||||
|
@ -1665,6 +1663,10 @@ type nativeExemplars struct {
|
||||||
exemplars []*dto.Exemplar
|
exemplars []*dto.Exemplar
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (n *nativeExemplars) isEnabled() bool {
|
||||||
|
return n.ttl != -1
|
||||||
|
}
|
||||||
|
|
||||||
func makeNativeExemplars(ttl time.Duration, maxCount int) nativeExemplars {
|
func makeNativeExemplars(ttl time.Duration, maxCount int) nativeExemplars {
|
||||||
if ttl == 0 {
|
if ttl == 0 {
|
||||||
ttl = 5 * time.Minute
|
ttl = 5 * time.Minute
|
||||||
|
@ -1686,7 +1688,7 @@ func makeNativeExemplars(ttl time.Duration, maxCount int) nativeExemplars {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (n *nativeExemplars) addExemplar(e *dto.Exemplar) {
|
func (n *nativeExemplars) addExemplar(e *dto.Exemplar) {
|
||||||
if n.ttl == -1 {
|
if !n.isEnabled() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue