/** * @param \DelayedJobs\DelayedJob\Job $job Job that failed * @param string|\Throwable $message Message to store with the jbo * @param bool $burryJob Should the job be burried * @return bool|\DelayedJobs\DelayedJob\Job */ public function failed(Job $job, $message, $burryJob = false) { $maxRetries = $job->getMaxRetries(); $job->incrementRetries(); $status = $burryJob === true || $job->getRetries() >= $maxRetries ? Job::STATUS_BURRIED : Job::STATUS_FAILED; $job->setStatus($status)->setRunAt($this->_calculateRetryTime($job->getRetries()))->addHistory($message)->setTimeFailed(Time::now()); if ($job->getStatus() === Job::STATUS_FAILED) { $this->enqueue($job); } elseif ($job->getSequence() !== null) { $this->enqueueNextSequence($job); } else { $this->_persistToDatastore($job); } $this->dispatchEvent('DelayedJob.jobFailed', [$job, $message]); return $job; }