def extend_hypermetro(self, hypermetro_id, new_size): LOG.info('Extend hypermetro pair %s', hypermetro_id) metro_info = self.remote_cli.get_hypermetro_by_id(hypermetro_id) metrogroup = None if metro_info['ISINCG'] == 'true': cg_id = metro_info['CGID'] metrogroup = huawei_utils.get_hypermetro_group( self.local_cli, cg_id) if metrogroup: self._stop_consistencygroup_if_need(metrogroup) elif ((metro_info['HEALTHSTATUS'] == constants.METRO_HEALTH_NORMAL) and metro_info['RUNNINGSTATUS'] in ( constants.METRO_RUNNING_NORMAL, constants.METRO_RUNNING_SYNC)): self.local_cli.stop_hypermetro(hypermetro_id) try: self.remote_cli.extend_lun(metro_info['LOCALOBJID'], new_size) self.local_cli.extend_lun(metro_info['REMOTEOBJID'], new_size) finally: if metrogroup: self.local_cli.sync_metrogroup(metrogroup['ID']) else: self.local_cli.sync_hypermetro(hypermetro_id)
def add_hypermetro_to_group(self, group_id, metro_id): metrogroup = huawei_utils.get_hypermetro_group( self.local_cli, group_id) if not metrogroup: msg = _('Hypermetro group %s to not exist.') % group_id LOG.error(msg) raise exception.VolumeBackendAPIException(data=msg) self._stop_consistencygroup_if_need(metrogroup) self._stop_hypermetro_if_need(metro_id) self.local_cli.add_metro_to_metrogroup(metrogroup['ID'], metro_id) self.local_cli.sync_metrogroup(metrogroup['ID'])
def delete_consistencygroup(self, group_id, volumes): LOG.info("Delete hypermetro consistency group %s.", group_id) metrogroup = huawei_utils.get_hypermetro_group(self.local_cli, group_id) if not metrogroup: LOG.warning('Hypermetro group %s to delete not exist.', group_id) return self._stop_consistencygroup_if_need(metrogroup) self._remove_volume_from_metrogroup(volumes, metrogroup['ID']) self.local_cli.delete_metrogroup(metrogroup['ID'])
def update_consistencygroup(self, group_id, add_volumes, remove_volumes): LOG.info("Update hypermetro consistency group %s.", group_id) metrogroup = huawei_utils.get_hypermetro_group( self.local_cli, group_id) if not metrogroup: msg = _('Hypermetro group %s to update not exist.') % group_id LOG.error(msg) raise exception.VolumeBackendAPIException(data=msg) self._stop_consistencygroup_if_need(metrogroup) self._add_volume_to_metrogroup(add_volumes, metrogroup['ID']) self._remove_volume_from_metrogroup(remove_volumes, metrogroup['ID']) self.local_cli.sync_metrogroup(metrogroup['ID'])