protected function unserializeJob(array $row) { $job = new Job($row['id'], $row['execution_id'], $row['handler_type'], unserialize(BinaryData::decode($row['handler_data'])), new \DateTimeImmutable('@' . $row['created_at']), $row['retries'], $row['lock_owner']); $job->setExternalId($row['external_id']); if ($row['scheduled_at'] !== NULL) { $job->setScheduledAt(new \DateTimeImmutable('@' . $row['scheduled_at'], new \DateTimeZone('UTC'))); } if ($row['run_at'] !== NULL) { $job->setRunAt(new \DateTimeImmutable('@' . $row['run_at'], new \DateTimeZone('UTC'))); } if ($row['locked_at'] !== NULL) { $job->setLockedAt(new \DateTimeImmutable('@' . $row['locked_at'], new \DateTimeZone('UTC'))); } $job->setExceptionType($row['exception_type']); $job->setExceptionMessage($row['exception_message']); if ($row['exception_data'] !== NULL) { $job->setExceptionData(unserialize(BinaryData::decode($row['exception_data']))); } $locked = false; if ($row['lock_owner'] !== NULL && $row['locked_at'] !== NULL) { if ($row['locked_at'] > time() - $this->engine->getJobExecutor()->getLockTimeout()) { $locked = true; } } $job->setLocked($locked); return $job; }