mirror of
https://github.com/prometheus/prometheus
synced 2026-04-20 22:41:05 +08:00
promql: fix smoothed rate returning zero for data only after range
For smoothed rate/increase, a result should only be returned when there is data available to interpolate across the range. If the range has a single data point only on one side, the result is meaningless and should be empty. The "data only before" case was already handled: if the last fetched sample is at or before rangeStart, extendedRate returns nothing. Add the symmetric guard for the "data only after" case: if the first fetched sample is strictly after rangeEnd, return nothing as well. This mirrors the behaviour described in prometheus/prometheus#18295, where a smoothed rate that has no data before the range should not return zero. Signed-off-by: Julien Pivotto <291750+roidelapluie@users.noreply.github.com>
This commit is contained in:
@@ -142,6 +142,9 @@ func extendedRate(vals Matrix, args parser.Expressions, enh *EvalNodeHelper, isC
|
||||
if f[lastSampleIndex].T <= rangeStart {
|
||||
return enh.Out, annos
|
||||
}
|
||||
if smoothed && f[firstSampleIndex].T > rangeEnd {
|
||||
return enh.Out, annos
|
||||
}
|
||||
|
||||
left := pickOrInterpolateLeft(f, firstSampleIndex, rangeStart, smoothed, isCounter)
|
||||
right := pickOrInterpolateRight(f, lastSampleIndex, rangeEnd, smoothed, isCounter)
|
||||
|
||||
18
promql/promqltest/testdata/extended_vectors.test
vendored
18
promql/promqltest/testdata/extended_vectors.test
vendored
@@ -417,4 +417,20 @@ eval instant at 45s withreset smoothed
|
||||
withreset 3
|
||||
|
||||
eval instant at 30s notregular smoothed
|
||||
notregular 2
|
||||
notregular 2
|
||||
|
||||
# Smoothed rate returns empty when data is only before or only after the range.
|
||||
clear
|
||||
load 10s
|
||||
metric _ 5+1x4
|
||||
|
||||
eval instant at 5s rate(metric[5s] smoothed)
|
||||
|
||||
eval instant at 5s increase(metric[5s] smoothed)
|
||||
|
||||
eval instant at 15s increase(metric[10s] smoothed)
|
||||
{} 0.5
|
||||
|
||||
eval instant at 60s rate(metric[5s] smoothed)
|
||||
|
||||
eval instant at 60s increase(metric[5s] smoothed)
|
||||
|
||||
Reference in New Issue
Block a user