From 394c41773c6137b53f76bcc63f802c8cd0804128 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Sun, 21 Jan 2024 23:41:11 +0200 Subject: [PATCH] app/vmselect: handle negative time range start in a generic manner inside NewSearchQuery() This is a follow-up for cf03e11d89f86e981432fa654f6d8f7b45b8bb43 Updates https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5553 Updates https://github.com/VictoriaMetrics/VictoriaMetrics/pull/5630 --- app/vmselect/prometheus/prometheus.go | 3 --- app/vmselect/promql/eval.go | 3 --- docs/CHANGELOG.md | 2 +- lib/storage/search.go | 4 ++++ 4 files changed, 5 insertions(+), 7 deletions(-) diff --git a/app/vmselect/prometheus/prometheus.go b/app/vmselect/prometheus/prometheus.go index d9c30caea1..c4f77473b1 100644 --- a/app/vmselect/prometheus/prometheus.go +++ b/app/vmselect/prometheus/prometheus.go @@ -790,9 +790,6 @@ func QueryHandler(qt *querytracer.Tracer, startTime time.Time, at *auth.Token, w start -= offset end := start start = end - window - if start < 0 { - start = 0 - } // Do not include data point with a timestamp matching the lower boundary of the window as Prometheus does. start++ if end < start { diff --git a/app/vmselect/promql/eval.go b/app/vmselect/promql/eval.go index 589f14c59e..b5175fa06b 100644 --- a/app/vmselect/promql/eval.go +++ b/app/vmselect/promql/eval.go @@ -1067,9 +1067,6 @@ func evalRollupFuncWithMetricExpr(qt *querytracer.Tracer, ec *EvalConfig, funcNa } else { minTimestamp -= ec.Step } - if minTimestamp < 0 { - minTimestamp = 0 - } sq := storage.NewSearchQuery(ec.AuthToken.AccountID, ec.AuthToken.ProjectID, minTimestamp, ec.End, tfss, ec.MaxSeries) rss, isPartial, err := netstorage.ProcessSearchQuery(qt, ec.DenyPartialResponse, sq, ec.Deadline) if err != nil { diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 27239e2b2f..ecc2c7789c 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -15,8 +15,8 @@ The following tip changes can be tested by building VictoriaMetrics components f ## v1.87.x long-time support release (LTS) -* BUGFIX: [vmselect](https://docs.victoriametrics.com/vmselect.html): properly determine time range search for instant queries with too big look-behind window like `foo[100y]`. Previously, such queries could return empty responses even if `foo` is present in database. * BUGFIX: properly return errors from [export APIs](https://docs.victoriametrics.com/#how-to-export-time-series). Previously these errors were silently suppressed. See [this pull request](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/5649). +* BUGFIX: [MetricsQL](https://docs.victoriametrics.com/MetricsQL.html): properly process queries with too big lookbehind window such as `foo[100y]`. Previously, such queries could return empty responses even if `foo` is present in database. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5553). * BUGFIX: [MetricsQL](https://docs.victoriametrics.com/MetricsQL.html): properly handle possible negative results caused by float operations precision error in rollup functions like rate() or increase(). See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5571). ## [v1.87.13](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.87.13) diff --git a/lib/storage/search.go b/lib/storage/search.go index b5d780ad59..adb289dbca 100644 --- a/lib/storage/search.go +++ b/lib/storage/search.go @@ -300,6 +300,10 @@ func (sq *SearchQuery) GetTimeRange() TimeRange { // NewSearchQuery creates new search query for the given args. func NewSearchQuery(accountID, projectID uint32, start, end int64, tagFilterss [][]TagFilter, maxMetrics int) *SearchQuery { + if start < 0 { + // This is needed for https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5553 + start = 0 + } if maxMetrics <= 0 { maxMetrics = 2e9 }