[14.x] Add opt-in jitter to queue backoff - #61437
Closed
yousefkadah wants to merge 1 commit into
Closed
Conversation
Backoff delays are currently deterministic, so a group of jobs that fail together against the same struggling dependency retries in lockstep. This adds an opt-in jitter ratio, resolved through the same attribute or property path as the existing backoff options, that spreads those retries over a bounded window around the configured backoff. Off by default, so existing retry timing is unchanged. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Member
|
Thanks for your pull request to Laravel! Unfortunately, I'm going to delay merging this code for now. To preserve our ability to adequately maintain the framework, we need to be very careful regarding the amount of code we include. If applicable, please consider releasing your code as a package so that the community can still take advantage of your contributions! |
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
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.
Backoff delays are currently deterministic. Every job that fails at the same moment against the same dependency computes the same delay and retries in lockstep, so a rate-limited or briefly-degraded API gets hit by the whole batch again simultaneously.
This adds an opt-in jitter ratio that spreads those retries over a bounded window around the configured backoff.
The ratio is configurable, and the property form works too, matching how the other queue options are already expressed:
Notes
calculateBackoff()returns exactly what it returned before, so existing retry timing is unchanged.getAttributeValue()helper, so attribute, property, inheritance, and property-overrides-attribute all behave the same waybackoffalready does. No new resolution path.0is left alone, so opting in never introduces a delay where there wasn't one.0..1, so the delay can't go negative.random(0, backoff)). Full jitter spreads more aggressively but can collapse a deliberately-tuned 300s backoff to near zero; proportional keeps the configured value meaningful. Happy to switch if you'd prefer the other shape.Tests
tests/Queue311 passing,tests/Busandtests/Integration/Queue378 passing,pintclean. The payload-shape assertions in the Redis, Beanstalkd and Database queue tests were updated for the new key.🤖 Generated with Claude Code