diff --git a/promql/functions.go b/promql/functions.go index 546f94df12..2ab7c275e2 100644 --- a/promql/functions.go +++ b/promql/functions.go @@ -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) diff --git a/promql/promqltest/testdata/extended_vectors.test b/promql/promqltest/testdata/extended_vectors.test index 0bc1140522..06f70913b7 100644 --- a/promql/promqltest/testdata/extended_vectors.test +++ b/promql/promqltest/testdata/extended_vectors.test @@ -417,4 +417,20 @@ eval instant at 45s withreset smoothed withreset 3 eval instant at 30s notregular smoothed - notregular 2 \ No newline at end of file + 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)