/** * @param int $jobId * @param int $jobType * @param bool $force - forces retry even if the job is locked. * @return BatchJob */ public static function retryJob($jobId, $jobType, $force = false) { $dbBatchJob = BatchJobPeer::retrieveByPK($jobId); if ($dbBatchJob->getJobType() != $jobType) { throw new APIException(APIErrors::GET_EXCLUSIVE_JOB_WRONG_TYPE, $jobType, $dbBatchJob->getId()); } $dbBatchJob->setExecutionStatus(BatchJobExecutionStatus::NORMAL); // if not currently locked $dbBatchJobLock = $dbBatchJob->getBatchJobLock(); if ($dbBatchJobLock === null) { // retry of non locked entry $dbBatchJob = self::updateBatchJob($dbBatchJob, BatchJob::BATCHJOB_STATUS_RETRY); } elseif ($force) { // retry of scheduled entry $dbBatchJobLock->setExecutionAttempts(0); $dbBatchJobLock->setStatus(BatchJob::BATCHJOB_STATUS_RETRY); $dbBatchJobLock->setExpiration(time() + BatchJobLockPeer::getRetryInterval($jobType)); $dbBatchJob->setStatus(BatchJob::BATCHJOB_STATUS_RETRY); $dbBatchJob->save(); } return $dbBatchJob; }
private static function commonLockObjectUpdate(BatchJob $batchJob, BatchJobLock $batchJobLock) { $jobType = $batchJob->getJobType(); $batchJobLock->setStatus($batchJob->getStatus()); $batchJobLock->setObjectId($batchJob->getObjectId()); $batchJobLock->setObjectType($batchJob->getObjectType()); if ($batchJob->getStatus() == BatchJob::BATCHJOB_STATUS_RETRY || $batchJob->getStatus() == BatchJob::BATCHJOB_STATUS_ALMOST_DONE) { $batchJobLock->setStartAt(time() + BatchJobLockPeer::getRetryInterval($jobType)); } if ($batchJob->getLockInfo() != null) { $batchJobLock->setPriority($batchJob->getLockInfo()->getPriority()); $batchJobLock->setUrgency($batchJob->getLockInfo()->getUrgency()); $batchJobLock->setEstimatedEffort($batchJob->getLockInfo()->getEstimatedEffort()); $batchJobLock->setVersion($batchJob->getLockInfo()->getLockVersion()); } }