Skip to content

Commit

Permalink
Support Huawei driver upgrade from grizzly to havana
Browse files Browse the repository at this point in the history
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
  • Loading branch information
zhangchao010 committed Oct 9, 2013
1 parent b00e307 commit 0c9dc5d
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 8 deletions.
6 changes: 4 additions & 2 deletions cinder/volume/drivers/huawei/huawei_t.py
Expand Up @@ -106,7 +106,8 @@ def initialize_connection(self, volume, connector):
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)
Expand Down Expand Up @@ -324,7 +325,8 @@ def terminate_connection(self, volume, connector, **kwargs):

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)

Expand Down
27 changes: 21 additions & 6 deletions cinder/volume/drivers/huawei/ssh_common.py
Expand Up @@ -892,7 +892,7 @@ def map_volume(self, host_id, volume_id):

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
Expand All @@ -902,6 +902,14 @@ def add_host(self, host_name):
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:
Expand Down Expand Up @@ -1003,13 +1011,20 @@ def change_lun_ctr(self, lun_id, ctr):
'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)
Expand Down

0 comments on commit 0c9dc5d

Please sign in to comment.