diff --git a/CHANGELOG.md b/CHANGELOG.md index 81b5c24ae2..aef768c6cc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ ### Grafana Mimir +* [CHANGE] Querier: pass context to queryable `IsApplicable` hook. #10451 * [CHANGE] Distributor: OTLP and push handler replace all non-UTF8 characters with the unicode replacement character `\uFFFD` in error messages before propagating them. #10236 * [CHANGE] Querier: pass query matchers to queryable `IsApplicable` hook. #10256 * [CHANGE] Query-frontend: Add `topic` label to `cortex_ingest_storage_strong_consistency_requests_total`, `cortex_ingest_storage_strong_consistency_failures_total`, and `cortex_ingest_storage_strong_consistency_wait_duration_seconds` metrics. #10220 diff --git a/pkg/querier/querier.go b/pkg/querier/querier.go index 6814487a48..63a69b1ffb 100644 --- a/pkg/querier/querier.go +++ b/pkg/querier/querier.go @@ -138,7 +138,7 @@ func New(cfg Config, limits *validation.Overrides, distributor Distributor, quer queryables = append(queryables, TimeRangeQueryable{ Queryable: NewDistributorQueryable(distributor, limits, queryMetrics, logger), StorageName: "ingester", - IsApplicable: func(tenantID string, now time.Time, _, queryMaxT int64, _ ...*labels.Matcher) bool { + IsApplicable: func(_ context.Context, tenantID string, now time.Time, _, queryMaxT int64, _ ...*labels.Matcher) bool { return ShouldQueryIngesters(limits.QueryIngestersWithin(tenantID), now, queryMaxT) }, }) @@ -234,7 +234,7 @@ func newQueryable( // TimeRangeQueryable is a Queryable that is aware of when it is applicable. type TimeRangeQueryable struct { storage.Queryable - IsApplicable func(tenantID string, now time.Time, queryMinT, queryMaxT int64, matchers ...*labels.Matcher) bool + IsApplicable func(ctx context.Context, tenantID string, now time.Time, queryMinT, queryMaxT int64, matchers ...*labels.Matcher) bool StorageName string } @@ -242,7 +242,7 @@ func NewStoreGatewayTimeRangeQueryable(q storage.Queryable, querierConfig Config return TimeRangeQueryable{ Queryable: q, StorageName: "store-gateway", - IsApplicable: func(_ string, now time.Time, queryMinT, _ int64, _ ...*labels.Matcher) bool { + IsApplicable: func(_ context.Context, _ string, now time.Time, queryMinT, _ int64, _ ...*labels.Matcher) bool { return ShouldQueryBlockStore(querierConfig.QueryStoreAfter, now, queryMinT) }, } @@ -283,7 +283,7 @@ func (mq multiQuerier) getQueriers(ctx context.Context, matchers ...*labels.Matc var queriers []storage.Querier for _, queryable := range mq.queryables { - if queryable.IsApplicable(tenantID, now, mq.minT, mq.maxT, matchers...) { + if queryable.IsApplicable(ctx, tenantID, now, mq.minT, mq.maxT, matchers...) { q, err := queryable.Querier(mq.minT, mq.maxT) if err != nil { return nil, nil, err diff --git a/pkg/querier/querier_test.go b/pkg/querier/querier_test.go index 35ff3a9b08..2f7d958bae 100644 --- a/pkg/querier/querier_test.go +++ b/pkg/querier/querier_test.go @@ -231,7 +231,7 @@ func TestQuerier(t *testing.T) { db, through := mockTSDB(t, model.Time(0), int(chunks*samplesPerChunk), sampleRate, chunkOffset, int(samplesPerChunk), q.valueType) dbQueryable := TimeRangeQueryable{ Queryable: db, - IsApplicable: func(_ string, _ time.Time, _, _ int64, _ ...*labels.Matcher) bool { + IsApplicable: func(_ context.Context, _ string, _ time.Time, _, _ int64, _ ...*labels.Matcher) bool { return true }, }