feat: support per policy overriden stream limits on limits service #19403
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.
What this PR does / why we need it:
This is a followup for #18994. Here we update the new limits service to support the policy-overridable stream limits.
We modified the
tenantUsage
to add a new map of policies so we can track the number of streams per policy independently. This way, the stream of a policy with a stream limit override does not account for the global stream limit and vice-versa.Special notes for reviewer:
I see two ways to get the policy for each stream on the stream service:
Option 1 - What's implemented in this PR:
Update: @grobinson-grafana and I agreed on this approach
We resolve the policy for each stream on the distributor, and pass the policy (if any) on the
proto.StreamMetadata
that is part of theproto.ExceedsLimitsRequest
distributor sends to the limits frontend and this to the limits service.Resolving the policies for a stream can be somewhat expensive as we need to check the stream matchers from the mappings against the stream labels. This way we only resolve the policies once on the distributors which is already done anyways.
Option 2
Resolve the policies again on the limits service. This would make a bit of more work, but will reduce the request size. Plus we can decide to only resolve the policy for those policies that are overriding the stream limits.
We are considering allowing to set the policy via a header on the gateway, so this option may end up being a bit more complicated since we'd need to pass the header from the distributors down to the limits service.
Checklist
CONTRIBUTING.md
guide (required)feat
PRs are unlikely to be accepted unless a case can be made for the feature actually being a bug fix to existing behavior.docs/sources/setup/upgrade/_index.md
deprecated-config.yaml
anddeleted-config.yaml
files respectively in thetools/deprecated-config-checker
directory. Example PR