From e228f479a517079c1754e2173a5b871f73e867d5 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Thu, 20 May 2021 02:47:22 +0300 Subject: [PATCH] lib/storage: remove possible data race when logging dropped labels --- lib/storage/metric_name.go | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/lib/storage/metric_name.go b/lib/storage/metric_name.go index 1b1047467..5816bee9c 100644 --- a/lib/storage/metric_name.go +++ b/lib/storage/metric_name.go @@ -8,10 +8,10 @@ import ( "strings" "sync" "sync/atomic" + "time" "github.com/VictoriaMetrics/VictoriaMetrics/lib/bytesutil" "github.com/VictoriaMetrics/VictoriaMetrics/lib/encoding" - "github.com/VictoriaMetrics/VictoriaMetrics/lib/fasttime" "github.com/VictoriaMetrics/VictoriaMetrics/lib/logger" "github.com/VictoriaMetrics/VictoriaMetrics/lib/prompb" ) @@ -567,21 +567,16 @@ var ( func trackDroppedLabels(labels, droppedLabels []prompb.Label) { atomic.AddUint64(&MetricsWithDroppedLabels, 1) - ct := fasttime.UnixTimestamp() - if ct < atomic.LoadUint64(&droppedLabelsLogNextTimestamp) { - return - } - droppedLabelsLogOnce.Do(func() { - atomic.StoreUint64(&droppedLabelsLogNextTimestamp, ct+5) + select { + case <-droppedLabelsLogTicker.C: logger.Warnf("dropping %d labels for %s; dropped labels: %s; either reduce the number of labels for this metric "+ "or increase -maxLabelsPerTimeseries=%d command-line flag value", len(droppedLabels), labelsToString(labels), labelsToString(droppedLabels), maxLabelsPerTimeseries) - droppedLabelsLogOnce = &sync.Once{} - }) + default: + } } -var droppedLabelsLogOnce = &sync.Once{} -var droppedLabelsLogNextTimestamp uint64 +var droppedLabelsLogTicker = time.NewTicker(5 * time.Second) func labelsToString(labels []prompb.Label) string { labelsCopy := append([]prompb.Label{}, labels...)