VictoriaMetrics/app/vmselect
Roman Khavronenko 273472dc20
app/vmselect: ignore empty series for limit_offset (#3178)
* app/vmselect: ignore empty series for `limit_offset`

VictoriaMetrics doesn't return empty series (with all NaN values) to
the user. But such series are filtered after transform functions.
It means `limit_offset` will account for empty series as well.

For example, let's consider following data set:
```
time series:
foo{label="1"} NaN, NaN, NaN, NaN // empty series
foo{label="2"} 1, 2, 3, 4
foo{label="3"} 4, 3, 2, 1
```

When user requests all series for metric `foo` the empty series
will be filtered out:
```
/query=foo:
foo{label="v2"} 1, 2, 3, 4
foo{label="v3"} 4, 3, 2, 1
```

But `limit_offset(1, 1, foo)` is applied to original series, not filtered yet.
So it will return `foo{label="v2"}` (skips the first in list)
```
/query=limit_offset(1, 1, foo):
foo{label="v2"} 1, 2, 3, 4
```

Expected result would be to apply `limit_offset` to already filtered list,
so in result we receive `foo{label="v3"}`:
```
/query=limit_offset(1, 1, foo):
foo{label="v3"} 4, 3, 2, 1
```

The change does exactly that - filters empty series before applying `limit_offset`.

Signed-off-by: hagen1778 <roman@victoriametrics.com>

* app/vmselect: ignore empty series for `limit_offset`

Signed-off-by: hagen1778 <roman@victoriametrics.com>

Signed-off-by: hagen1778 <roman@victoriametrics.com>
2022-09-30 08:44:05 +03:00
..
bufferedwriter app/vmselect/bufferedwriter: suppress trivial network errors, which can be generated by remote side 2022-03-18 19:27:33 +02:00
clusternative app/vmselect/netstorage: remove common contention points related to inter-CPU communcations 2022-08-11 23:22:56 +03:00
deployment Rootless docker images by default (#358) 2020-03-27 21:18:32 +02:00
graphite lib/vmselectapi: pass maxSuffixes arg to tagValueSuffixes RPC call 2022-07-06 12:46:22 +03:00
graphiteql Graphite vmalert wip (#112) 2021-02-01 15:28:30 +02:00
multiarch app: fix make publish-* after ed93330e66 2022-07-14 11:01:34 +03:00
netstorage app/vmselect/netstorage: fix a typo, which leads to incorrect query results in VictoriaMetrics cluster 2022-09-08 13:46:40 +03:00
prometheus vmselect/{promql, prometheus}: show flag names which user can update in error message (#3049) 2022-09-06 14:48:20 +03:00
promql app/vmselect: ignore empty series for limit_offset (#3178) 2022-09-30 08:44:05 +03:00
querystats app/vmselect: do not track queries with less than 1ms execution time at /api/v1/status/top_queries 2021-07-15 16:53:35 +03:00
searchutils all: make fmt via the upcoming Go1.19 2022-07-11 19:23:25 +03:00
vmui app/vmselect/vmui: make vmui-update after 1304824201 2022-09-14 13:32:43 +03:00
main.go app/{vmselect, vminsert}: fails with error when user defines equal addresses in the -storageNodes flag (#3082) 2022-09-08 21:17:58 +03:00
Makefile all: follow-up for d99ba3481b 2022-07-13 17:17:08 +03:00
README.md app/vmselect: expose vmui at /vmselect/<accountID>/vmui/ instead of /vmselect/<accountID>/prometheus/vmui/ 2021-07-10 12:32:21 +03:00

vmselect performs the following tasks:

  • Splits incoming selects to tasks for vmstorage nodes and issues these tasks to all the vmstorage nodes in the cluster.

  • Merges responses from all the vmstorage nodes and returns a single response.

The vmui directory contains static contents built from app/vmui package with make vmui-update command. The vmui page is available at http://<vmselect>:8481/select/<accountID>/vmui/.