Closed
Description
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