diff --git a/promql/engine.go b/promql/engine.go index 8c37f12e42..1211c73838 100644 --- a/promql/engine.go +++ b/promql/engine.go @@ -1582,6 +1582,11 @@ func (ev *evaluator) eval(ctx context.Context, expr parser.Expr) (parser.Value, if err := contextDone(ctx, "expression evaluation"); err != nil { ev.error(err) } + + if ev.endTimestamp < ev.startTimestamp { + return Matrix{}, nil + } + numSteps := int((ev.endTimestamp-ev.startTimestamp)/ev.interval) + 1 // Create a new span to help investigate inner evaluation performances. diff --git a/promql/promqltest/testdata/subquery.test b/promql/promqltest/testdata/subquery.test index 377ee1e5ce..8c7c178b85 100644 --- a/promql/promqltest/testdata/subquery.test +++ b/promql/promqltest/testdata/subquery.test @@ -150,3 +150,10 @@ eval instant at 10m increase(native_histogram[10m:3m]) # by the sub-query multiple times. eval instant at 10m increase(native_histogram[10m:15s]) {} {{count:30.769230769230766 sum:30.769230769230766}} + +# When range < resolution and the first evaluation time is out of range. +load 5m + foo 3+0x10 + +eval instant at 12m min_over_time((topk(1, foo))[1m:5m]) + #empty