Skip to content

Commit 333c2c7

Browse files
authored
Upgrade prometheus to 2.19.1 (#2756)
* Upgraded Prometheus Signed-off-by: Marco Pracucci <[email protected]> * Fixed SeriesSet interface in Cortex Signed-off-by: Marco Pracucci <[email protected]> * Upgraded Thanos Signed-off-by: Marco Pracucci <[email protected]> * Partially fixed tests Signed-off-by: Marco Pracucci <[email protected]> * Fixed test Signed-off-by: Marco Pracucci <[email protected]> * Fixed remote read API Signed-off-by: Marco Pracucci <[email protected]> * Reuse EmptySeriesSet and ErrSeriesSet from Prometheus Signed-off-by: Marco Pracucci <[email protected]> * Updated Prometheus again to fix response status code Signed-off-by: Marco Pracucci <[email protected]> * Renamed back some variables Signed-off-by: Marco Pracucci <[email protected]> * Cleaned up lazyQuerier Signed-off-by: Marco Pracucci <[email protected]>
1 parent 876a8f5 commit 333c2c7

File tree

113 files changed

+10149
-838
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

113 files changed

+10149
-838
lines changed

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,12 @@ require (
4545
github.com/prometheus/client_golang v1.6.1-0.20200604110148-03575cad4e55
4646
github.com/prometheus/client_model v0.2.0
4747
github.com/prometheus/common v0.10.0
48-
github.com/prometheus/prometheus v1.8.2-0.20200609052543-1627d234da06
48+
github.com/prometheus/prometheus v1.8.2-0.20200622142935-153f859b7499
4949
github.com/rafaeljusto/redigomock v0.0.0-20190202135759-257e089e14a1
5050
github.com/segmentio/fasthash v0.0.0-20180216231524-a72b379d632e
5151
github.com/spf13/afero v1.2.2
5252
github.com/stretchr/testify v1.5.1
53-
github.com/thanos-io/thanos v0.12.3-0.20200603113103-6d3e730e154d
53+
github.com/thanos-io/thanos v0.12.3-0.20200618165043-6c513e5f5c5f
5454
github.com/uber/jaeger-client-go v2.23.1+incompatible
5555
github.com/weaveworks/common v0.0.0-20200512154658-384f10054ec5
5656
go.etcd.io/bbolt v1.3.5-0.20200615073812-232d8fc87f50

go.sum

Lines changed: 14 additions & 35 deletions
Large diffs are not rendered by default.

integration/querier_remote_read_test.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ package main
44

55
import (
66
"bytes"
7+
"context"
78
"io/ioutil"
89
"net/http"
910
"testing"
@@ -90,7 +91,11 @@ func TestQuerierRemoteRead(t *testing.T) {
9091
require.NoError(t, err)
9192
compressed := snappy.Encode(nil, data)
9293

93-
httpReq, err := http.NewRequest("POST", "http://"+querier.HTTPEndpoint()+"/prometheus/api/v1/read", bytes.NewReader(compressed))
94+
// Call the remote read API endpoint with a timeout.
95+
httpReqCtx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
96+
defer cancel()
97+
98+
httpReq, err := http.NewRequestWithContext(httpReqCtx, "POST", "http://"+querier.HTTPEndpoint()+"/prometheus/api/v1/read", bytes.NewReader(compressed))
9499
require.NoError(t, err)
95100
httpReq.Header.Set("X-Scope-OrgID", "user-1")
96101
httpReq.Header.Add("Content-Encoding", "snappy")

pkg/configs/legacy_promql/engine.go

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -497,11 +497,7 @@ func (ng *Engine) populateSeries(ctx context.Context, q storage.Queryable, s *Ev
497497
params.End = params.End - offsetMilliseconds
498498
}
499499

500-
set, _, err = querier.Select(false, params, n.LabelMatchers...)
501-
if err != nil {
502-
level.Error(ng.logger).Log("msg", "error selecting series set", "err", err)
503-
return err
504-
}
500+
set = querier.Select(false, params, n.LabelMatchers...)
505501
n.series, err = expandSeriesSet(ctx, set)
506502
if err != nil {
507503
// TODO(fabxc): use multi-error.
@@ -520,11 +516,7 @@ func (ng *Engine) populateSeries(ctx context.Context, q storage.Queryable, s *Ev
520516
params.End = params.End - offsetMilliseconds
521517
}
522518

523-
set, _, err = querier.Select(false, params, n.LabelMatchers...)
524-
if err != nil {
525-
level.Error(ng.logger).Log("msg", "error selecting series set", "err", err)
526-
return err
527-
}
519+
set = querier.Select(false, params, n.LabelMatchers...)
528520
n.series, err = expandSeriesSet(ctx, set)
529521
if err != nil {
530522
level.Error(ng.logger).Log("msg", "error expanding series set", "err", err)

pkg/configs/legacy_promql/engine_test.go

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -129,24 +129,15 @@ type errQuerier struct {
129129
err error
130130
}
131131

132-
func (q *errQuerier) Select(bool, *storage.SelectHints, ...*labels.Matcher) (storage.SeriesSet, storage.Warnings, error) {
133-
return errSeriesSet{err: q.err}, nil, q.err
132+
func (q *errQuerier) Select(bool, *storage.SelectHints, ...*labels.Matcher) storage.SeriesSet {
133+
return storage.ErrSeriesSet(q.err)
134134
}
135135
func (q *errQuerier) LabelValues(name string) ([]string, storage.Warnings, error) {
136136
return nil, nil, q.err
137137
}
138138
func (q *errQuerier) LabelNames() ([]string, storage.Warnings, error) { return nil, nil, q.err }
139139
func (q *errQuerier) Close() error { return q.err }
140140

141-
// errSeriesSet implements storage.SeriesSet which always returns error.
142-
type errSeriesSet struct {
143-
err error
144-
}
145-
146-
func (errSeriesSet) Next() bool { return false }
147-
func (errSeriesSet) At() storage.Series { return nil }
148-
func (e errSeriesSet) Err() error { return e.err }
149-
150141
func TestQueryError(t *testing.T) {
151142
engine := NewEngine(nil, nil, 10, 10*time.Second)
152143
errStorage := ErrStorage(fmt.Errorf("storage error"))

pkg/ingester/ingester_v2.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -492,9 +492,9 @@ func (i *Ingester) v2Query(ctx context.Context, req *client.QueryRequest) (*clie
492492
defer q.Close()
493493

494494
// It's not required to return sorted series because series are sorted by the Cortex querier.
495-
ss, _, err := q.Select(false, nil, matchers...)
496-
if err != nil {
497-
return nil, err
495+
ss := q.Select(false, nil, matchers...)
496+
if ss.Err() != nil {
497+
return nil, ss.Err()
498498
}
499499

500500
numSamples := 0
@@ -615,9 +615,9 @@ func (i *Ingester) v2MetricsForLabelMatchers(ctx context.Context, req *client.Me
615615
}
616616

617617
for _, matchers := range matchersSet {
618-
seriesSet, _, err := q.Select(false, nil, matchers...)
619-
if err != nil {
620-
return nil, err
618+
seriesSet := q.Select(false, nil, matchers...)
619+
if seriesSet.Err() != nil {
620+
return nil, seriesSet.Err()
621621
}
622622

623623
for seriesSet.Next() {
@@ -723,9 +723,9 @@ func (i *Ingester) v2QueryStream(req *client.QueryRequest, stream client.Ingeste
723723
defer q.Close()
724724

725725
// It's not required to return sorted series because series are sorted by the Cortex querier.
726-
ss, _, err := q.Select(false, nil, matchers...)
727-
if err != nil {
728-
return err
726+
ss := q.Select(false, nil, matchers...)
727+
if ss.Err() != nil {
728+
return ss.Err()
729729
}
730730

731731
timeseries := make([]client.TimeSeries, 0, queryStreamBatchSize)

pkg/querier/block.go

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ type blocksQuerier struct {
8686

8787
// Select implements storage.Querier interface.
8888
// The bool passed is ignored because the series is always sorted.
89-
func (b *blocksQuerier) Select(_ bool, sp *storage.SelectHints, matchers ...*labels.Matcher) (storage.SeriesSet, storage.Warnings, error) {
89+
func (b *blocksQuerier) Select(_ bool, sp *storage.SelectHints, matchers ...*labels.Matcher) storage.SeriesSet {
9090
log, ctx := spanlogger.New(b.ctx, "blocksQuerier.Select")
9191
defer log.Span.Finish()
9292

@@ -106,12 +106,15 @@ func (b *blocksQuerier) Select(_ bool, sp *storage.SelectHints, matchers ...*lab
106106
PartialResponseStrategy: storepb.PartialResponseStrategy_ABORT,
107107
})
108108
if err != nil {
109-
return nil, nil, promql.ErrStorage{Err: err}
109+
return storage.ErrSeriesSet(promql.ErrStorage{Err: err})
110110
}
111111

112112
level.Debug(log).Log("series", len(series), "warnings", len(warnings))
113113

114-
return &blockQuerierSeriesSet{series: series}, warnings, nil
114+
return &blockQuerierSeriesSet{
115+
series: series,
116+
warnings: warnings,
117+
}
115118
}
116119

117120
func convertMatchersToLabelMatcher(matchers []*labels.Matcher) []storepb.LabelMatcher {
@@ -155,7 +158,8 @@ func (b *blocksQuerier) Close() error {
155158

156159
// Implementation of storage.SeriesSet, based on individual responses from store client.
157160
type blockQuerierSeriesSet struct {
158-
series []*storepb.Series
161+
series []*storepb.Series
162+
warnings storage.Warnings
159163

160164
// next response to process
161165
next int
@@ -195,6 +199,10 @@ func (bqss *blockQuerierSeriesSet) Err() error {
195199
return nil
196200
}
197201

202+
func (bqss *blockQuerierSeriesSet) Warnings() storage.Warnings {
203+
return bqss.warnings
204+
}
205+
198206
// newBlockQuerierSeries makes a new blockQuerierSeries. Input labels must be already sorted by name.
199207
func newBlockQuerierSeries(lbls []storepb.Label, chunks []storepb.AggrChunk) *blockQuerierSeries {
200208
sort.Slice(chunks, func(i, j int) bool {

pkg/querier/blocks_store_queryable.go

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -279,15 +279,15 @@ type blocksStoreQuerier struct {
279279

280280
// Select implements storage.Querier interface.
281281
// The bool passed is ignored because the series is always sorted.
282-
func (q *blocksStoreQuerier) Select(_ bool, sp *storage.SelectHints, matchers ...*labels.Matcher) (storage.SeriesSet, storage.Warnings, error) {
283-
set, warnings, err := q.selectSorted(sp, matchers...)
282+
func (q *blocksStoreQuerier) Select(_ bool, sp *storage.SelectHints, matchers ...*labels.Matcher) storage.SeriesSet {
283+
set := q.selectSorted(sp, matchers...)
284284

285285
// We need to wrap the error in order to have Prometheus returning a 5xx error.
286-
if err != nil && !errors.Is(err, context.Canceled) && !errors.Is(err, context.DeadlineExceeded) {
287-
err = promql.ErrStorage{Err: err}
286+
if err := set.Err(); err != nil && !errors.Is(err, context.Canceled) && !errors.Is(err, context.DeadlineExceeded) {
287+
set = storage.ErrSeriesSet(promql.ErrStorage{Err: err})
288288
}
289289

290-
return set, warnings, err
290+
return set
291291
}
292292

293293
func (q *blocksStoreQuerier) LabelValues(name string) ([]string, storage.Warnings, error) {
@@ -304,7 +304,7 @@ func (q *blocksStoreQuerier) Close() error {
304304
return nil
305305
}
306306

307-
func (q *blocksStoreQuerier) selectSorted(sp *storage.SelectHints, matchers ...*labels.Matcher) (storage.SeriesSet, storage.Warnings, error) {
307+
func (q *blocksStoreQuerier) selectSorted(sp *storage.SelectHints, matchers ...*labels.Matcher) storage.SeriesSet {
308308
spanLog, spanCtx := spanlogger.New(q.ctx, "blocksStoreQuerier.selectSorted")
309309
defer spanLog.Span.Finish()
310310

@@ -329,20 +329,20 @@ func (q *blocksStoreQuerier) selectSorted(sp *storage.SelectHints, matchers ...*
329329
if maxT < minT {
330330
q.metrics.storesHit.Observe(0)
331331
level.Debug(spanLog).Log("msg", "empty query time range after max time manipulation")
332-
return series.NewEmptySeriesSet(), nil, nil
332+
return storage.EmptySeriesSet()
333333
}
334334
}
335335

336336
// Find the list of blocks we need to query given the time range.
337337
knownMetas, knownDeletionMarks, err := q.finder.GetBlocks(q.userID, minT, maxT)
338338
if err != nil {
339-
return nil, nil, err
339+
return storage.ErrSeriesSet(err)
340340
}
341341

342342
if len(knownMetas) == 0 {
343343
q.metrics.storesHit.Observe(0)
344344
level.Debug(spanLog).Log("msg", "no blocks found")
345-
return series.NewEmptySeriesSet(), nil, nil
345+
return storage.EmptySeriesSet()
346346
}
347347

348348
level.Debug(spanLog).Log("msg", "found blocks to query", "expected", BlockMetas(knownMetas).String())
@@ -371,15 +371,15 @@ func (q *blocksStoreQuerier) selectSorted(sp *storage.SelectHints, matchers ...*
371371
break
372372
}
373373

374-
return nil, nil, err
374+
return storage.ErrSeriesSet(err)
375375
}
376376
level.Debug(spanLog).Log("msg", "found store-gateway instances to query", "num instances", len(clients), "attempt", attempt)
377377

378378
// Fetch series from stores. If an error occur we do not retry because retries
379379
// are only meant to cover missing blocks.
380380
seriesSets, queriedBlocks, warnings, err := q.fetchSeriesFromStores(spanCtx, clients, minT, maxT, convertedMatchers)
381381
if err != nil {
382-
return nil, nil, err
382+
return storage.ErrSeriesSet(err)
383383
}
384384
level.Debug(spanLog).Log("msg", "received series from all store-gateways", "queried blocks", strings.Join(convertULIDsToString(queriedBlocks), " "))
385385

@@ -402,7 +402,9 @@ func (q *blocksStoreQuerier) selectSorted(sp *storage.SelectHints, matchers ...*
402402
q.metrics.storesHit.Observe(float64(len(touchedStores)))
403403
q.metrics.refetches.Observe(float64(attempt - 1))
404404

405-
return storage.NewMergeSeriesSet(resSeriesSets, storage.ChainedSeriesMerge), resWarnings, nil
405+
return series.NewSeriesSetWithWarnings(
406+
storage.NewMergeSeriesSet(resSeriesSets, storage.ChainedSeriesMerge),
407+
resWarnings)
406408
}
407409

408410
level.Debug(spanLog).Log("msg", "consistency check failed", "attempt", attempt, "missing blocks", strings.Join(convertULIDsToString(missingBlocks), " "))
@@ -415,7 +417,7 @@ func (q *blocksStoreQuerier) selectSorted(sp *storage.SelectHints, matchers ...*
415417
err = fmt.Errorf("consistency check failed because some blocks were not queried: %s", strings.Join(convertULIDsToString(remainingBlocks), " "))
416418
level.Warn(util.WithContext(spanCtx, spanLog)).Log("msg", "failed consistency check", "err", err)
417419

418-
return nil, nil, err
420+
return storage.ErrSeriesSet(err)
419421
}
420422

421423
func (q *blocksStoreQuerier) fetchSeriesFromStores(

pkg/querier/blocks_store_queryable_test.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -408,16 +408,16 @@ func TestBlocksStoreQuerier_SelectSorted(t *testing.T) {
408408
labels.MustNewMatcher(labels.MatchEqual, labels.MetricName, metricName),
409409
}
410410

411-
set, warnings, err := q.Select(true, nil, matchers...)
411+
set := q.Select(true, nil, matchers...)
412412
if testData.expectedErr != "" {
413-
assert.EqualError(t, err, testData.expectedErr)
414-
assert.Nil(t, set)
415-
assert.Nil(t, warnings)
413+
assert.EqualError(t, set.Err(), testData.expectedErr)
414+
assert.False(t, set.Next())
415+
assert.Nil(t, set.Warnings())
416416
return
417417
}
418418

419-
require.NoError(t, err)
420-
assert.Len(t, warnings, 0)
419+
require.NoError(t, set.Err())
420+
assert.Len(t, set.Warnings(), 0)
421421

422422
// Read all returned series and their values.
423423
var actualSeries []seriesResult
@@ -514,8 +514,8 @@ func TestBlocksStoreQuerier_SelectSortedShouldHonorQueryStoreAfter(t *testing.T)
514514
End: testData.queryMaxT,
515515
}
516516

517-
_, _, err := q.selectSorted(sp, nil)
518-
require.NoError(t, err)
517+
set := q.selectSorted(sp, nil)
518+
require.NoError(t, set.Err())
519519

520520
if testData.expectedMinT == 0 && testData.expectedMaxT == 0 {
521521
assert.Len(t, finder.Calls, 0)

pkg/querier/chunk_store_queryable.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,29 +39,29 @@ type chunkStoreQuerier struct {
3939

4040
// Select implements storage.Querier interface.
4141
// The bool passed is ignored because the series is always sorted.
42-
func (q *chunkStoreQuerier) Select(_ bool, sp *storage.SelectHints, matchers ...*labels.Matcher) (storage.SeriesSet, storage.Warnings, error) {
42+
func (q *chunkStoreQuerier) Select(_ bool, sp *storage.SelectHints, matchers ...*labels.Matcher) storage.SeriesSet {
4343
userID, err := user.ExtractOrgID(q.ctx)
4444
if err != nil {
45-
return nil, nil, err
45+
return storage.ErrSeriesSet(err)
4646
}
4747
chunks, err := q.store.Get(q.ctx, userID, model.Time(sp.Start), model.Time(sp.End), matchers...)
4848
if err != nil {
4949
switch err.(type) {
5050
case promql.ErrStorage, promql.ErrTooManySamples, promql.ErrQueryCanceled, promql.ErrQueryTimeout:
5151
// Recognized by Prometheus API, vendor/github.com/prometheus/prometheus/promql/engine.go:91.
5252
// Don't translate those, just in case we use them internally.
53-
return nil, nil, err
53+
return storage.ErrSeriesSet(err)
5454
case chunk.QueryError:
5555
// This will be returned with status code 422 by Prometheus API.
5656
// vendor/github.com/prometheus/prometheus/web/api/v1/api.go:1393
57-
return nil, nil, err
57+
return storage.ErrSeriesSet(err)
5858
default:
5959
// All other errors will be returned as 500.
60-
return nil, nil, promql.ErrStorage{Err: err}
60+
return storage.ErrSeriesSet(promql.ErrStorage{Err: err})
6161
}
6262
}
6363

64-
return partitionChunks(chunks, q.mint, q.maxt, q.chunkIteratorFunc), nil, nil
64+
return partitionChunks(chunks, q.mint, q.maxt, q.chunkIteratorFunc)
6565
}
6666

6767
// Series in the returned set are sorted alphabetically by labels.

0 commit comments

Comments
 (0)