diff --git a/app/vmselect/promql/exec_test.go b/app/vmselect/promql/exec_test.go index e089f1e21b..cea3fc724f 100644 --- a/app/vmselect/promql/exec_test.go +++ b/app/vmselect/promql/exec_test.go @@ -646,6 +646,7 @@ func TestExecSuccess(t *testing.T) { Values: []float64{1000, 1200, 1400, 1400, 1400, 1400}, Timestamps: timestampsExpected, } + r.MetricName.MetricGroup = []byte("foobar") resultExpected := []netstorage.Result{r} f(q, resultExpected) }) @@ -657,6 +658,7 @@ func TestExecSuccess(t *testing.T) { Values: []float64{1000, 1200, 1400, 1400, 1400, 1400}, Timestamps: timestampsExpected, } + r.MetricName.MetricGroup = []byte("foobar") resultExpected := []netstorage.Result{r} f(q, resultExpected) }) diff --git a/app/vmselect/promql/transform.go b/app/vmselect/promql/transform.go index b43638b13a..cc1e00027b 100644 --- a/app/vmselect/promql/transform.go +++ b/app/vmselect/promql/transform.go @@ -17,6 +17,11 @@ import ( "github.com/valyala/histogram" ) +var transformFuncsKeepMetricGroup = map[string]bool{ + "clamp_max": true, + "clamp_min": true, +} + var transformFuncs = map[string]transformFunc{ // Standard promql funcs // See funcs accepting instant-vector on https://prometheus.io/docs/prometheus/latest/querying/functions/ . @@ -125,8 +130,12 @@ func newTransformFuncOneArg(tf func(v float64) float64) transformFunc { } func doTransformValues(arg []*timeseries, tf func(values []float64), fe *metricsql.FuncExpr) ([]*timeseries, error) { + name := strings.ToLower(fe.Name) + keepMetricGroup := transformFuncsKeepMetricGroup[name] for _, ts := range arg { - ts.MetricName.ResetMetricGroup() + if !keepMetricGroup { + ts.MetricName.ResetMetricGroup() + } tf(ts.Values) } return arg, nil