Repository navigation
[13.x] Don't let a job with a deleted model stop queue:retry - #62124
Merged
Merged
Conversation
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.
queue:retryunserializes each failed job before pushing it back, to readretryUntil()and the queueable options. Unserializing loads the job's models from the database, so if a model was deleted after the job failed, it throwsModelNotFoundExceptionand the whole command stops.All the jobs after that one are left in
failed_jobs. The broken job stays there too, so running the command again stops at the same job, and nothing can be retried until you find it and forget it by hand.$deleteWhenMissingModelsdoesn't help, because only the worker checks it and the job never gets that far.This was reported in #44949, which was closed because there was no reproduction. The added tests reproduce it.
With this PR, when the models can't be found, the payload is pushed back as it is. The worker then deletes the job if it uses
$deleteWhenMissingModels, or fails it again otherwise, and the remaining jobs are retried as usual.