mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Prometheus: Fix concurrency issue with exemplar sampler initialization (#61281)
This commit is contained in:
parent
f2ffce4351
commit
19ca93d5ce
@ -43,7 +43,7 @@ type QueryData struct {
|
||||
URL string
|
||||
TimeInterval string
|
||||
enableWideSeries bool
|
||||
exemplarSampler exemplar.Sampler
|
||||
exemplarSampler func() exemplar.Sampler
|
||||
}
|
||||
|
||||
func New(
|
||||
@ -67,10 +67,10 @@ func New(
|
||||
promClient := client.NewClient(httpClient, httpMethod, settings.URL)
|
||||
|
||||
// standard deviation sampler is the default for backwards compatibility
|
||||
exemplarSampler := exemplar.NewStandardDeviationSampler()
|
||||
exemplarSampler := exemplar.NewStandardDeviationSampler
|
||||
|
||||
if features.IsEnabled(featuremgmt.FlagDisablePrometheusExemplarSampling) {
|
||||
exemplarSampler = exemplar.NewNoOpSampler()
|
||||
exemplarSampler = exemplar.NewNoOpSampler
|
||||
}
|
||||
|
||||
return &QueryData{
|
||||
|
@ -47,14 +47,14 @@ func (s *QueryData) parseResponse(ctx context.Context, q *models.Query, res *htt
|
||||
}
|
||||
|
||||
func (s *QueryData) processExemplars(q *models.Query, dr *backend.DataResponse) *backend.DataResponse {
|
||||
s.exemplarSampler.Reset()
|
||||
sampler := s.exemplarSampler()
|
||||
labelTracker := exemplar.NewLabelTracker()
|
||||
|
||||
// we are moving from a multi-frame response returned
|
||||
// by the converter to a single exemplar frame,
|
||||
// so we need to build a new frame array with the
|
||||
// old exemplar frames filtered out
|
||||
framer := exemplar.NewFramer(s.exemplarSampler, labelTracker)
|
||||
framer := exemplar.NewFramer(sampler, labelTracker)
|
||||
|
||||
for _, frame := range dr.Frames {
|
||||
// we don't need to process non-exemplar frames
|
||||
@ -69,7 +69,7 @@ func (s *QueryData) processExemplars(q *models.Query, dr *backend.DataResponse)
|
||||
framer.SetRefID(frame.RefID)
|
||||
|
||||
step := time.Duration(frame.Fields[0].Config.Interval) * time.Millisecond
|
||||
s.exemplarSampler.SetStep(step)
|
||||
sampler.SetStep(step)
|
||||
|
||||
seriesLabels := getSeriesLabels(frame)
|
||||
labelTracker.Add(seriesLabels)
|
||||
@ -83,7 +83,7 @@ func (s *QueryData) processExemplars(q *models.Query, dr *backend.DataResponse)
|
||||
Timestamp: row[0].(time.Time),
|
||||
SeriesLabels: seriesLabels,
|
||||
}
|
||||
s.exemplarSampler.Add(ex)
|
||||
sampler.Add(ex)
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user