diff --git a/CHANGELOG.md b/CHANGELOG.md index c3ded683b6c..ee4e4d005a8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,7 @@ * [ENHANCEMENT] Ingester: Add new ingester metric `cortex_ingester_max_inflight_query_requests`. #5798 * [ENHANCEMENT] Query: Added `query_storage_wall_time` to Query Frontend and Ruler query stats log for wall time spent on fetching data from storage. Query evaluation is not included. #5799 * [ENHANCEMENT] Query: Added additional max query length check at Query Frontend and Ruler. Added `-querier.ignore-max-query-length` flag to disable max query length check at Querier. #5808 +* [ENHANCEMENT] Querier: Add context error check when converting Metrics to SeriesSet for GetSeries on distributorQuerier. #5827 * [BUGFIX] Distributor: Do not use label with empty values for sharding #5717 * [BUGFIX] Query Frontend: queries with negative offset should check whether it is cacheable or not. #5719 * [BUGFIX] Redis Cache: pass `cache_size` config correctly. #5734 diff --git a/pkg/querier/distributor_queryable.go b/pkg/querier/distributor_queryable.go index d78af058791..9961b8d9527 100644 --- a/pkg/querier/distributor_queryable.go +++ b/pkg/querier/distributor_queryable.go @@ -136,7 +136,7 @@ func (q *distributorQuerier) Select(ctx context.Context, sortSeries bool, sp *st if err != nil { return storage.ErrSeriesSet(err) } - return series.MetricsToSeriesSet(sortSeries, ms) + return series.MetricsToSeriesSet(ctx, sortSeries, ms) } return q.streamingSelect(ctx, sortSeries, minT, maxT, matchers) diff --git a/pkg/querier/series/series_set.go b/pkg/querier/series/series_set.go index cd49bf23fed..b8742ec0d75 100644 --- a/pkg/querier/series/series_set.go +++ b/pkg/querier/series/series_set.go @@ -17,6 +17,7 @@ package series import ( + "context" "sort" "github.com/prometheus/common/model" @@ -167,9 +168,12 @@ func MatrixToSeriesSet(sortSeries bool, m model.Matrix) storage.SeriesSet { } // MetricsToSeriesSet creates a storage.SeriesSet from a []metric.Metric -func MetricsToSeriesSet(sortSeries bool, ms []metric.Metric) storage.SeriesSet { +func MetricsToSeriesSet(ctx context.Context, sortSeries bool, ms []metric.Metric) storage.SeriesSet { series := make([]storage.Series, 0, len(ms)) for _, m := range ms { + if ctx.Err() != nil { + return storage.ErrSeriesSet(ctx.Err()) + } series = append(series, &ConcreteSeries{ labels: metricToLabels(m.Metric), samples: nil,