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));
 }
Example #2
0
 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;
 }