Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RetryBatchCommand causes overlapping of failed jobs when run concurrently with the same Batch ID #1

Open
wants to merge 4 commits into
base: 10.x
Choose a base branch
from

Conversation

rybakihor
Copy link
Collaborator

Title: RetryBatchCommand causes overlapping of failed jobs when run concurrently with the same Batch ID

Description:
There is an issue in the job batching system that allows the same failed jobs to be added to the jobs table and executed multiple times (depending on the number of parallel processes of the RetryBatchCommand command for the same batch ID). This can result in a negative value for the number of pending jobs.

Steps to reproduce:

Create a batch with, for example, 1000 jobs.
Make the jobs fail (throw an exception)
Run the batch and verify that the value of failed_jobs in the pending_jobs table is 1000.
Make the jobs successful (remove the exception thrown)
Run several instances of the php artisan queue:retry-batch {id} command simultaneously or with a small time difference.
Check the job_batches table, and you will see that pending_jobs has a negative value. This indicates that some jobs have been executed multiple times by different processes.
Laravel version: 10.13.5

Proposed Solution:
Add the without-job-overlapping option to RetryCommand, which blocks the execution of a failed job using Cache lock, if such a job has already being executed
Add the execution of RetryCommand with this option to RetryBatchCommand

…starting parallel processes for the same batch id
@rybakihor rybakihor closed this Jun 28, 2023
@rybakihor rybakihor reopened this Jul 5, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant