-
Notifications
You must be signed in to change notification settings - Fork 468
feat: add an optional burstable rate limiter #1924
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
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
The existing rate limiter was moved to a separate package and renamed to IntervalLimiter. Added BurstLimiter which is a wrapper around the "golang.org/x/time/rate" package. The conf.Rate type now has a private `typ` field that indicates if it is a "interval" or "burst" rate limiter. If the config value is in the form of "<burst>/<rate>" we set it to "burst", otherwise "interval". The conf.Rate.GetRateType() method is then called from the ratelimit.New package to determine the underlying type of `ratelimit.Limiter` returned from `ratelimit.New`. Finally we changed `api.NewLimiterOptions` to call `ratelimit.New` instead of creating a specific type of rate limiter.
Pull Request Test Coverage Report for Build 12995163660Warning: This coverage report may be inaccurate.This pull request's base commit is no longer the HEAD commit of its target branch. This means it includes changes from outside the original pull request, including, potentially, unrelated coverage changes.
Details
💛 - Coveralls |
kangmingtay
approved these changes
Jan 24, 2025
We have a special case check for rate limits of 0 in some areas of the code. Eventually I would like to remove those so I'm going to set the rate limit of 0 as a valid rate limit which allows no events.
kangmingtay
approved these changes
Jan 27, 2025
wdoppenberg
pushed a commit
to wdoppenberg/supabase-auth
that referenced
this pull request
Jun 5, 2025
The existing rate limiter was moved to a separate package and renamed to IntervalLimiter. Added BurstLimiter which is a wrapper around the "golang.org/x/time/rate" package. The conf.Rate type now has a private `typ` field that indicates if it is a `"interval"` or `"burst"` rate limiter. If the config value is in the form of `"<burst>/<rate>"` we set it to `"burst"`, otherwise `"interval"`. The `conf.Rate.GetRateType()` method is then called from the `ratelimit.New` function to determine the underlying type of `ratelimit.Limiter` it returns. Then changed `api.NewLimiterOptions` to call `ratelimit.New` instead of creating a specific type of rate limiter. --------- Co-authored-by: Chris Stockton <[email protected]>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
The existing rate limiter was moved to a separate package and renamed to IntervalLimiter. Added BurstLimiter which is a wrapper around the "golang.org/x/time/rate" package.
The conf.Rate type now has a private
typ
field that indicates if it is a"interval"
or"burst"
rate limiter. If the config value is in the form of"<burst>/<rate>"
we set it to"burst"
, otherwise"interval"
. Theconf.Rate.GetRateType()
method is then called from theratelimit.New
function to determine the underlying type ofratelimit.Limiter
it returns.Then changed
api.NewLimiterOptions
to callratelimit.New
instead of creating a specific type of rate limiter.