From cf03e11d89f86e981432fa654f6d8f7b45b8bb43 Mon Sep 17 00:00:00 2001 From: Roman Khavronenko Date: Wed, 17 Jan 2024 13:48:06 +0100 Subject: [PATCH] app/vmselect: properly calculate `start` param for queries with too big look-behind window (#5630) 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. https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5553 Signed-off-by: hagen1778 --- .../testdata/prometheus/instant-matrix.json | 1 - .../prometheus/issue-5553-too-big-lookback.json | 13 +++++++++++++ app/vmselect/prometheus/prometheus.go | 3 +++ docs/CHANGELOG.md | 2 ++ 4 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 app/victoria-metrics/testdata/prometheus/issue-5553-too-big-lookback.json diff --git a/app/victoria-metrics/testdata/prometheus/instant-matrix.json b/app/victoria-metrics/testdata/prometheus/instant-matrix.json index 520d11458..f4a6e0f10 100644 --- a/app/victoria-metrics/testdata/prometheus/instant-matrix.json +++ b/app/victoria-metrics/testdata/prometheus/instant-matrix.json @@ -1,6 +1,5 @@ { "name": "instant query with look-behind window", - "issue": "https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5553", "data": ["[{\"labels\":[{\"name\":\"__name__\",\"value\":\"foo\"}],\"samples\":[{\"value\":1,\"timestamp\":\"{TIME_MS-60s}\"}]}]"], "query": ["/api/v1/query?query=foo[5m]"], "result_query": { diff --git a/app/victoria-metrics/testdata/prometheus/issue-5553-too-big-lookback.json b/app/victoria-metrics/testdata/prometheus/issue-5553-too-big-lookback.json new file mode 100644 index 000000000..5617e5184 --- /dev/null +++ b/app/victoria-metrics/testdata/prometheus/issue-5553-too-big-lookback.json @@ -0,0 +1,13 @@ +{ + "name": "too big look-behind window", + "issue": "https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5553", + "data": ["[{\"labels\":[{\"name\":\"__name__\",\"value\":\"foo\"},{\"name\":\"issue\",\"value\":\"5553\"}],\"samples\":[{\"value\":1,\"timestamp\":\"{TIME_MS-60s}\"}]}]"], + "query": ["/api/v1/query?query=foo{issue=\"5553\"}[100y]"], + "result_query": { + "status": "success", + "data":{ + "resultType":"matrix", + "result":[{"metric":{"__name__":"foo", "issue": "5553"},"values":[["{TIME_S-60s}", "1"]]}] + } + } +} diff --git a/app/vmselect/prometheus/prometheus.go b/app/vmselect/prometheus/prometheus.go index 67f4c94fd..d6e9854de 100644 --- a/app/vmselect/prometheus/prometheus.go +++ b/app/vmselect/prometheus/prometheus.go @@ -718,6 +718,9 @@ func QueryHandler(qt *querytracer.Tracer, startTime time.Time, w http.ResponseWr 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/docs/CHANGELOG.md b/docs/CHANGELOG.md index befc4ec40..a52771f54 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -63,6 +63,8 @@ The sandbox cluster installation is running under the constant load generated by * BUGFIX: [vmagent](https://docs.victoriametrics.com/vmagent.html): exit if there is config syntax error in [`scrape_config_files`](https://docs.victoriametrics.com/vmagent.html#loading-scrape-configs-from-multiple-files) when `-promscrape.config.strictParse=true`. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5508). * BUGFIX: [vmui](https://docs.victoriametrics.com/#vmui): fix a link for the statistic inaccuracy explanation in the cardinality explorer tool. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5460). * BUGFIX: all: fix potential panic during components shutdown when [metrics push](https://docs.victoriametrics.com/#push-metrics) is configured. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5548). Thanks to @zhdd99 for the [pull request](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/5549). +* 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. + ## [v1.96.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.96.0)