Fix last_over_time for native histograms

The last_over_time retains a histogram sample without making a copy.
This sample is now coming from the buffered iterator used for windowing functions,
and can be reused for reading subsequent samples as the iterator progresses.

I would propose copying the sample in the last_over_time function, similar to
how it is done for rate, sum_over_time and others.

Signed-off-by: Filip Petkovski <filip.petkovsky@gmail.com>
This commit is contained in:
Filip Petkovski 2024-01-26 10:04:02 +01:00
parent c3b8ef1694
commit a577a0a542
No known key found for this signature in database
GPG key ID: 431B0F2E85E42402
2 changed files with 12 additions and 1 deletions

View file

@ -603,7 +603,7 @@ func funcLastOverTime(vals []parser.Value, args parser.Expressions, enh *EvalNod
}
return append(enh.Out, Sample{
Metric: el.Metric,
H: h.H,
H: h.H.Copy(),
}), nil
}

View file

@ -224,3 +224,14 @@ eval instant at 5m histogram_fraction(0, 4, balanced_histogram)
# the first populated bucket after the span of empty buckets.
eval instant at 5m histogram_quantile(0.5, balanced_histogram)
{} 0.5
# Add histogram to test sum(last_over_time) regression
load 5m
incr_sum_histogram{number="1"} {{schema:0 sum:0 count:0 buckets:[1]}}+{{schema:0 sum:1 count:1 buckets:[1]}}x10
incr_sum_histogram{number="2"} {{schema:0 sum:0 count:0 buckets:[1]}}+{{schema:0 sum:2 count:1 buckets:[1]}}x10
eval instant at 50m histogram_sum(sum(incr_sum_histogram))
{} 30
eval instant at 50m histogram_sum(sum(last_over_time(incr_sum_histogram[5m])))
{} 30