From 2831e6f9ae7d8e40083747d800624885d24c33cc Mon Sep 17 00:00:00 2001 From: Roman Khavronenko Date: Fri, 2 Jun 2023 11:38:55 +0200 Subject: [PATCH] vmalert: fix nil map assignment (#4392) The storage instance with nil map params was created for remote-read purposes. And before change https://github.com/VictoriaMetrics/VictoriaMetrics/pull/4341/commits/7a9ae9de0d2221cf7759e49ebcde0a06508b0f68 this map was ignored in ApplyParams. Now, it started to be used and vmalert panics in runtime. The fix properly inits map for at `NewVMStorage` and verifies it is not nil on assignment in `ApplyParams`. Signed-off-by: hagen1778 --------- Signed-off-by: hagen1778 (cherry picked from commit de948120889529af03c1dbc644eb7305d46bae19) Signed-off-by: hagen1778 --- app/vmalert/datasource/vm.go | 23 ++++++++++++++++++----- docs/CHANGELOG.md | 1 + 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/app/vmalert/datasource/vm.go b/app/vmalert/datasource/vm.go index 81b09c0e4..9fd374f85 100644 --- a/app/vmalert/datasource/vm.go +++ b/app/vmalert/datasource/vm.go @@ -29,7 +29,7 @@ type VMStorage struct { // Clone makes clone of VMStorage, shares http client. func (s *VMStorage) Clone() *VMStorage { - return &VMStorage{ + ns := &VMStorage{ c: s.c, authCfg: s.authCfg, datasourceURL: s.datasourceURL, @@ -39,8 +39,15 @@ func (s *VMStorage) Clone() *VMStorage { dataSourceType: s.dataSourceType, evaluationInterval: s.evaluationInterval, - extraParams: s.extraParams, + + // init map so it can be populated below + extraParams: url.Values{}, } + for k, v := range s.extraParams { + ns.extraParams[k] = v + } + + return ns } // ApplyParams - changes given querier params. @@ -49,9 +56,14 @@ func (s *VMStorage) ApplyParams(params QuerierParams) *VMStorage { s.dataSourceType = *params.DataSourceType } s.evaluationInterval = params.EvaluationInterval - for k, vl := range params.QueryParams { - for _, v := range vl { // custom query params are prior to default ones - s.extraParams.Set(k, v) + if params.QueryParams != nil { + if s.extraParams == nil { + s.extraParams = url.Values{} + } + for k, vl := range params.QueryParams { + for _, v := range vl { // custom query params are prior to default ones + s.extraParams.Set(k, v) + } } } return s @@ -72,6 +84,7 @@ func NewVMStorage(baseURL string, authCfg *promauth.Config, lookBack time.Durati lookBack: lookBack, queryStep: queryStep, dataSourceType: NewPrometheusType(), + extraParams: url.Values{}, } } diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index be80d12e2..28a45a5ef 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -16,6 +16,7 @@ The following tip changes can be tested by building VictoriaMetrics components f ## v1.79.x long-time support release (LTS) * BUGFIX: [vmalert](https://docs.victoriametrics.com/vmalert.html): Properly form path to static assets in WEB UI if `http.pathPrefix` set. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/4349). +* BUGFIX: [vmalert](https://docs.victoriametrics.com/vmalert.html): Properly set datasource query params. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/4340). Thanks to @gsakun for [the pull request](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/4341). ## [v1.79.13](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.79.13)