-
-
Notifications
You must be signed in to change notification settings - Fork 9.6k
Closed
Description
Symfony version(s) affected
6.2.2
Description
I need limiter sometimes for very fine grained time intervals. But below 1 second it throws.
(Fixed WindowLimiter is better here but #47676)
How to reproduce
$this->limiter = (new RateLimiterFactory([
'id' => 'dontcare',
'policy' => 'token_bucket',
'limit' => 999,
'rate' => ['interval' => '200 milliseconds', 'amount' => 1],
], new InMemoryStorage()))->create();
$this->limiter->reserve()->wait();
gives
PHP Fatal error: Uncaught DivisionByZeroError: Division by zero in /home/merlin/Code-Incubator/bbnd/untrack-email-analyzer/vendor/symfony/rate-limiter/Policy/Rate.php:97
Stack trace:
#0 /home/merlin/Code-Incubator/bbnd/untrack-email-analyzer/vendor/symfony/rate-limiter/Policy/TokenBucket.php(71): Symfony\Component\RateLimiter\Policy\Rate->calculateNewTokensDuringInterval()
#1 /home/merlin/Code-Incubator/bbnd/untrack-email-analyzer/vendor/symfony/rate-limiter/Policy/TokenBucketLimiter.php(68): Symfony\Component\RateLimiter\Policy\TokenBucket->getAvailableTokens()
#2 /home/merlin/Code-Incubator/bbnd/untrack-email-analyzer/src/Utility/ThrottlingGuzzleClientDecorator.php(35): Symfony\Component\RateLimiter\Policy\TokenBucketLimiter->reserve()
Possible Solution
No response
Additional Context
No response