From 368b69b4c49bacba33c48a7ecea45506a3917eb7 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Thu, 5 Nov 2020 01:36:13 +0200 Subject: [PATCH] app/vmselect: properly handle errors in GetLabelsOnTimeRange and GetLabelValuesOnTimeRange --- app/vmselect/prometheus/prometheus.go | 22 ++++++++++++++-------- lib/storage/index_db_test.go | 2 +- lib/storage/merge.go | 2 +- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/app/vmselect/prometheus/prometheus.go b/app/vmselect/prometheus/prometheus.go index f43517e61e..cdee46c671 100644 --- a/app/vmselect/prometheus/prometheus.go +++ b/app/vmselect/prometheus/prometheus.go @@ -512,9 +512,12 @@ func LabelValuesHandler(startTime time.Time, labelName string, w http.ResponseWr } var labelValues []string if len(r.Form["match[]"]) == 0 { - var err error if len(r.Form["start"]) == 0 && len(r.Form["end"]) == 0 { + var err error labelValues, err = netstorage.GetLabelValues(labelName, deadline) + if err != nil { + return fmt.Errorf(`cannot obtain label values for %q: %w`, labelName, err) + } } else { ct := startTime.UnixNano() / 1e6 end, err := searchutils.GetTime(r, "end", ct) @@ -530,9 +533,9 @@ func LabelValuesHandler(startTime time.Time, labelName string, w http.ResponseWr MaxTimestamp: end, } labelValues, err = netstorage.GetLabelValuesOnTimeRange(labelName, tr, deadline) - } - if err != nil { - return fmt.Errorf(`cannot obtain label values for %q: %w`, labelName, err) + if err != nil { + return fmt.Errorf(`cannot obtain label values on time range for %q: %w`, labelName, err) + } } } else { // Extended functionality that allows filtering by label filters and time range @@ -710,9 +713,12 @@ func LabelsHandler(startTime time.Time, w http.ResponseWriter, r *http.Request) } var labels []string if len(r.Form["match[]"]) == 0 { - var err error if len(r.Form["start"]) == 0 && len(r.Form["end"]) == 0 { + var err error labels, err = netstorage.GetLabels(deadline) + if err != nil { + return fmt.Errorf("cannot obtain labels: %w", err) + } } else { ct := startTime.UnixNano() / 1e6 end, err := searchutils.GetTime(r, "end", ct) @@ -728,9 +734,9 @@ func LabelsHandler(startTime time.Time, w http.ResponseWriter, r *http.Request) MaxTimestamp: end, } labels, err = netstorage.GetLabelsOnTimeRange(tr, deadline) - } - if err != nil { - return fmt.Errorf("cannot obtain labels: %w", err) + if err != nil { + return fmt.Errorf("cannot obtain labels on time range: %w", err) + } } } else { // Extended functionality that allows filtering by label filters and time range diff --git a/lib/storage/index_db_test.go b/lib/storage/index_db_test.go index 3d12eb7da0..eecf1b64f5 100644 --- a/lib/storage/index_db_test.go +++ b/lib/storage/index_db_test.go @@ -1577,7 +1577,7 @@ func TestSearchTSIDWithTimeRange(t *testing.T) { // Check SearchTagValuesOnTimeRange. tvs, err := db.SearchTagValuesOnTimeRange([]byte(""), TimeRange{ - MinTimestamp: int64(now)-msecPerDay, + MinTimestamp: int64(now) - msecPerDay, MaxTimestamp: int64(now), }, 10000, noDeadline) if err != nil { diff --git a/lib/storage/merge.go b/lib/storage/merge.go index 433b2fc4e6..073361064e 100644 --- a/lib/storage/merge.go +++ b/lib/storage/merge.go @@ -182,7 +182,7 @@ func skipSamplesOutsideRetention(b *Block, retentionDeadline int64, rowsDeleted for nextIdx < len(timestamps) && timestamps[nextIdx] < retentionDeadline { nextIdx++ } - atomic.AddUint64(rowsDeleted, uint64(nextIdx - b.nextIdx)) + atomic.AddUint64(rowsDeleted, uint64(nextIdx-b.nextIdx)) b.nextIdx = nextIdx }