From: zhangchao010 Date: Wed, 9 Oct 2013 07:37:49 +0000 (+0800) Subject: Support Huawei driver upgrade from grizzly to havana X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=0c9dc5d0e01576969f09edc0c9c72a2aa91b248a;p=openstack-build%2Fcinder-build.git Support Huawei driver upgrade from grizzly to havana To make the driver upgrade from grizzly to higher versions, the patch checks the old host name firstly when creating and deleting host in Huawei storage system. If the old host name exists: *get and use it directly when adding host. *delete it directly when deleting host. Closes-bug 1237189 Change-Id: I82a9dbc1ef0bb0b91771afea4aadec5afe65eecf --- diff --git a/cinder/volume/drivers/huawei/huawei_t.py b/cinder/volume/drivers/huawei/huawei_t.py index fd968cc21..7a6f79145 100644 --- a/cinder/volume/drivers/huawei/huawei_t.py +++ b/cinder/volume/drivers/huawei/huawei_t.py @@ -106,7 +106,8 @@ class HuaweiTISCSIDriver(driver.ISCSIDriver): self._get_iscsi_params(connector['initiator']) # First, add a host if not added before. - host_id = self.common.add_host(connector['host']) + host_id = self.common.add_host(connector['host'], + connector['initiator']) # Then, add the iSCSI port to the host. self._add_iscsi_port_to_host(host_id, connector) @@ -324,7 +325,8 @@ class HuaweiTISCSIDriver(driver.ISCSIDriver): self.common._update_login_info() host_id = self.common.remove_map(volume['provider_location'], - connector['host']) + connector['host'], + connector['initiator']) if not self.common._get_host_map_info(host_id): self._remove_iscsi_port(host_id, connector) diff --git a/cinder/volume/drivers/huawei/ssh_common.py b/cinder/volume/drivers/huawei/ssh_common.py index b6e85d002..f83575053 100644 --- a/cinder/volume/drivers/huawei/ssh_common.py +++ b/cinder/volume/drivers/huawei/ssh_common.py @@ -892,7 +892,7 @@ class TseriesCommon(): return hostlun_id - def add_host(self, host_name): + def add_host(self, host_name, initiator=None): """Create a host and add it to hostgroup.""" # Create an OpenStack hostgroup if not created before. hostgroup_name = HOST_GROUP_NAME @@ -902,6 +902,14 @@ class TseriesCommon(): self.hostgroup_id = self._get_hostgroup_id(hostgroup_name) # Create a host and add it to the hostgroup. + # Check the old host name to support the upgrade from grizzly to + # higher versions. + if initiator: + old_host_name = HOST_NAME_PREFIX + str(hash(initiator)) + old_host_id = self._get_host_id(old_host_name, self.hostgroup_id) + if old_host_id is not None: + return old_host_id + host_name = HOST_NAME_PREFIX + host_name host_id = self._get_host_id(host_name, self.hostgroup_id) if host_id is None: @@ -1003,13 +1011,20 @@ class TseriesCommon(): 'LUN %s' % lun_id, cli_cmd, out) - def remove_map(self, volume_id, host_name): + def remove_map(self, volume_id, host_name, initiator=None): """Remove host map.""" - host_name = HOST_NAME_PREFIX + host_name - host_id = self._get_host_id(host_name, self.hostgroup_id) + # Check the old host name to support the upgrade from grizzly to + # higher versions. + host_id = None + if initiator: + old_host_name = HOST_NAME_PREFIX + str(hash(initiator)) + host_id = self._get_host_id(old_host_name, self.hostgroup_id) if host_id is None: - LOG.error(_('remove_map: Host %s does not exist.') % host_name) - raise exception.HostNotFound(host=host_name) + host_name = HOST_NAME_PREFIX + host_name + host_id = self._get_host_id(host_name, self.hostgroup_id) + if host_id is None: + LOG.error(_('remove_map: Host %s does not exist.') % host_name) + raise exception.HostNotFound(host=host_name) if not self._check_volume_created(volume_id): LOG.error(_('remove_map: Volume %s does not exist.') % volume_id)