From 9fa098d8e3fbb4bab19d92210bcb325b0ee1bb04 Mon Sep 17 00:00:00 2001
From: Aliaksandr Valialkin <valyala@victoriametrics.com>
Date: Fri, 12 Nov 2021 13:50:43 +0200
Subject: [PATCH] app/vmselect/promql: prevent from incorrect calculations for
 `deriv()` over multiple samples with identical timestamps

---
 app/vmselect/promql/rollup.go | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/app/vmselect/promql/rollup.go b/app/vmselect/promql/rollup.go
index d04b3d9674..7cc29f7ed3 100644
--- a/app/vmselect/promql/rollup.go
+++ b/app/vmselect/promql/rollup.go
@@ -875,7 +875,12 @@ func linearRegression(rfa *rollupFuncArg) (float64, float64) {
 		tvSum += dt * v
 		ttSum += dt * dt
 	}
-	k := (tvSum - tSum*vSum/n) / (ttSum - tSum*tSum/n)
+	k := float64(0)
+	tDiff := ttSum - tSum*tSum/n
+	if math.Abs(tDiff) >= 1e-6 {
+		// Prevent from incorrect division for too small tDiff values.
+		k = (tvSum - tSum*vSum/n) / tDiff
+	}
 	v := vSum/n - k*tSum/n
 	return v, k
 }