From 727255085bbd3d57785fd002b87d1c6c44e44303 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin <valyala@victoriametrics.com> Date: Fri, 2 Sep 2022 23:18:01 +0300 Subject: [PATCH] app/vmselect/promql: consistently calculate `rate_over_sum(m[d])` as `sum_over_time(m[d])/d` Updates https://github.com/VictoriaMetrics/VictoriaMetrics/issues/3045 --- app/vmselect/promql/rollup.go | 6 +----- app/vmselect/promql/rollup_test.go | 2 +- docs/CHANGELOG.md | 1 + 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/app/vmselect/promql/rollup.go b/app/vmselect/promql/rollup.go index 953d0f9730..8c40bbdbcd 100644 --- a/app/vmselect/promql/rollup.go +++ b/app/vmselect/promql/rollup.go @@ -1339,15 +1339,11 @@ func rollupRateOverSum(rfa *rollupFuncArg) float64 { // Assume that the value didn't change since rfa.prevValue. return 0 } - dt := rfa.window - if !math.IsNaN(rfa.prevValue) { - dt = timestamps[len(timestamps)-1] - rfa.prevTimestamp - } sum := float64(0) for _, v := range rfa.values { sum += v } - return sum / (float64(dt) / 1e3) + return sum / (float64(rfa.window) / 1e3) } func rollupRange(rfa *rollupFuncArg) float64 { diff --git a/app/vmselect/promql/rollup_test.go b/app/vmselect/promql/rollup_test.go index b43a4fce4d..477f139d86 100644 --- a/app/vmselect/promql/rollup_test.go +++ b/app/vmselect/promql/rollup_test.go @@ -1267,7 +1267,7 @@ func TestRollupFuncsNoWindow(t *testing.T) { if samplesScanned == 0 { t.Fatalf("expecting non-zero samplesScanned from rollupConfig.Do") } - valuesExpected := []float64{nan, 2775, 5262.5, 3678.5714285714284, 2880} + valuesExpected := []float64{nan, 2775, 5262.5, 3862.5, 1800} timestampsExpected := []int64{0, 40, 80, 120, 160} testRowsEqual(t, values, rc.Timestamps, valuesExpected, timestampsExpected) }) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index de851637d2..38169b3216 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -20,6 +20,7 @@ The following tip changes can be tested by building VictoriaMetrics components f * BUGFIX: do not export stale metrics via [/federate api](https://docs.victoriametrics.com/#federation) after the staleness markers. Previously such metrics were exported with `NaN` values. this could break some setups. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/3185). * BUGFIX: [vmauth](https://docs.victoriametrics.com/vmauth.html): properly handle request paths ending with `/` such as `/vmui/`. Previously `vmui` was dropping the traling `/`, which could prevent from using `vmui` via `vmauth`. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1752). * BUGFIX: [vmagent](https://docs.victoriametrics.com/vmagent.html): properly encode query params for aws signed requests, use `%20` instead of `+` as api requires. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/3171). +* BUGFIX: [MetricsQL](https://docs.victoriametrics.com/MetricsQL.html): properly calculate `rate_over_sum(m[d])` as `sum_over_time(m[d])/d`. Previously the `sum_over_time(m[d])` could be improperly divided by smaller than `d` time range. See [rate_over_sum() docs](https://docs.victoriametrics.com/MetricsQL.html#rate_over_sum) and [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/3045). ## [v1.79.3](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.79.3)