fix(promql): do not loose information about buckets when doing the detect

Signed-off-by: György Krajcsovits <gyorgy.krajcsovits@grafana.com>
This commit is contained in:
György Krajcsovits 2025-06-04 10:24:50 +02:00
parent df94ecebab
commit bccb1d6459
No known key found for this signature in database
GPG Key ID: 47A8F9CE80FD7C7F
2 changed files with 18 additions and 17 deletions

View File

@ -126,17 +126,15 @@ func (f *histogramStatsIterator) getFloatResetHint(hint histogram.CounterResetHi
if hint != histogram.UnknownCounterReset {
return hint
}
if f.lastFH == nil {
// If there was no previous histogram, this will not be used,
// and if there was a previous integer histogram, this will
// force a reset detection. The later can happen if we used the
// iterator to read integer histograms before, but switched to
// float histograms for whatever reason.
// https://github.com/prometheus/prometheus/issues/16681
prevFH := f.lastFH
if prevFH == nil {
if f.lastH == nil {
// We don't know if there's a counter reset.
return histogram.UnknownCounterReset
}
if f.currentFH.DetectReset(f.lastFH) {
prevFH = f.lastH.ToFloat(nil)
}
if f.currentFH.DetectReset(prevFH) {
return histogram.CounterReset
}
return histogram.NotCounterReset
@ -146,14 +144,17 @@ func (f *histogramStatsIterator) getResetHint(h *histogram.Histogram) histogram.
if h.CounterResetHint != histogram.UnknownCounterReset {
return h.CounterResetHint
}
var prevFH *histogram.FloatHistogram
if f.lastH == nil {
// If there was no previous histogram, this will not be used,
// and if there was a previous float histogram, this will
// force a reset detection.
if f.lastFH == nil {
// We don't know if there's a counter reset.
return histogram.UnknownCounterReset
}
fh, prevFH := h.ToFloat(nil), f.lastH.ToFloat(nil)
prevFH = f.lastFH
} else {
prevFH = f.lastH.ToFloat(nil)
}
fh := h.ToFloat(nil)
if fh.DetectReset(prevFH) {
return histogram.CounterReset
}

View File

@ -156,7 +156,7 @@ func TestHistogramStatsMixedUse(t *testing.T) {
expectedHints := []histogram.CounterResetHint{
histogram.UnknownCounterReset,
histogram.NotCounterReset,
histogram.UnknownCounterReset,
histogram.CounterReset,
}
actualHints := make([]histogram.CounterResetHint, 3)
typ := statsIterator.Next()