Пример #1
0
 public function ReqestsManager()
 {
     // position queue semaphore
     $this->_positionQueue = new Mutex();
     $this->_positionQueue->init($this->_posQId);
     // request sending queue semaphore
     $this->_requestQueue = new Mutex();
     $this->_requestQueue->init($this->_reqQid);
 }
Пример #2
0
 public function send_update($etva_node, $all = false, $shared = true)
 {
     $mutex = new Mutex();
     $mutex->init(self::MUTEX_UPDATE_ID);
     $mutex->acquire();
     /*
      * update other nodes..... storages
      *
      */
     $etva_cluster = $etva_node->getEtvaCluster();
     $bulk_responses = array();
     $bulk_response_dtable = array();
     if ($shared) {
         if ($all) {
             $bulk_responses = $etva_cluster->soapSend(self::GET_SYNC_LOGICALVOLUMES, array('force' => 1));
         } else {
             $bulk_responses = $etva_cluster->soapSend(self::GET_SYNC_LOGICALVOLUMES, array('force' => 1), $etva_node);
         }
         $bulk_response_dtable = $etva_cluster->soapSend(self::GET_SYNC_DEVICESTABLE);
     } else {
         $node_id = $etva_node->getId();
         $bulk_responses[$node_id] = $etva_node->soapSend(self::GET_SYNC_LOGICALVOLUMES, array('force' => 1));
         $bulk_response_dtable[$node_id] = $etva_node->soapSend(self::GET_SYNC_DEVICESTABLE);
     }
     $errors = array();
     foreach ($bulk_responses as $node_id => $node_response) {
         if ($node_response['success']) {
             //response received ok
             $node = EtvaNodePeer::retrieveByPK($node_id);
             $dtable = array();
             $response_dtable = (array) $bulk_response_dtable[$node_id];
             if ($response_dtable['success']) {
                 $dtable = (array) $response_dtable['response'];
             }
             //try initialize data from response
             $node_init = $this->initialize($node, (array) $node_response['response'], $dtable, $bulk_response_dtable);
             if (!$node_init['success']) {
                 $errors[$node_id] = $node_init;
             } else {
                 //notify system log
                 $message = Etva::getLogMessage(array(), EtvaLogicalvolumePeer::_OK_SOAPREFRESH_);
                 sfContext::getInstance()->getEventDispatcher()->notify(new sfEvent($node_response['agent'], 'event.log', array('message' => $message)));
             }
         } else {
             //response not received
             $message = Etva::getLogMessage(array('info' => $node_response['info']), EtvaLogicalvolumePeer::_ERR_SOAPREFRESH_);
             sfContext::getInstance()->getEventDispatcher()->notify(new sfEvent($node_response['agent'], 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR)));
         }
     }
     $mutex->release();
     return $errors;
 }