From f1a3dbbb6b73b07857274b00f91b63f3814f676c Mon Sep 17 00:00:00 2001 From: Alan Protasio Date: Fri, 16 Sep 2022 00:40:41 -0700 Subject: [PATCH] GetSeries should Select sorted results only if more than one matcher is requested (#11313) Signed-off-by: Alan Protasio Signed-off-by: Alan Protasio --- web/api/v1/api.go | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/web/api/v1/api.go b/web/api/v1/api.go index 40fb68b162..9ceaa8c3f2 100644 --- a/web/api/v1/api.go +++ b/web/api/v1/api.go @@ -768,15 +768,21 @@ func (api *API) series(r *http.Request) (result apiFuncResult) { End: timestamp.FromTime(end), Func: "series", // There is no series function, this token is used for lookups that don't need samples. } + var set storage.SeriesSet - var sets []storage.SeriesSet - for _, mset := range matcherSets { - // We need to sort this select results to merge (deduplicate) the series sets later. - s := q.Select(true, hints, mset...) - sets = append(sets, s) + if len(matcherSets) > 1 { + var sets []storage.SeriesSet + for _, mset := range matcherSets { + // We need to sort this select results to merge (deduplicate) the series sets later. + s := q.Select(true, hints, mset...) + sets = append(sets, s) + } + set = storage.NewMergeSeriesSet(sets, storage.ChainedSeriesMerge) + } else { + // At this point at least one match exists. + set = q.Select(false, hints, matcherSets[0]...) } - set := storage.NewMergeSeriesSet(sets, storage.ChainedSeriesMerge) metrics := []labels.Labels{} for set.Next() { metrics = append(metrics, set.At().Labels())