Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

[RateLimiter] Fix SlidingWindow calculations#47557

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 ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Closed
Jeroeny wants to merge1 commit intosymfony:6.4fromJeroeny:ratelimit

Conversation

@Jeroeny
Copy link
Contributor

@JeroenyJeroeny commentedSep 12, 2022
edited
Loading

QA
Branch?6.4
Bug fix?yes
New feature?yes
Deprecations?no
TicketsFix#40289
LicenseMIT
Doc PR

This implementsLimiterInterface->reserve() forSlidingWindowLimiter. I'm not sure if the lack of implementation was due to time/scope or if it's actually not possible and my approach is incorrect. But I like to give it a try anyway. Perhaps@wouterj you could elaborate on that?

The calculation does the following:

  1. Calculate tokens to be released within this window. E.g. if 4 were used in the last window, at 50% into the current, 2 are still to be released.
  2. Calculate the time-per-token within the remainder of the window. If the requested tokens will be available before the end of the current window, return the time-per-token * needed-tokens.
  3. Otherwise return time-per-token of the regular interval * needed-tokens(-after the current window).

Some other things I've noticed in the RateLimiter:

  • FixedWindowLimiter uses aWindow class, whereasSlidingWindowLimiter uses aSlidingWindow. Shouldn't the first have aFixedWindow class?
  • TheWindow class takes its$windowSize as argument,SlidingWindow does not. Perhaps the latter could also take this argument in this PR, since it's used in the calculation. But I guess those classes have to be backwards compatible.
  • SlidingWindow->getRetryAfter() is no longer used and could be deprecated in favor ofcalculateTimeForTokens. Making it more like the fixed window.

Edit: This shouldfix#40289, I've added it to the QA table.

@carsonbotcarsonbot added this to the6.2 milestoneSep 12, 2022
@JeroenyJeroeny changed the title[RateLimit] Implement reserve method for SlidingWindow[RateLimiter] Implement reserve method for SlidingWindowSep 12, 2022
@JeroenyJeroenyforce-pushed theratelimit branch 3 times, most recently from11da730 toe7a8d43CompareSeptember 12, 2022 15:35
@nicolas-grekasnicolas-grekas modified the milestones:6.2,6.3Nov 5, 2022
@JeroenyJeroenyforce-pushed theratelimit branch 2 times, most recently fromd5629b0 toa585b4cCompareNovember 23, 2022 10:19
@JeroenyJeroeny changed the title[RateLimiter] Implement reserve method for SlidingWindow[RateLimiter] FIx SlidingWindow calculationsNov 30, 2022
@JeroenyJeroeny changed the title[RateLimiter] FIx SlidingWindow calculations[RateLimiter] Fix SlidingWindow calculationsNov 30, 2022
@nicolas-grekasnicolas-grekas modified the milestones:6.3,6.4May 23, 2023
@JeroenyJeroeny closed thisSep 7, 2023
fabpot added a commit that referenced this pull requestOct 1, 2023
…oeny)This PR was squashed before being merged into the 6.4 branch.Discussion----------[RateLimiter] Add SlidingWindowLimiter::reserve()| Q             | A| ------------- | ---| Branch?       | 6.4| Bug fix?      | yes| New feature?  | yes| Deprecations? | yes| Tickets |Fix#40289,Fixes#46875| License       | MITThis implements `LimiterInterface->reserve()` for `SlidingWindowLimiter`. I'm not sure if the lack of implementation was due to time/scope or if it's actually not possible and my approach is incorrect. But I like to give it a try anyway. Perhaps `@wouterj` you could elaborate on that?The calculation does the following:1. Calculate tokens to be released within this window. E.g. if 4 were used in the last window, at 50% into the current, 2 are still to be released.2. Calculate the time-per-token within the remainder of the window. If the requested tokens will be available before the end of the current window, return the time-per-token * needed-tokens.3. Otherwise return time-per-token of the regular interval * needed-tokens(-after the current window).This wasn't a [bugfix](#51592), so back to feature PR. I couldn't reopen#47557, So had to create this new PR.Commits-------1b4a2df [RateLimiter] Add SlidingWindowLimiter::reserve()
Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment

Reviewers

No reviews

Assignees

No one assigned

Projects

None yet

Milestone

6.4

Development

Successfully merging this pull request may close these issues.

[RateLimiter] retry-after of SlidingWindowLimiter is incorrect

3 participants

@Jeroeny@nicolas-grekas@carsonbot

[8]ページ先頭

©2009-2025 Movatter.jp