public static function abortDbBatchJob(BatchJob $dbBatchJob, $force = false) { // No need to abort finished job if (in_array($dbBatchJob->getStatus(), BatchJobPeer::getClosedStatusList())) { if ($force) { $dbBatchJob->setExecutionStatus(BatchJobExecutionStatus::ABORTED); $dbBatchJob->save(); } return $dbBatchJob; } $lockObject = $dbBatchJob->getBatchJobLock(); if (is_null($lockObject)) { KalturaLog::err("Batch job [" . $dbBatchJob->getId() . "] doesn't have a lock object and can't be deleted. Status (" . $dbBatchJob->getStatus() . ")"); return $dbBatchJob; } // Update status $con = Propel::getConnection(); $update = new Criteria(); $update->add(BatchJobLockPeer::STATUS, BatchJob::BATCHJOB_STATUS_ABORTED); $update->add(BatchJobLockPeer::VERSION, $lockObject->getVersion() + 1); $updateCondition = new Criteria(); $updateCondition->add(BatchJobLockPeer::ID, $lockObject->getId(), Criteria::EQUAL); $updateCondition->add(BatchJobLockPeer::VERSION, $lockObject->getVersion(), Criteria::EQUAL); $updateCondition->add(BatchJobLockPeer::SCHEDULER_ID, null, Criteria::ISNULL); $affectedRows = BasePeer::doUpdate($updateCondition, $update, $con); if ($affectedRows) { $dbBatchJob->setExecutionStatus(BatchJobExecutionStatus::ABORTED); $dbBatchJob = self::updateBatchJob($dbBatchJob, BatchJob::BATCHJOB_STATUS_ABORTED); } else { $dbBatchJob->setExecutionStatus(BatchJobExecutionStatus::ABORTED); $dbBatchJob->save(); } self::abortChildJobs($dbBatchJob); return $dbBatchJob; }
public function updatedJob(BatchJob $dbBatchJob) { $dbBatchJobLock = $dbBatchJob->getBatchJobLock(); try { if ($dbBatchJob->getStatus() == BatchJob::BATCHJOB_STATUS_FAILED || $dbBatchJob->getStatus() == BatchJob::BATCHJOB_STATUS_FATAL) { kJobsManager::abortChildJobs($dbBatchJob); } $jobType = $dbBatchJob->getJobType(); switch ($jobType) { case BatchJobType::IMPORT: $dbBatchJob = $this->updatedImport($dbBatchJob, $dbBatchJob->getData()); break; case BatchJobType::EXTRACT_MEDIA: $dbBatchJob = $this->updatedExtractMedia($dbBatchJob, $dbBatchJob->getData()); break; case BatchJobType::CONVERT: $dbBatchJob = $this->updatedConvert($dbBatchJob, $dbBatchJob->getData()); break; case BatchJobType::POSTCONVERT: $dbBatchJob = $this->updatedPostConvert($dbBatchJob, $dbBatchJob->getData()); break; case BatchJobType::BULKUPLOAD: $dbBatchJob = $this->updatedBulkUpload($dbBatchJob, $dbBatchJob->getData()); break; case BatchJobType::CONVERT_PROFILE: $dbBatchJob = $this->updatedConvertProfile($dbBatchJob, $dbBatchJob->getData()); break; case BatchJobType::BULKDOWNLOAD: $dbBatchJob = $this->updatedBulkDownload($dbBatchJob, $dbBatchJob->getData()); break; case BatchJobType::PROVISION_PROVIDE: $dbBatchJob = $this->updatedProvisionProvide($dbBatchJob, $dbBatchJob->getData()); break; case BatchJobType::PROVISION_DELETE: $dbBatchJob = $this->updatedProvisionDelete($dbBatchJob, $dbBatchJob->getData()); break; case BatchJobType::CONVERT_COLLECTION: $dbBatchJob = $this->updatedConvertCollection($dbBatchJob, $dbBatchJob->getData()); break; case BatchJobType::STORAGE_EXPORT: $dbBatchJob = $this->updatedStorageExport($dbBatchJob, $dbBatchJob->getData()); break; case BatchJobType::MOVE_CATEGORY_ENTRIES: $dbBatchJob = $this->updatedMoveCategoryEntries($dbBatchJob, $dbBatchJob->getData()); break; case BatchJobType::STORAGE_DELETE: $dbBatchJob = $this->updatedStorageDelete($dbBatchJob, $dbBatchJob->getData()); break; case BatchJobType::CAPTURE_THUMB: $dbBatchJob = $this->updatedCaptureThumb($dbBatchJob, $dbBatchJob->getData()); break; case BatchJobType::DELETE_FILE: $dbBatchJob = $this->updatedDeleteFile($dbBatchJob, $dbBatchJob->getData()); break; case BatchJobType::INDEX: $dbBatchJob = $this->updatedIndex($dbBatchJob, $dbBatchJob->getData()); break; case BatchJobType::COPY: $dbBatchJob = $this->updatedCopy($dbBatchJob, $dbBatchJob->getData()); break; case BatchJobType::DELETE: $dbBatchJob = $this->updatedDelete($dbBatchJob, $dbBatchJob->getData()); break; case BatchJobType::CONCAT: $dbBatchJob = $this->updatedConcat($dbBatchJob, $dbBatchJob->getData()); break; case BatchJobType::CONVERT_LIVE_SEGMENT: $dbBatchJob = $this->updatedConvertLiveSegment($dbBatchJob, $dbBatchJob->getData()); break; case BatchJobType::LIVE_REPORT_EXPORT: $dbBatchJob = $this->updatedLiveReportExport($dbBatchJob, $dbBatchJob->getData()); break; default: break; } if ($dbBatchJob->getStatus() == BatchJob::BATCHJOB_STATUS_RETRY) { if ($dbBatchJobLock && $dbBatchJobLock->getExecutionAttempts() >= BatchJobLockPeer::getMaxExecutionAttempts($jobType)) { $dbBatchJob = kJobsManager::updateBatchJob($dbBatchJob, BatchJob::BATCHJOB_STATUS_FAILED); } } if (in_array($dbBatchJob->getStatus(), BatchJobPeer::getClosedStatusList())) { $jobEntry = $dbBatchJob->getEntry(); if ($jobEntry && $jobEntry->getMarkedForDeletion()) { myEntryUtils::deleteEntry($jobEntry, null, true); } } } catch (Exception $ex) { self::alert($dbBatchJob, $ex); KalturaLog::err("Error:" . $ex->getMessage()); } return true; }
public static function updateLockObject(BatchJob $batchJob, PropelPDO $con = null) { $batchJobLock = $batchJob->getBatchJobLock(); if ($batchJobLock === null) { KalturaLog::info("Lock object wasn't found for Batch Job " . $batchJob->getId()); return; } self::commonLockObjectUpdate($batchJob, $batchJobLock); // Don't add save batch job lock, it's done automatically by the save of the batch job! $result = array_intersect(self::$LOCK_AFFECTED_BY_COLUMNS_NAMES, $batchJob->getModifiedColumns()); if (count($result) > 0) { $version = $batchJobLock->getVersion() + 1; // update $batchJobLock->setVersion($version); // update lock info $lockInfo = $batchJob->getLockInfo(); $lockInfo->setLockVersion($version); $batchJob->setLockInfo($lockInfo); } }