Beispiel #1
0
 public function executeJobs($schedule = null)
 {
     if (!Mage::getStoreConfig('jobqueue/config/enabled')) {
         return;
     }
     if ($schedule) {
         $jobsRoot = Mage::getConfig()->getNode('crontab/jobs');
         $jobConfig = $jobsRoot->{$schedule->getJobCode()};
         $queue = $jobConfig->queue;
         if ($queue) {
             $this->setQueue($queue);
         }
     }
     $this->setupDJJob();
     try {
         $collection = Mage::getModel('jobqueue/job')->getCollection();
         $collection->addFieldToFilter('queue', array('eq' => $this->getQueue()))->addFieldToFilter('run_at', array(array('null' => true), array('lteq' => now())))->addFieldToFilter(array('locked_at', 'locked_by'), array(array('locked_at', 'null' => true), array('locked_by', 'eq' => $this->workerName)))->addFieldToFilter('failed_at', array('null' => true))->addFieldToFilter('attempts', array('lt' => (int) Mage::getStoreConfig('jobqueue/config/max_attempts')));
         // randomly order to prevent lock contention among workers
         $collection->getSelect()->order(new Zend_Db_Expr('RAND()'));
         $collection->load();
         foreach ($collection as $row) {
             $job = new DJJob($this->workerName, $row->getId(), array("max_attempts" => Mage::getStoreConfig('jobqueue/config/max_attempts')));
             if ($job->acquireLock()) {
                 $job->run();
             }
         }
     } catch (Exception $e) {
         Mage::logException($e);
     }
 }