mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-11-21 14:44:00 +00:00
vmalert: fix nil map assignment (#4392)
* vmalert: fix nil map assignment The storage instance with nil map params was created for remote-read purposes. And before change7a9ae9de0d
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 <roman@victoriametrics.com> * vmalert: add to changelog Signed-off-by: hagen1778 <roman@victoriametrics.com> * vmalert: properly clone Storage params Signed-off-by: hagen1778 <roman@victoriametrics.com> * vmalert: properly clone Storage params Signed-off-by: hagen1778 <roman@victoriametrics.com> * vmalert: properly clone Storage params Signed-off-by: hagen1778 <roman@victoriametrics.com> --------- Signed-off-by: hagen1778 <roman@victoriametrics.com> (cherry picked from commitde94812088
) Signed-off-by: hagen1778 <roman@victoriametrics.com>
This commit is contained in:
parent
e082c3dd27
commit
a8835b443f
1 changed files with 22 additions and 6 deletions
|
@ -54,7 +54,7 @@ type keyValue 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,
|
||||
|
@ -64,20 +64,35 @@ func (s *VMStorage) Clone() *VMStorage {
|
|||
|
||||
dataSourceType: s.dataSourceType,
|
||||
evaluationInterval: s.evaluationInterval,
|
||||
extraParams: s.extraParams,
|
||||
extraHeaders: s.extraHeaders,
|
||||
|
||||
// init map so it can be populated below
|
||||
extraParams: url.Values{},
|
||||
|
||||
debug: s.debug,
|
||||
}
|
||||
if len(s.extraHeaders) > 0 {
|
||||
ns.extraHeaders = make([]keyValue, len(s.extraHeaders))
|
||||
copy(ns.extraHeaders, s.extraHeaders)
|
||||
}
|
||||
for k, v := range s.extraParams {
|
||||
ns.extraParams[k] = v
|
||||
}
|
||||
|
||||
return ns
|
||||
}
|
||||
|
||||
// ApplyParams - changes given querier params.
|
||||
func (s *VMStorage) ApplyParams(params QuerierParams) *VMStorage {
|
||||
s.dataSourceType = toDatasourceType(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)
|
||||
}
|
||||
}
|
||||
}
|
||||
if params.Headers != nil {
|
||||
|
@ -105,6 +120,7 @@ func NewVMStorage(baseURL string, authCfg *promauth.Config, lookBack time.Durati
|
|||
lookBack: lookBack,
|
||||
queryStep: queryStep,
|
||||
dataSourceType: datasourcePrometheus,
|
||||
extraParams: url.Values{},
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue