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); }
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; }