[13.x] Add a global pause switch for queues - #61126
Merged
Merged
Conversation
|
Thanks for submitting a PR! Note that draft PRs are not reviewed. If you would like a review, please mark your pull request as ready for review in the GitHub user interface. Pull requests that are abandoned in draft may be closed due to inactivity. |
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.
Right now, you can pause the scheduler (all of them) out right, but you cant do the same for queues without going into maintenance mode.
This means if you have 14 workers and even more queues, you have to pause each and every individual queue, they may change names with feature changes, which means it becomes a bit of a burden to maintain.
It gets even more technical if you used managed queues, which then means you need to think about the connections as well:
Queue::pause(Queue::getDefaultDriver(), 'hussle');now becomes:
Queue::pause('cloud', 'hussle');which means we have to maintain it and gate it between envs.This PR is a pause switch for all connections and queues, meaning we can do
php artisan queue:pause --all(resume works too) with get 2 new events,QueuesResumedandQueuesPausedThis is also useful during deployments.. as we can force pause all workers without tapping into the looping event and save the cache hits
One intentional note: if a queue was paused individually, resumeAll leaves it paused.. Idea being pause/resume and pauseAll/resumeAll are independent switches. This also avoids any B/C 🫡 (I made a note in the docblock to save future pain)