Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add the ability to set the hits_addend for a given rate_limit request via a hardcoded dynamic metadata field #34184

Open
wants to merge 8 commits into
base: main
Choose a base branch
from

Conversation

EItanya
Copy link
Contributor

@EItanya EItanya commented May 16, 2024

Commit Message: Adds the ability to set the hits_addend for a given rate_limit request via a hardcoded dynamic metadata field: envoy.ratelimit:hits_addend.
Additional Description:
Risk Level: Low
Testing: Added unit test. I have also manually tested this using gloo-edge as the control-plane.
Docs Changes:
Release Notes:
Platform Specific Features: N/A
[Optional Runtime guard:] N/A
[Optional Fixes #Issue] N/A
[Optional Fixes commit #PR or SHA] N/A
[Optional Deprecated:] N/A
[Optional API Considerations:] N/A

Copy link

As a reminder, PRs marked as draft will not be automatically assigned reviewers,
or be handled by maintainer-oncall triage.

Please mark your PR as ready when you want it to be reviewed!

🐱

Caused by: #34184 was opened by EItanya.

see: more, trace.

Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
@EItanya
Copy link
Contributor Author

EItanya commented May 16, 2024

The changes to ratelimit.cc are meant mostly as a conversation starter. I originally debated adding a MetadataKey to the Route spec to be able to generically specify a metadata key, but that felt overkill for such a small feature so I decided to start here. I can also of course make envoy.ratelimit a constant a la envoy.lb, but I wasn't sure of the appetite for that.

I'm also not sure exactly where the docs should live for this feature. I definitely think that updating the release notes make sense and I can do that, but it could definitely also make sense to add it to the proper docs.

Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
@EItanya EItanya marked this pull request as ready for review May 16, 2024 02:29
@mattklein123
Copy link
Member

At a high level this seems fine to me. For documentation I would add to the filter specific documentation as well as the release notes.

/wait

@EItanya
Copy link
Contributor Author

EItanya commented May 20, 2024

Ok, I'll add the documentation, are there any code changes you'd like me to make while I'm at it?

Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
Copy link

CC @envoyproxy/api-shepherds: Your approval is needed for changes made to (api/envoy/|docs/root/api-docs/).
envoyproxy/api-shepherds assignee is @mattklein123
CC @envoyproxy/api-watchers: FYI only for changes made to (api/envoy/|docs/root/api-docs/).

🐱

Caused by: #34184 was synchronize by EItanya.

see: more, trace.

Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
…addend_dynamic_metadata

Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
@jmarantz
Copy link
Contributor

/retest

@jmarantz
Copy link
Contributor

format failure

/wait

@EItanya
Copy link
Contributor Author

EItanya commented Jun 3, 2024

@jmarantz is there a good way to ensure all of my tools are up to date? When I run formatting it comes up with no diff. Or potentially does the CI job have the diff I need to apply?

Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
@@ -66,11 +66,21 @@ void Filter::initiateCall(const Http::RequestHeaderMap& headers) {
break;
}

double hits_addend = 0;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: spelling (hits_addend)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
Comment on lines +52 to +53
// This value can be modified by setting "envoy.ratelimit:hits_addend" in the dynamic metadata
// for a given request.
Copy link
Member

@wbpcode wbpcode Jun 5, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In most of cases, we prefer do similar things in the FilterState rather than dynamic metadata (like various sock options in the filter state and other dynamic configuration from filter state)? Is there any reason prefer the dynamic metadata?

cc @mattklein123

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I based this off of envoy_lb style decisions which can be made via DynamicMetadata. I don't have super strong feelings either way, but there are more easier ways to set DynamicMetadata via other filters so I slightly prefer this method.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

envoy.lb use the metadata because the subset lb construct the match structure from the endpoint metadata.

Then, in this scenario, I think filter state should be preferred for these typed options.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

in this case we use dynamic metadata as it allows to feed data in without the source filter being aware that it is for rate limit.
For example, we can use ext-auth server to add the metadata for the rate limit filter.

@wbpcode wbpcode self-assigned this Jun 5, 2024
@EItanya EItanya requested a review from wbpcode June 5, 2024 13:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

6 participants