Allow empty matcher at store gateway to fetch all postings #7260
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Changes
If a query only contains external labels, no matcher is left after matching external labels at store gateway and in this case store gateway fetches nothing. https://github.com/thanos-io/thanos/blob/main/pkg/store/bucket.go#L2471
This PR changes Store Gateway to add a matcher
""=""
to fetch all postings instead. This should match Prometheus behavior better.This changes existing behavior. Current behavior all Stores will return nil. After that, Store Gateway will try to fetch all postings (series). This change is more compatible to Prometheus from what I understand. For example,
cluster
is just a normal label in Prometheus and users can docount ({cluster="A"})
without issues. However, after they makecluster
an external label, then there is no way to runcount ({cluster="A"})
anymore.If there is concern about the behavior change, I can put this behavior under a FF and make it hidden to Thanos users.
Verification
Updated E2E test case.