8000 [Messenger] Prevent waiting time to overflow when using long delays · symfony/symfony@b3e09a3 · GitHub
[go: up one dir, main page]

Skip to content

Commit b3e09a3

Browse files
[Messenger] Prevent waiting time to overflow when using long delays
1 parent 0c91466 commit b3e09a3

File tree

2 files changed

+10
-2
lines changed

2 files changed

+10
-2
lines changed

src/Symfony/Component/Messenger/Retry/MultiplierRetryStrategy.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,14 +83,14 @@ public function getWaitingTime(Envelope $message, ?\Throwable $throwable = null)
8383
$delay = $this->delayMilliseconds * $this->multiplier ** $retries;
8484

8585
if ($this->jitter > 0) {
86-
$randomness = (int) ($delay * $this->jitter);
86+
$randomness = (int) min(\PHP_INT_MAX, $delay * $this->jitter);
8787
$delay += random_int(-$randomness, +$randomness);
8888
}
8989

9090
if ($delay > $this->maxDelayMilliseconds && 0 !== $this->maxDelayMilliseconds) {
9191
return $this->maxDelayMilliseconds;
9292
}
9393

94-
return (int) ceil($delay);
94+
return (int) min(\PHP_INT_MAX, ceil($delay));
9595
}
9696
}

src/Symfony/Component/Messenger/Tests/Retry/MultiplierRetryStrategyTest.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,14 @@ public function testGetWaitTime(int $delay, float $multiplier, int $maxDelay, in
6060
$this->assertSame($expectedDelay, $strategy->getWaitingTime($envelope));
6161
}
6262

63+
public function testGetWaitTimeWithOverflowingDelay()
64+
{
65+
$strategy = new MultiplierRetryStrategy(512, PHP_INT_MAX, 2, 0, 1);
66+
$envelope = new Envelope(new \stdClass(), [new RedeliveryStamp(10)]);
67+
68+
$this->assertSame(\PHP_INT_MAX, $strategy->getWaitingTime($envelope));
69+
}
70+
6371
public static function getWaitTimeTests(): iterable
6472
{
6573
// delay, multiplier, maxDelay, retries, expectedDelay

0 commit comments

Comments
 (0)
0