Exemplo n.º 1
0
 public function fix_consistency(EtvaNode $etva_node)
 {
     $ok = 1;
     $etva_lv = $this->etva_lv;
     $lv = $etva_lv->getLv();
     $etva_vg = $etva_lv->getEtvaVolumegroup();
     /*
             $vgInfo = $returned_object[EtvaLogicalvolume::VOLUMEGROUP_MAP];
             $vg_info = (array) $vgInfo;*/
     // removes logical volume
     $insert_id = $etva_lv->getId();
     $uuid = $etva_lv->getUuid();
     $lv_type = $etva_lv->getStorageType();
     $etva_lv->delete();
     // remove snapshots
     $snapshotsObject = $returned_object['SNAPSHOTS'];
     $snapshotsArray = (array) $snapshotsObject;
     foreach ($snapshotsArray as $slv_obj) {
         $slv = (array) $slv_obj;
         if ($etva_slv = $etva_node->retrieveLogicalvolumeByLv($slv[EtvaLogicalvolume::LV_MAP])) {
             $etva_slv->delete();
         }
     }
     /*$etva_vg->initData($vg_info);
       $etva_vg->save();*/
     if ($lv_type != EtvaLogicalvolume::STORAGE_TYPE_LOCAL_MAP) {
         /*
          * need syncronize device table
          */
         $this->sync_device_table_afterremove($etva_node);
         /*
          * if storage type not local send update to nodes...
          */
         $bulk_update = $this->send_update($etva_node);
         if (!empty($bulk_update)) {
             $errors = $this->get_missing_lv_devices();
             $msg_i18n = $errors ? $errors['message'] : sfContext::getInstance()->getI18N()->__(EtvaLogicalvolumePeer::_ERR_SHARED_INCONSISTENT_, array('%info%' => ' processResponse'));
             $response = array('success' => false, 'agent' => $etva_node->getName(), 'info' => $msg_i18n, 'msg_i18n' => $msg_i18n);
             $ok = 0;
         }
     }
     // Update volume groups
     $vg_va = new EtvaVolumegroup_VA($etva_vg);
     $bulk_update = $vg_va->send_update($etva_node);
     // TODO call fix consistency volume group
     if ($ok == 0) {
         $result = $response;
         $errors = $this->get_missing_lv_devices();
         if ($errors) {
             $message = $errors['message'];
             sfContext::getInstance()->getEventDispatcher()->notify(new sfEvent($etva_node->getName(), 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR)));
             return array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $message, 'action' => 'reload', 'info' => $message);
         } else {
             $message = Etva::getLogMessage(array('name' => $lv, 'info' => $response['info']), $msg_err_type);
             $msg_i18n = sfContext::getInstance()->getI18N()->__($msg_err_type, array('%name%' => $lv, '%info%' => $response['info']));
             $result['error'] = $msg_i18n;
             sfContext::getInstance()->getEventDispatcher()->notify(new sfEvent($response['agent'], 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR)));
             return $result;
         }
     } else {
         //notify system log
         $message = Etva::getLogMessage(array('name' => $lv), $msg_ok_type);
         $msg_i18n = sfContext::getInstance()->getI18N()->__($msg_ok_type, array('%name%' => $lv));
         sfContext::getInstance()->getEventDispatcher()->notify(new sfEvent($etva_node->getName(), 'event.log', array('message' => $message)));
         $result = array('success' => true, 'agent' => $response['agent'], 'response' => $msg_i18n, 'insert_id' => $insert_id, 'uuid' => $uuid);
         return $result;
     }
 }