diff --git a/promql/functions.go b/promql/functions.go index 2d9d26dfb1..35420a8098 100644 --- a/promql/functions.go +++ b/promql/functions.go @@ -1092,6 +1092,15 @@ func funcSumOverTime(_ []Vector, matrixVal Matrix, args parser.Expressions, enh vec, err := aggrHistOverTime(matrixVal, enh, func(s Series) (*histogram.FloatHistogram, error) { var counterResetSeen, notCounterResetSeen bool + trackCounterReset := func(h *histogram.FloatHistogram) { + switch h.CounterResetHint { + case histogram.CounterReset: + counterResetSeen = true + case histogram.NotCounterReset: + notCounterResetSeen = true + } + } + defer func() { if counterResetSeen && notCounterResetSeen { annos.Add(annotations.NewHistogramCounterResetCollisionWarning(args[0].PositionRange(), annotations.HistogramAgg)) @@ -1099,13 +1108,9 @@ func funcSumOverTime(_ []Vector, matrixVal Matrix, args parser.Expressions, enh }() sum := s.Histograms[0].H.Copy() + trackCounterReset(sum) for _, h := range s.Histograms[1:] { - switch h.H.CounterResetHint { - case histogram.CounterReset: - counterResetSeen = true - case histogram.NotCounterReset: - notCounterResetSeen = true - } + trackCounterReset(h.H) _, _, err := sum.Add(h.H) if err != nil { return sum, err diff --git a/promql/promqltest/testdata/native_histograms.test b/promql/promqltest/testdata/native_histograms.test index 9ec222c17c..986b8de04f 100644 --- a/promql/promqltest/testdata/native_histograms.test +++ b/promql/promqltest/testdata/native_histograms.test @@ -1709,6 +1709,18 @@ eval instant at 14m histogram_count(avg_over_time(mixed[10m])) expect no_info {} 9.3 +# In the following two tests, the first sample has hint "not_reset" +# and the second has "reset". This tests if the conflict is detected +# between the first two samples, too. +eval instant at 11m histogram_count(sum_over_time(mixed[2m])) + expect warn msg:PromQL warning: conflicting counter resets during histogram aggregation + expect no_info + {} 21 + +eval instant at 11m histogram_count(avg_over_time(mixed[2m])) + expect warn msg:PromQL warning: conflicting counter resets during histogram aggregation + expect no_info + {} 10.5 # Test histogram_quantile annotations. load 1m