public static function getExpiredJobs() { $jobTypes = kPluginableEnumsManager::coreValues('BatchJobType'); $executionAttempts2jobTypes = array(); // Map between max execution attempts and job types foreach ($jobTypes as $jobType) { $executionAttempts = BatchJobLockPeer::getMaxExecutionAttempts($jobType); if (array_key_exists($executionAttempts, $executionAttempts2jobTypes)) { $executionAttempts2jobTypes[$executionAttempts][] = $jobType; } else { $executionAttempts2jobTypes[$executionAttempts] = array($jobType); } } // create query $c = new Criteria(); $c->add(BatchJobLockPeer::STATUS, BatchJob::BATCHJOB_STATUS_FATAL, Criteria::NOT_EQUAL); $c->add(BatchJobLockPeer::DC, kDataCenterMgr::getCurrentDcId()); // each DC should clean its own jobs // Query for each job type $batchJobLocks = array(); foreach ($executionAttempts2jobTypes as $execAttempts => $jobTypes) { $typedCrit = clone $c; $typedCrit->add(BatchJobLockPeer::EXECUTION_ATTEMPTS, $execAttempts, Criteria::GREATER_THAN); $typedCrit->add(BatchJobLockPeer::JOB_TYPE, $jobTypes, Criteria::IN); $typedJobs = BatchJobLockPeer::doSelect($typedCrit, myDbHelper::getConnection(myDbHelper::DB_HELPER_CONN_PROPEL2)); foreach ($typedJobs as $typedJob) { $batchJobLocks[$typedJob->getId()] = $typedJob; } } // get matching batch jobs return BatchJobPeer::retrieveByPKs(array_keys($batchJobLocks)); }
public static function postLockUpdate(kExclusiveLockKey $lockKey, array $exclusive_objects_ids, $con) { $batchJobs = BatchJobPeer::retrieveByPKs($exclusive_objects_ids); foreach ($batchJobs as $batchJob) { /* @var $batchJob BatchJob */ // Set history $uniqueId = new UniqueId(); $historyRecord = new kBatchHistoryData(); $historyRecord->setWorkerId($lockKey->getWorkerId()); $historyRecord->setSchedulerId($lockKey->getSchedulerId()); $historyRecord->setBatchIndex($lockKey->getBatchIndex()); $historyRecord->setHostName(isset($_SERVER["HOSTNAME"]) ? $_SERVER["HOSTNAME"] : gethostname()); $historyRecord->setSessionId((string) $uniqueId); $batchJob->addHistoryRecord($historyRecord); // Set fields $batchJob->setLastWorkerId($lockKey->getWorkerId()); $batchJob->setLastSchedulerId($lockKey->getSchedulerId()); // Set fields from batch job lock $lockInfo = $batchJob->getLockInfo(); $lockInfo->setLockVersion($lockInfo->getLockVersion() + 1); $batchJob->setLockInfo($lockInfo); $batchJob->save($con); } return $batchJobs; }