app/vmselect/promql: properly return an empty result from limit_offset() if offset exceeds the number of inner time series

Updates https://github.com/VictoriaMetrics/VictoriaMetrics/issues/3312
This commit is contained in:
Aliaksandr Valialkin 2022-11-21 16:46:02 +02:00
parent 4df78e8814
commit aa31cc85f5
No known key found for this signature in database
GPG key ID: A72BEC6CD3D0DED1
3 changed files with 13 additions and 0 deletions

View file

@ -2290,6 +2290,16 @@ func TestExecSuccess(t *testing.T) {
resultExpected := []netstorage.Result{r} resultExpected := []netstorage.Result{r}
f(q, resultExpected) f(q, resultExpected)
}) })
t.Run(`limit_offset(too-big-offset)`, func(t *testing.T) {
t.Parallel()
q := `limit_offset(1, 10, sort_by_label((
label_set(time()*1, "foo", "y"),
label_set(time()*2, "foo", "a"),
label_set(time()*3, "foo", "x"),
), "foo"))`
resultExpected := []netstorage.Result{}
f(q, resultExpected)
})
t.Run(`limit_offset NaN`, func(t *testing.T) { t.Run(`limit_offset NaN`, func(t *testing.T) {
t.Parallel() t.Parallel()
// q returns 3 time series, where foo=3 contains only NaN values // q returns 3 time series, where foo=3 contains only NaN values

View file

@ -1878,6 +1878,8 @@ func transformLimitOffset(tfa *transformFuncArg) ([]*timeseries, error) {
rvs := removeEmptySeries(args[2]) rvs := removeEmptySeries(args[2])
if len(rvs) >= offset { if len(rvs) >= offset {
rvs = rvs[offset:] rvs = rvs[offset:]
} else {
rvs = nil
} }
if len(rvs) > limit { if len(rvs) > limit {
rvs = rvs[:limit] rvs = rvs[:limit]

View file

@ -15,6 +15,7 @@ The following tip changes can be tested by building VictoriaMetrics components f
## v1.79.x long-time support release (LTS) ## v1.79.x long-time support release (LTS)
* BUGFIX: [MetricsQL](https://docs.victoriametrics.com/MetricsQL.html): properly return an empty result from [limit_offset](https://docs.victoriametrics.com/MetricsQL.html#limit_offset) if the `offset` arg exceeds the number of inner time series. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/3312).
* BUGFIX: [vmagent](https://docs.victoriametrics.com/vmagent.html): properly discover GCE zones when `filter` option is set at [gce_sd_configs](https://docs.victoriametrics.com/sd_configs.html#gce_sd_configs). See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/3202). * BUGFIX: [vmagent](https://docs.victoriametrics.com/vmagent.html): properly discover GCE zones when `filter` option is set at [gce_sd_configs](https://docs.victoriametrics.com/sd_configs.html#gce_sd_configs). See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/3202).
## [v1.79.5](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.79.5) ## [v1.79.5](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.79.5)