From ee4fbdc43fe6081e37ce4ae1af4468d9f09a810f Mon Sep 17 00:00:00 2001 From: Michael Hoffmann Date: Wed, 4 Oct 2023 20:16:20 +0200 Subject: [PATCH] *: convert to annotations Signed-off-by: Michael Hoffmann --- pkg/api/query/grpc.go | 4 ++-- pkg/api/query/grpc_test.go | 11 +++++---- pkg/api/query/v1.go | 41 +++++++++++++++++---------------- pkg/api/query/v1_test.go | 7 +++--- pkg/exemplars/exemplars.go | 4 ++-- pkg/metadata/metadata.go | 4 ++-- pkg/metadata/prometheus_test.go | 1 + pkg/query/querier.go | 15 +++++------- pkg/query/querier_test.go | 38 +++++++++++++++--------------- pkg/query/query_bench_test.go | 4 ++-- pkg/query/test_test.go | 3 ++- pkg/receive/multitsdb.go | 8 +++---- pkg/rules/manager_test.go | 2 +- pkg/rules/rules.go | 4 ++-- pkg/rules/rules_test.go | 1 + pkg/targets/prometheus_test.go | 1 + pkg/targets/targets.go | 4 ++-- 17 files changed, 77 insertions(+), 75 deletions(-) diff --git a/pkg/api/query/grpc.go b/pkg/api/query/grpc.go index f41675c8516..769b0001c5b 100644 --- a/pkg/api/query/grpc.go +++ b/pkg/api/query/grpc.go @@ -129,7 +129,7 @@ func (g *GRPCAPI) Query(request *querypb.QueryRequest, server querypb.Query_Quer } if len(result.Warnings) != 0 { - if err := server.Send(querypb.NewQueryWarningsResponse(result.Warnings...)); err != nil { + if err := server.Send(querypb.NewQueryWarningsResponse(result.Warnings.AsErrors()...)); err != nil { return err } } @@ -231,7 +231,7 @@ func (g *GRPCAPI) QueryRange(request *querypb.QueryRangeRequest, srv querypb.Que } if len(result.Warnings) != 0 { - if err := srv.Send(querypb.NewQueryRangeWarningsResponse(result.Warnings...)); err != nil { + if err := srv.Send(querypb.NewQueryRangeWarningsResponse(result.Warnings.AsErrors()...)); err != nil { return err } } diff --git a/pkg/api/query/grpc_test.go b/pkg/api/query/grpc_test.go index 208efb2e6c2..d95e228090b 100644 --- a/pkg/api/query/grpc_test.go +++ b/pkg/api/query/grpc_test.go @@ -14,6 +14,7 @@ import ( "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/prometheus/promql" "github.com/prometheus/prometheus/storage" + "github.com/prometheus/prometheus/util/annotations" v1 "github.com/prometheus/prometheus/web/api/v1" "github.com/thanos-io/thanos/pkg/api/query/querypb" @@ -41,7 +42,7 @@ func TestGRPCQueryAPIErrorHandling(t *testing.T) { { name: "error response", engine: &engineStub{ - warns: []error{errors.New("warn stub")}, + warns: annotations.New().Add(errors.New("warn stub")), }, }, } @@ -68,7 +69,7 @@ func TestGRPCQueryAPIErrorHandling(t *testing.T) { if len(test.engine.warns) > 0 { testutil.Ok(t, err) for i, resp := range srv.responses { - testutil.Equals(t, test.engine.warns[i].Error(), resp.GetWarnings()) + testutil.Equals(t, test.engine.warns.AsErrors()[i].Error(), resp.GetWarnings()) } } }) @@ -87,7 +88,7 @@ func TestGRPCQueryAPIErrorHandling(t *testing.T) { if len(test.engine.warns) > 0 { testutil.Ok(t, err) for i, resp := range srv.responses { - testutil.Equals(t, test.engine.warns[i].Error(), resp.GetWarnings()) + testutil.Equals(t, test.engine.warns.AsErrors()[i].Error(), resp.GetWarnings()) } } }) @@ -97,7 +98,7 @@ func TestGRPCQueryAPIErrorHandling(t *testing.T) { type engineStub struct { v1.QueryEngine err error - warns []error + warns annotations.Annotations } func (e engineStub) NewInstantQuery(_ context.Context, q storage.Queryable, opts promql.QueryOpts, qs string, ts time.Time) (promql.Query, error) { @@ -111,7 +112,7 @@ func (e engineStub) NewRangeQuery(_ context.Context, q storage.Queryable, opts p type queryStub struct { promql.Query err error - warns []error + warns annotations.Annotations } func (q queryStub) Close() {} diff --git a/pkg/api/query/v1.go b/pkg/api/query/v1.go index 6b82646748d..89986864128 100644 --- a/pkg/api/query/v1.go +++ b/pkg/api/query/v1.go @@ -41,6 +41,7 @@ import ( "github.com/prometheus/prometheus/promql" "github.com/prometheus/prometheus/promql/parser" "github.com/prometheus/prometheus/storage" + "github.com/prometheus/prometheus/util/annotations" "github.com/prometheus/prometheus/util/stats" v1 "github.com/prometheus/prometheus/web/api/v1" promqlapi "github.com/thanos-io/promql-engine/api" @@ -589,7 +590,7 @@ func (qapi *QueryAPI) query(r *http.Request) (interface{}, []error, *api.ApiErro Result: res.Value, Stats: qs, QueryExplanation: explanation, - }, res.Warnings, nil, qry.Close + }, res.Warnings.AsErrors(), nil, qry.Close } func (qapi *QueryAPI) queryRange(r *http.Request) (interface{}, []error, *api.ApiError, func()) { @@ -759,7 +760,7 @@ func (qapi *QueryAPI) queryRange(r *http.Request) (interface{}, []error, *api.Ap Result: res.Value, Stats: qs, QueryExplanation: explanation, - }, res.Warnings, nil, qry.Close + }, res.Warnings.AsErrors(), nil, qry.Close } func (qapi *QueryAPI) labelValues(r *http.Request) (interface{}, []error, *api.ApiError, func()) { @@ -811,7 +812,7 @@ func (qapi *QueryAPI) labelValues(r *http.Request) (interface{}, []error, *api.A true, nil, query.NoopSeriesStatsReporter, - ).Querier(ctx, timestamp.FromTime(start), timestamp.FromTime(end)) + ).Querier(timestamp.FromTime(start), timestamp.FromTime(end)) if err != nil { return nil, nil, &api.ApiError{Typ: api.ErrorExec, Err: err}, func() {} } @@ -825,11 +826,11 @@ func (qapi *QueryAPI) labelValues(r *http.Request) (interface{}, []error, *api.A var callWarnings annotations.Annotations labelValuesSet := make(map[string]struct{}) for _, matchers := range matcherSets { - vals, callWarnings, err = q.LabelValues(name, matchers...) + vals, callWarnings, err = q.LabelValues(ctx, name, matchers...) if err != nil { return nil, nil, &api.ApiError{Typ: api.ErrorExec, Err: err}, func() {} } - warnings = append(warnings, callWarnings...) + warnings.Merge(callWarnings) for _, val := range vals { labelValuesSet[val] = struct{}{} } @@ -841,7 +842,7 @@ func (qapi *QueryAPI) labelValues(r *http.Request) (interface{}, []error, *api.A } sort.Strings(vals) } else { - vals, warnings, err = q.LabelValues(name) + vals, warnings, err = q.LabelValues(ctx, name) if err != nil { return nil, nil, &api.ApiError{Typ: api.ErrorExec, Err: err}, func() {} } @@ -851,7 +852,7 @@ func (qapi *QueryAPI) labelValues(r *http.Request) (interface{}, []error, *api.A vals = make([]string, 0) } - return vals, warnings, nil, func() {} + return vals, warnings.AsErrors(), nil, func() {} } func (qapi *QueryAPI) series(r *http.Request) (interface{}, []error, *api.ApiError, func()) { @@ -914,7 +915,7 @@ func (qapi *QueryAPI) series(r *http.Request) (interface{}, []error, *api.ApiErr true, nil, query.NoopSeriesStatsReporter, - ).Querier(ctx, timestamp.FromTime(start), timestamp.FromTime(end)) + ).Querier(timestamp.FromTime(start), timestamp.FromTime(end)) if err != nil { return nil, nil, &api.ApiError{Typ: api.ErrorExec, Err: err}, func() {} @@ -926,7 +927,7 @@ func (qapi *QueryAPI) series(r *http.Request) (interface{}, []error, *api.ApiErr sets []storage.SeriesSet ) for _, mset := range matcherSets { - sets = append(sets, q.Select(false, nil, mset...)) + sets = append(sets, q.Select(ctx, false, nil, mset...)) } set := storage.NewMergeSeriesSet(sets, storage.ChainedSeriesMerge) @@ -936,7 +937,7 @@ func (qapi *QueryAPI) series(r *http.Request) (interface{}, []error, *api.ApiErr if set.Err() != nil { return nil, nil, &api.ApiError{Typ: api.ErrorExec, Err: set.Err()}, func() {} } - return metrics, set.Warnings(), nil, func() {} + return metrics, set.Warnings().AsErrors(), nil, func() {} } func (qapi *QueryAPI) labelNames(r *http.Request) (interface{}, []error, *api.ApiError, func()) { @@ -981,7 +982,7 @@ func (qapi *QueryAPI) labelNames(r *http.Request) (interface{}, []error, *api.Ap true, nil, query.NoopSeriesStatsReporter, - ).Querier(ctx, timestamp.FromTime(start), timestamp.FromTime(end)) + ).Querier(timestamp.FromTime(start), timestamp.FromTime(end)) if err != nil { return nil, nil, &api.ApiError{Typ: api.ErrorExec, Err: err}, func() {} } @@ -996,11 +997,11 @@ func (qapi *QueryAPI) labelNames(r *http.Request) (interface{}, []error, *api.Ap var callWarnings annotations.Annotations labelNamesSet := make(map[string]struct{}) for _, matchers := range matcherSets { - names, callWarnings, err = q.LabelNames(matchers...) + names, callWarnings, err = q.LabelNames(ctx, matchers...) if err != nil { return nil, nil, &api.ApiError{Typ: api.ErrorExec, Err: err}, func() {} } - warnings = append(warnings, callWarnings...) + warnings.Merge(callWarnings) for _, val := range names { labelNamesSet[val] = struct{}{} } @@ -1012,7 +1013,7 @@ func (qapi *QueryAPI) labelNames(r *http.Request) (interface{}, []error, *api.Ap } sort.Strings(names) } else { - names, warnings, err = q.LabelNames() + names, warnings, err = q.LabelNames(ctx) } if err != nil { @@ -1022,7 +1023,7 @@ func (qapi *QueryAPI) labelNames(r *http.Request) (interface{}, []error, *api.Ap names = make([]string, 0) } - return names, warnings, nil, func() {} + return names, warnings.AsErrors(), nil, func() {} } func (qapi *QueryAPI) stores(_ *http.Request) (interface{}, []error, *api.ApiError, func()) { @@ -1065,7 +1066,7 @@ func NewTargetsHandler(client targets.UnaryClient, enablePartialResponse bool) f return nil, nil, &api.ApiError{Typ: api.ErrorInternal, Err: errors.Wrap(err, "retrieving targets")}, func() {} } - return t, warnings, nil, func() {} + return t, warnings.AsErrors(), nil, func() {} } } @@ -1111,7 +1112,7 @@ func NewAlertsHandler(client rules.UnaryClient, enablePartialResponse bool) func resp.Alerts = append(resp.Alerts, a.Alerts...) } } - return resp, warnings, nil, func() {} + return resp, warnings.AsErrors(), nil, func() {} } } @@ -1158,7 +1159,7 @@ func NewRulesHandler(client rules.UnaryClient, enablePartialResponse bool) func( if err != nil { return nil, nil, &api.ApiError{Typ: api.ErrorInternal, Err: errors.Errorf("error retrieving rules: %v", err)}, func() {} } - return groups, warnings, nil, func() {} + return groups, warnings.AsErrors(), nil, func() {} } } @@ -1203,7 +1204,7 @@ func NewExemplarsHandler(client exemplars.UnaryClient, enablePartialResponse boo if err != nil { return nil, nil, &api.ApiError{Typ: api.ErrorInternal, Err: errors.Wrap(err, "retrieving exemplars")}, func() {} } - return data, warnings, nil, func() {} + return data, warnings.AsErrors(), nil, func() {} } } @@ -1321,6 +1322,6 @@ func NewMetricMetadataHandler(client metadata.UnaryClient, enablePartialResponse return nil, nil, &api.ApiError{Typ: api.ErrorInternal, Err: errors.Wrap(err, "retrieving metadata")}, func() {} } - return t, warnings, nil, func() {} + return t, warnings.AsErrors(), nil, func() {} } } diff --git a/pkg/api/query/v1_test.go b/pkg/api/query/v1_test.go index ce8e9a5598b..b24797af276 100644 --- a/pkg/api/query/v1_test.go +++ b/pkg/api/query/v1_test.go @@ -44,7 +44,8 @@ import ( "github.com/prometheus/prometheus/storage" "github.com/prometheus/prometheus/tsdb" "github.com/prometheus/prometheus/tsdb/chunkenc" - "github.com/prometheus/prometheus/tsdb/tsdbutil" + "github.com/prometheus/prometheus/tsdb/chunks" + "github.com/prometheus/prometheus/util/annotations" promgate "github.com/prometheus/prometheus/util/gate" "github.com/prometheus/prometheus/util/stats" baseAPI "github.com/thanos-io/thanos/pkg/api" @@ -691,7 +692,7 @@ func TestMetadataEndpoints(t *testing.T) { var series []storage.Series for _, lbl := range old { - var samples []tsdbutil.Sample + var samples []chunks.Sample for i := int64(0); i < 10; i++ { samples = append(samples, sample{ @@ -1797,7 +1798,7 @@ func TestRulesHandler(t *testing.T) { } res, errors, apiError, releaseResources := endpoint(req.WithContext(ctx)) defer releaseResources() - if errors != nil { + if len(errors) > 0 { t.Fatalf("Unexpected errors: %s", errors) return } diff --git a/pkg/exemplars/exemplars.go b/pkg/exemplars/exemplars.go index be999b75088..9638074bd02 100644 --- a/pkg/exemplars/exemplars.go +++ b/pkg/exemplars/exemplars.go @@ -37,7 +37,7 @@ type exemplarsServer struct { exemplarspb.Exemplars_ExemplarsServer ctx context.Context - warnings []error + warnings annotations.Annotations data []*exemplarspb.ExemplarData mu sync.Mutex } @@ -46,7 +46,7 @@ func (srv *exemplarsServer) Send(res *exemplarspb.ExemplarsResponse) error { if res.GetWarning() != "" { srv.mu.Lock() defer srv.mu.Unlock() - srv.warnings = append(srv.warnings, errors.New(res.GetWarning())) + srv.warnings.Add(errors.New(res.GetWarning())) return nil } diff --git a/pkg/metadata/metadata.go b/pkg/metadata/metadata.go index 9bd1bb008a5..41fafb7b0d9 100644 --- a/pkg/metadata/metadata.go +++ b/pkg/metadata/metadata.go @@ -66,7 +66,7 @@ type metadataServer struct { metric string limit int - warnings []error + warnings annotations.Annotations metadataMap map[string][]metadatapb.Meta mu sync.Mutex } @@ -75,7 +75,7 @@ func (srv *metadataServer) Send(res *metadatapb.MetricMetadataResponse) error { if res.GetWarning() != "" { srv.mu.Lock() defer srv.mu.Unlock() - srv.warnings = append(srv.warnings, errors.New(res.GetWarning())) + srv.warnings.Add(errors.New(res.GetWarning())) return nil } diff --git a/pkg/metadata/prometheus_test.go b/pkg/metadata/prometheus_test.go index 85998aae008..b45229c2947 100644 --- a/pkg/metadata/prometheus_test.go +++ b/pkg/metadata/prometheus_test.go @@ -14,6 +14,7 @@ import ( "github.com/efficientgo/core/testutil" "github.com/go-kit/log" "github.com/pkg/errors" + "github.com/prometheus/prometheus/util/annotations" "github.com/thanos-io/thanos/pkg/metadata/metadatapb" "github.com/thanos-io/thanos/pkg/promclient" "github.com/thanos-io/thanos/pkg/runutil" diff --git a/pkg/query/querier.go b/pkg/query/querier.go index fa7fc546192..e350cd4c7be 100644 --- a/pkg/query/querier.go +++ b/pkg/query/querier.go @@ -5,11 +5,12 @@ package query import ( "context" - "github.com/prometheus/prometheus/util/annotations" "strings" "sync" "time" + "github.com/prometheus/prometheus/util/annotations" + "github.com/go-kit/log" "github.com/opentracing/opentracing-go" "github.com/pkg/errors" @@ -201,12 +202,12 @@ type seriesServer struct { seriesSet []storepb.Series seriesSetStats storepb.SeriesStatsCounter - warnings []string + warnings annotations.Annotations } func (s *seriesServer) Send(r *storepb.SeriesResponse) error { if r.GetWarning() != "" { - s.warnings = append(s.warnings, r.GetWarning()) + s.warnings.Add(errors.New(r.GetWarning())) return nil } @@ -277,7 +278,7 @@ func (q *querier) Select(ctx context.Context, _ bool, hints *storage.SelectHints // The querier has a context, but it gets canceled as soon as query evaluation is completed by the engine. // We want to prevent this from happening for the async store API calls we make while preserving tracing context. // TODO(bwplotka): Does the above still is true? It feels weird to leave unfinished calls behind query API. - ctx := tracing.CopyTraceContext(context.Background(), q.ctx) + ctx = tracing.CopyTraceContext(context.Background(), ctx) ctx, cancel := context.WithTimeout(ctx, q.selectTimeout) span, ctx := tracing.StartSpan(ctx, "querier_select", opentracing.Tags{ "minTime": hints.Start, @@ -362,11 +363,7 @@ func (q *querier) selectFn(ctx context.Context, hints *storage.SelectHints, ms . if err := q.proxy.Series(&req, resp); err != nil { return nil, storepb.SeriesStatsCounter{}, errors.Wrap(err, "proxy Series()") } - - var warns annotations.Annotations - for _, w := range resp.warnings { - warns.Add(errors.New(w)) - } + warns := annotations.New().Merge(resp.warnings) if q.enableQueryPushdown && (hints.Func == "max_over_time" || hints.Func == "min_over_time") { // On query pushdown, delete the metric's name from the result because that's what the diff --git a/pkg/query/querier_test.go b/pkg/query/querier_test.go index 6fccd7fe840..faf56e1113b 100644 --- a/pkg/query/querier_test.go +++ b/pkg/query/querier_test.go @@ -28,6 +28,7 @@ import ( "github.com/prometheus/prometheus/promql" "github.com/prometheus/prometheus/storage" "github.com/prometheus/prometheus/tsdb/chunkenc" + "github.com/prometheus/prometheus/util/annotations" "github.com/prometheus/prometheus/util/gate" "github.com/thanos-io/thanos/pkg/component" @@ -59,7 +60,7 @@ func TestQueryableCreator_MaxResolution(t *testing.T) { NoopSeriesStatsReporter, ) - q, err := queryable.Querier(context.Background(), 0, 42) + q, err := queryable.Querier(0, 42) testutil.Ok(t, err) t.Cleanup(func() { testutil.Ok(t, q.Close()) }) @@ -394,7 +395,7 @@ func TestQuerier_Select_AfterPromQL(t *testing.T) { g := gate.New(2) mq := &mockedQueryable{ Creator: func(mint, maxt int64) storage.Querier { - return newQuerier(context.Background(), nil, mint, maxt, tcase.replicaLabels, nil, tcase.storeAPI, sc.dedup, 0, true, false, false, g, timeout, nil, NoopSeriesStatsReporter) + return newQuerier(nil, mint, maxt, tcase.replicaLabels, nil, tcase.storeAPI, sc.dedup, 0, true, false, false, g, timeout, nil, NoopSeriesStatsReporter) }, } t.Cleanup(func() { @@ -409,7 +410,7 @@ func TestQuerier_Select_AfterPromQL(t *testing.T) { if tcase.expectedWarning != "" { warns := res.Warnings testutil.Assert(t, len(warns) == 1, "expected only single warnings") - testutil.Equals(t, tcase.expectedWarning, warns[0].Error()) + testutil.Equals(t, tcase.expectedWarning, warns.AsErrors()[0]) } } @@ -773,7 +774,6 @@ func TestQuerier_Select(t *testing.T) { } { g := gate.New(2) q := newQuerier( - context.Background(), nil, tcase.mint, tcase.maxt, @@ -794,13 +794,13 @@ func TestQuerier_Select(t *testing.T) { t.Run(fmt.Sprintf("dedup=%v", sc.dedup), func(t *testing.T) { t.Run("querier.Select", func(t *testing.T) { - res := q.Select(false, tcase.hints, tcase.matchers...) + res := q.Select(context.Background(), false, tcase.hints, tcase.matchers...) testSelectResponse(t, sc.expected, res) if tcase.expectedWarning != "" { - w := res.Warnings() - testutil.Equals(t, 1, len(w)) - testutil.Equals(t, tcase.expectedWarning, w[0].Error()) + warns := res.Warnings() + testutil.Equals(t, 1, len(warns)) + testutil.Equals(t, tcase.expectedWarning, warns.AsErrors()[0].Error()) } }) // Integration test: Make sure the PromQL would select exactly the same. @@ -817,13 +817,11 @@ func TestQuerier_Select(t *testing.T) { warns := catcher.warns() // We don't care about anything else, all should be recorded. - testutil.Assert(t, len(warns) == 1, "expected only single warnings") testutil.Assert(t, len(catcher.resp) == 1, "expected only single response, subqueries?") - w := warns[0] if tcase.expectedWarning != "" { - testutil.Equals(t, 1, len(w)) - testutil.Equals(t, tcase.expectedWarning, w[0].Error()) + testutil.Equals(t, 1, len(warns)) + testutil.Equals(t, tcase.expectedWarning, warns.AsErrors()[0].Error()) } }) }) @@ -966,7 +964,7 @@ type mockedQueryable struct { // Querier creates a querier with the provided min and max time. // The promQL engine sets mint and it is calculated based on the default lookback delta. -func (q *mockedQueryable) Querier(_ context.Context, mint, maxt int64) (storage.Querier, error) { +func (q *mockedQueryable) Querier(mint, maxt int64) (storage.Querier, error) { if q.Creator == nil { return q.querier, nil } @@ -993,18 +991,18 @@ type querierResponseCatcher struct { resp []storage.SeriesSet } -func (q *querierResponseCatcher) Select(selectSorted bool, p *storage.SelectHints, m ...*labels.Matcher) storage.SeriesSet { - s := q.Querier.Select(selectSorted, p, m...) +func (q *querierResponseCatcher) Select(ctx context.Context, selectSorted bool, p *storage.SelectHints, m ...*labels.Matcher) storage.SeriesSet { + s := q.Querier.Select(ctx, selectSorted, p, m...) q.resp = append(q.resp, s) return storage.NoopSeriesSet() } func (q querierResponseCatcher) Close() error { return nil } -func (q *querierResponseCatcher) warns() []annotations.Annotations { - var warns []annotations.Annotations +func (q *querierResponseCatcher) warns() annotations.Annotations { + var warns annotations.Annotations for _, r := range q.resp { - warns = append(warns, r.Warnings()) + warns.Merge(r.Warnings()) } return warns } @@ -1080,7 +1078,7 @@ func TestQuerierWithDedupUnderstoodByPromQL_Rate(t *testing.T) { timeout := 100 * time.Second g := gate.New(2) - q := newQuerier(context.Background(), logger, realSeriesWithStaleMarkerMint, realSeriesWithStaleMarkerMaxt, []string{"replica"}, nil, newProxyStore(s), false, 0, true, false, false, g, timeout, nil, NoopSeriesStatsReporter) + q := newQuerier(logger, realSeriesWithStaleMarkerMint, realSeriesWithStaleMarkerMaxt, []string{"replica"}, nil, newProxyStore(s), false, 0, true, false, false, g, timeout, nil, NoopSeriesStatsReporter) t.Cleanup(func() { testutil.Ok(t, q.Close()) }) @@ -1150,7 +1148,7 @@ func TestQuerierWithDedupUnderstoodByPromQL_Rate(t *testing.T) { timeout := 5 * time.Second g := gate.New(2) - q := newQuerier(context.Background(), logger, realSeriesWithStaleMarkerMint, realSeriesWithStaleMarkerMaxt, []string{"replica"}, nil, newProxyStore(s), true, 0, true, false, false, g, timeout, nil, NoopSeriesStatsReporter) + q := newQuerier(logger, realSeriesWithStaleMarkerMint, realSeriesWithStaleMarkerMaxt, []string{"replica"}, nil, newProxyStore(s), true, 0, true, false, false, g, timeout, nil, NoopSeriesStatsReporter) t.Cleanup(func() { testutil.Ok(t, q.Close()) }) diff --git a/pkg/query/query_bench_test.go b/pkg/query/query_bench_test.go index 8de127bab56..48a9d7673da 100644 --- a/pkg/query/query_bench_test.go +++ b/pkg/query/query_bench_test.go @@ -84,7 +84,6 @@ func benchQuerySelect(t testutil.TB, totalSamples, totalSeries int, dedup bool) logger := log.NewNopLogger() q := newQuerier( - context.Background(), logger, math.MinInt64, math.MaxInt64, @@ -129,8 +128,9 @@ func testSelect(t testutil.TB, q *querier, expectedSeries []labels.Labels) { t.Run("select", func(t testutil.TB) { t.ResetTimer() + ctx := context.Background() for i := 0; i < t.N(); i++ { - ss := q.Select(true, nil, &labels.Matcher{Value: "foo", Name: "bar", Type: labels.MatchEqual}) + ss := q.Select(ctx, true, nil, &labels.Matcher{Value: "foo", Name: "bar", Type: labels.MatchEqual}) testutil.Ok(t, ss.Err()) testutil.Equals(t, 0, len(ss.Warnings())) diff --git a/pkg/query/test_test.go b/pkg/query/test_test.go index abc35b82e4b..612d44f0f8c 100644 --- a/pkg/query/test_test.go +++ b/pkg/query/test_test.go @@ -21,6 +21,7 @@ import ( "github.com/prometheus/prometheus/model/timestamp" "github.com/prometheus/prometheus/promql" "github.com/prometheus/prometheus/promql/parser" + "github.com/prometheus/prometheus/promql/parser/posrange" "github.com/prometheus/prometheus/storage" "github.com/prometheus/prometheus/util/teststorage" ) @@ -325,7 +326,7 @@ func ParseEval(lines []string, i int) (int, *evalCmd, error) { if err != nil { if perr, ok := err.(*parser.ParseErr); ok { perr.LineOffset = i - posOffset := parser.Pos(strings.Index(lines[i], expr)) + posOffset := posrange.Pos(strings.Index(lines[i], expr)) perr.PositionRange.Start += posOffset perr.PositionRange.End += posOffset perr.Query = lines[i] diff --git a/pkg/receive/multitsdb.go b/pkg/receive/multitsdb.go index 509e9f35351..240e3e0dbfd 100644 --- a/pkg/receive/multitsdb.go +++ b/pkg/receive/multitsdb.go @@ -731,9 +731,9 @@ func (s *ReadyStorage) StartTime() (int64, error) { } // Querier implements the Storage interface. -func (s *ReadyStorage) Querier(ctx context.Context, mint, maxt int64) (storage.Querier, error) { +func (s *ReadyStorage) Querier(mint, maxt int64) (storage.Querier, error) { if x := s.get(); x != nil { - return x.Querier(ctx, mint, maxt) + return x.Querier(mint, maxt) } return nil, ErrNotReady } @@ -772,8 +772,8 @@ func (a adapter) StartTime() (int64, error) { return 0, errors.New("not implemented") } -func (a adapter) Querier(ctx context.Context, mint, maxt int64) (storage.Querier, error) { - return a.db.Querier(ctx, mint, maxt) +func (a adapter) Querier(mint, maxt int64) (storage.Querier, error) { + return a.db.Querier(mint, maxt) } func (a adapter) ExemplarQuerier(ctx context.Context) (storage.ExemplarQuerier, error) { diff --git a/pkg/rules/manager_test.go b/pkg/rules/manager_test.go index 1814f18d358..5a80f39124c 100644 --- a/pkg/rules/manager_test.go +++ b/pkg/rules/manager_test.go @@ -59,7 +59,7 @@ func (n nopAppender) UpdateMetadata(storage.SeriesRef, labels.Labels, metadata.M type nopQueryable struct{} -func (n nopQueryable) Querier(_ context.Context, _, _ int64) (storage.Querier, error) { +func (n nopQueryable) Querier(_, _ int64) (storage.Querier, error) { return storage.NoopQuerier(), nil } diff --git a/pkg/rules/rules.go b/pkg/rules/rules.go index ff8f1db8bf6..ab539a41025 100644 --- a/pkg/rules/rules.go +++ b/pkg/rules/rules.go @@ -222,7 +222,7 @@ type rulesServer struct { rulespb.Rules_RulesServer ctx context.Context - warnings []error + warnings annotations.Annotations groups []*rulespb.RuleGroup mu sync.Mutex } @@ -231,7 +231,7 @@ func (srv *rulesServer) Send(res *rulespb.RulesResponse) error { if res.GetWarning() != "" { srv.mu.Lock() defer srv.mu.Unlock() - srv.warnings = append(srv.warnings, errors.New(res.GetWarning())) + srv.warnings.Add(errors.New(res.GetWarning())) return nil } diff --git a/pkg/rules/rules_test.go b/pkg/rules/rules_test.go index 05b14123e48..921d4b7cc5a 100644 --- a/pkg/rules/rules_test.go +++ b/pkg/rules/rules_test.go @@ -13,6 +13,7 @@ import ( "github.com/efficientgo/core/testutil" "github.com/gogo/protobuf/proto" "github.com/prometheus/prometheus/model/labels" + "github.com/prometheus/prometheus/util/annotations" "github.com/thanos-io/thanos/pkg/rules/rulespb" "github.com/thanos-io/thanos/pkg/store/labelpb" "github.com/thanos-io/thanos/pkg/store/storepb" diff --git a/pkg/targets/prometheus_test.go b/pkg/targets/prometheus_test.go index de6483ff0ed..2564c93d37e 100644 --- a/pkg/targets/prometheus_test.go +++ b/pkg/targets/prometheus_test.go @@ -16,6 +16,7 @@ import ( "github.com/gogo/protobuf/proto" "github.com/pkg/errors" "github.com/prometheus/prometheus/model/labels" + "github.com/prometheus/prometheus/util/annotations" "github.com/thanos-io/thanos/pkg/promclient" "github.com/thanos-io/thanos/pkg/runutil" "github.com/thanos-io/thanos/pkg/store/labelpb" diff --git a/pkg/targets/targets.go b/pkg/targets/targets.go index 4671bccbf77..8dfe9431f77 100644 --- a/pkg/targets/targets.go +++ b/pkg/targets/targets.go @@ -185,7 +185,7 @@ type targetsServer struct { targetspb.Targets_TargetsServer ctx context.Context - warnings []error + warnings annotations.Annotations targets *targetspb.TargetDiscovery mu sync.Mutex } @@ -194,7 +194,7 @@ func (srv *targetsServer) Send(res *targetspb.TargetsResponse) error { if res.GetWarning() != "" { srv.mu.Lock() defer srv.mu.Unlock() - srv.warnings = append(srv.warnings, errors.New(res.GetWarning())) + srv.warnings.Add(errors.New(res.GetWarning())) return nil }