From fe4c3e2638779f89248017da6eab928c956661e3 Mon Sep 17 00:00:00 2001 From: SuperQ Date: Sun, 29 Jan 2023 11:13:44 +0100 Subject: [PATCH] Store: Don't error when no stores are matched It's normal and not an error if a query does not match due to no downstream stores. This is common when querying with external labels and tiered query servers. This bug was introduced in https://github.com/thanos-io/thanos/pull/5296 Fixes: https://github.com/thanos-io/thanos/issues/5862 Signed-off-by: SuperQ --- CHANGELOG.md | 1 + pkg/store/proxy.go | 11 +++++------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a6fc6ae5ab8..624f38d191f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,7 @@ We use *breaking :warning:* to mark changes that are not backward compatible (re - [#6050](https://github.com/thanos-io/thanos/pull/6050) Store: Re-try bucket store initial sync upon failure. - [#6066](https://github.com/thanos-io/thanos/pull/6066) Tracing: fixed panic because of nil sampler - [#6067](https://github.com/thanos-io/thanos/pull/6067) Receive: fixed panic when querying uninitialized TSDBs. +- [#6082](https://github.com/thanos-io/thanos/pull/6082) Store: Don't error when no stores are matched. ### Changed diff --git a/pkg/store/proxy.go b/pkg/store/proxy.go index d969ddb64f6..df49c25a1b7 100644 --- a/pkg/store/proxy.go +++ b/pkg/store/proxy.go @@ -35,6 +35,10 @@ type ctxKey int // StoreMatcherKey is the context key for the store's allow list. const StoreMatcherKey = ctxKey(0) +// NoStoresMatchedError is returned if the query does match any data. +// This can happen with Query servers trees and external labels +var NoStoresMatchedError = errors.New("No StoreAPIs matched for this query") + // Client holds meta information about a store. type Client interface { // StoreClient to access the store. @@ -278,12 +282,7 @@ func (s *ProxyStore) Series(originalRequest *storepb.SeriesRequest, srv storepb. } if len(stores) == 0 { - err := errors.New("No StoreAPIs matched for this query") - level.Debug(reqLogger).Log("err", err, "stores", strings.Join(storeDebugMsgs, ";")) - if sendErr := srv.Send(storepb.NewWarnSeriesResponse(err)); sendErr != nil { - level.Error(reqLogger).Log("err", sendErr) - return status.Error(codes.Unknown, errors.Wrap(sendErr, "send series response").Error()) - } + level.Debug(reqLogger).Log("err", NoStoresMatchedError, "stores", strings.Join(storeDebugMsgs, ";")) return nil }