From 9f67f62f968cb03ccbca273436f92df1c1e17ba3 Mon Sep 17 00:00:00 2001 From: Anton Tykhyy Date: Thu, 14 Dec 2023 12:38:54 +0200 Subject: [PATCH] Fix sum(aggr_over_time) 'got 1 args' error (#3028) (#5414) app/vmselect/promql/eval.go:evalAggrFunc shunts evaluation of AggrFuncExpr over rollupFunc over MetricsExpr to an optimized path. tryGetArgRollupFuncWithMetricExpr() checks whether expression can be shunted, but it mangles the AggrFuncExpr when the aggregation function has more than one argument. This results in queries like `sum(aggr_over_time("avg_over_time",m))` failing with error message 'expecting at least 2 args to "aggr_over_time"; got 1 args' while the analogous query `sum(avg_over_time(m))` executes successfully. This fix removes the unnecessary mangling. Signed-off-by: Anton Tykhyy --- app/vmselect/promql/eval.go | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/app/vmselect/promql/eval.go b/app/vmselect/promql/eval.go index 26c4c284a..7df1e4cc1 100644 --- a/app/vmselect/promql/eval.go +++ b/app/vmselect/promql/eval.go @@ -636,10 +636,7 @@ func tryGetArgRollupFuncWithMetricExpr(ae *metricsql.AggrFuncExpr) (*metricsql.F return nil, nil } // e = rollupFunc(metricExpr) - return &metricsql.FuncExpr{ - Name: fe.Name, - Args: []metricsql.Expr{me}, - }, nrf + return fe, nrf } if re, ok := arg.(*metricsql.RollupExpr); ok { if me, ok := re.Expr.(*metricsql.MetricExpr); !ok || me.IsEmpty() || re.ForSubquery() {