Skip to content

BatchesController missing check for existence of batch #1419

Closed
@Crmteam-IVG

Description

@Crmteam-IVG

Horizon Version

5.24.2

Laravel Version

11.2.0

PHP Version

8.3.4

Redis Driver

PhpRedis

Redis Version

6.0.2

Database Driver & Version

No response

Description

If you try to access a batch that is not existent (in the database) or call any action like retry the xhr response is a 500 (Attempt to read property "failedJobIds" on null).

The batch retrieval checks for the existence before calling toBatch

public function find(string $batchId)
{
        $batch = $this->connection->table($this->table)
                            ->useWritePdo()
                            ->where('id', $batchId)
                            ->first();

        if ($batch) {
            return $this->toBatch($batch);
        }
}

but show or retry just assume the batch is existent.

public function show($id)
{
        $batch = $this->batches->find($id);

        $failedJobs = app(JobRepository::class)
                        ->getJobs($batch->failedJobIds);

        return [
            'batch' => $batch,
            'failedJobs' => $failedJobs,
        ];
}

public function retry($id)
{
        $batch = $this->batches->find($id);

        app(JobRepository::class)
                        ->getJobs($batch->failedJobIds)
                        ->reject(function ($job) {
                            $payload = json_decode($job->payload);

                            return isset($payload->retry_of);
                        })->each(function ($job) {
                            dispatch(new RetryFailedJob($job->id));
                        });
}

Steps To Reproduce

Access any batch url via horizon that is not existent.

i.e:
/horizon/batches/9bc9d622-c2d0-45ca-aa13-4e7dfb1efed0

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions