Skip to content

Commit

Permalink
Store: Don't error when no stores are matched (thanos-io#6082)
Browse files Browse the repository at this point in the history
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 thanos-io#5296

Fixes: thanos-io#5862

Signed-off-by: SuperQ <[email protected]>
  • Loading branch information
SuperQ authored and Nathaniel Graham committed Apr 17, 2023
1 parent 212f27e commit d8b8399
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 10 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ We use *breaking :warning:* to mark changes that are not backward compatible (re
- [#6044](https://github.com/thanos-io/thanos/pull/6044) Receive: mark ouf of window errors as conflict, if out-of-window samples ingestion is activated
- [#6050](https://github.com/thanos-io/thanos/pull/6050) Store: Re-try bucket store initial sync upon failure.
- [#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

Expand Down
11 changes: 5 additions & 6 deletions pkg/store/proxy.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@ type ctxKey int
// StoreMatcherKey is the context key for the store's allow list.
const StoreMatcherKey = ctxKey(0)

// ErrorNoStoresMatched is returned if the query does not match any data.
// This can happen with Query servers trees and external labels.
var ErrorNoStoresMatched = errors.New("No StoreAPIs matched for this query")

// Client holds meta information about a store.
type Client interface {
// StoreClient to access the store.
Expand Down Expand Up @@ -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", ErrorNoStoresMatched, "stores", strings.Join(storeDebugMsgs, ";"))
return nil
}

Expand Down
8 changes: 4 additions & 4 deletions pkg/store/proxy_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ func TestProxyStore_Series(t *testing.T) {
MaxTime: 300,
Matchers: []storepb.LabelMatcher{{Name: "a", Value: "a", Type: storepb.LabelMatcher_EQ}},
},
expectedWarningsLen: 1, // No store matched for this query.
expectedWarningsLen: 0, // No store matched for this query.
},
{
title: "no storeAPI available for 301-302 time range",
Expand All @@ -153,7 +153,7 @@ func TestProxyStore_Series(t *testing.T) {
MaxTime: 400,
Matchers: []storepb.LabelMatcher{{Name: "a", Value: "a", Type: storepb.LabelMatcher_EQ}},
},
expectedWarningsLen: 1, // No store matched for this query.
expectedWarningsLen: 0, // No store matched for this query.
},
{
title: "storeAPI available for time range; no series for ext=2 external label matcher",
Expand All @@ -174,7 +174,7 @@ func TestProxyStore_Series(t *testing.T) {
MaxTime: 300,
Matchers: []storepb.LabelMatcher{{Name: "ext", Value: "2", Type: storepb.LabelMatcher_EQ}},
},
expectedWarningsLen: 1, // No store matched for this query.
expectedWarningsLen: 0, // No store matched for this query.
},
{
title: "storeAPI available for time range; available series for ext=1 external label matcher",
Expand Down Expand Up @@ -499,7 +499,7 @@ func TestProxyStore_Series(t *testing.T) {
Matchers: []storepb.LabelMatcher{{Name: "ext", Value: "1", Type: storepb.LabelMatcher_EQ}},
},
storeDebugMatchers: [][]*labels.Matcher{{labels.MustNewMatcher(labels.MatchEqual, "__address__", "foo")}},
expectedWarningsLen: 1, // No stores match.
expectedWarningsLen: 0, // No stores match.
},
{
title: "sharded series response",
Expand Down

0 comments on commit d8b8399

Please sign in to comment.