master

laravel/framework

Last updated at: 29/12/2023 09:24

RetryBatchCommand.php

TLDR

The file RetryBatchCommand.php is a class file that defines the RetryBatchCommand class in the Illuminate\Queue\Console namespace. It extends the Command class and implements the Isolatable interface. It provides a command for retrying failed jobs within a batch in a queueing system.

Methods

handle

Executes the console command. It retrieves the batch with the given ID from the batch repository and retries its failed jobs by calling the queue:retry command for each failed job. If the batch is not found or does not contain any failed jobs, an error message is displayed. Upon completion, an info message is displayed.

isolatableId

Returns the custom mutex name for an isolated command. It retrieves the id argument provided in the command signature.

<?php

namespace Illuminate\Queue\Console;

use Illuminate\Bus\BatchRepository;
use Illuminate\Console\Command;
use Illuminate\Contracts\Console\Isolatable;
use Symfony\Component\Console\Attribute\AsCommand;

#[AsCommand(name: 'queue:retry-batch')]
class RetryBatchCommand extends Command implements Isolatable
{
    /**
     * The console command signature.
     *
     * @var string
     */
    protected $signature = 'queue:retry-batch {id : The ID of the batch whose failed jobs should be retried}';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Retry the failed jobs for a batch';

    /**
     * Execute the console command.
     *
     * @return int|null
     */
    public function handle()
    {
        $batch = $this->laravel[BatchRepository::class]->find($id = $this->argument('id'));

        if (! $batch) {
            $this->components->error("Unable to find a batch with ID [{$id}].");

            return 1;
        } elseif (empty($batch->failedJobIds)) {
            $this->components->error('The given batch does not contain any failed jobs.');

            return 1;
        }

        $this->components->info("Pushing failed queue jobs of the batch [$id] back onto the queue.");

        foreach ($batch->failedJobIds as $failedJobId) {
            $this->components->task($failedJobId, fn () => $this->callSilent('queue:retry', ['id' => $failedJobId]) == 0);
        }

        $this->newLine();
    }

    /**
     * Get the custom mutex name for an isolated command.
     *
     * @return string
     */
    public function isolatableId()
    {
        return $this->argument('id');
    }
}