Merge "3PAR: Fix terminate_connection when failed over" into driverfixes/mitaka
This commit is contained in:
commit
a87c18c7aa
|
@ -2690,6 +2690,30 @@ class HPE3PARBaseDriver(object):
|
||||||
|
|
||||||
mock_client.assert_has_calls(expected)
|
mock_client.assert_has_calls(expected)
|
||||||
|
|
||||||
|
def test_terminate_connection_from_primary_when_failed_over(self):
|
||||||
|
# setup_mock_client drive with default configuration
|
||||||
|
# and return the mock HTTP 3PAR client
|
||||||
|
mock_client = self.setup_driver()
|
||||||
|
mock_client.getHostVLUNs.side_effect = hpeexceptions.HTTPNotFound(
|
||||||
|
error={'desc': 'The host does not exist.'})
|
||||||
|
|
||||||
|
with mock.patch.object(hpecommon.HPE3PARCommon,
|
||||||
|
'_create_client') as mock_create_client:
|
||||||
|
mock_create_client.return_value = mock_client
|
||||||
|
|
||||||
|
self.driver._active_backend_id = 'some_id'
|
||||||
|
self.driver.terminate_connection(
|
||||||
|
self.volume,
|
||||||
|
self.connector,
|
||||||
|
force=True)
|
||||||
|
|
||||||
|
# When the volume is still attached to the primary array after a
|
||||||
|
# fail-over, there should be no call to delete the VLUN(s) or the
|
||||||
|
# host. We can assert these methods were not called to make sure
|
||||||
|
# the proper exceptions are being raised.
|
||||||
|
self.assertEqual(0, mock_client.deleteVLUN.call_count)
|
||||||
|
self.assertEqual(0, mock_client.deleteHost.call_count)
|
||||||
|
|
||||||
def test_extend_volume(self):
|
def test_extend_volume(self):
|
||||||
# setup_mock_client drive with default configuration
|
# setup_mock_client drive with default configuration
|
||||||
# and return the mock HTTP 3PAR client
|
# and return the mock HTTP 3PAR client
|
||||||
|
|
|
@ -237,10 +237,11 @@ class HPE3PARCommon(object):
|
||||||
3.0.18.3 - Fix delete volume when online clone is active. bug #1349639.
|
3.0.18.3 - Fix delete volume when online clone is active. bug #1349639.
|
||||||
(backported from Newton)
|
(backported from Newton)
|
||||||
3.0.18.4 - Fix concurrent snapshot delete conflict. bug #1600104
|
3.0.18.4 - Fix concurrent snapshot delete conflict. bug #1600104
|
||||||
|
3.0.19 - Fix terminate connection on failover
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
VERSION = "3.0.18.4"
|
VERSION = "3.0.19"
|
||||||
|
|
||||||
stats = {}
|
stats = {}
|
||||||
|
|
||||||
|
@ -2607,12 +2608,26 @@ class HPE3PARCommon(object):
|
||||||
return
|
return
|
||||||
except hpeexceptions.HTTPNotFound as e:
|
except hpeexceptions.HTTPNotFound as e:
|
||||||
if 'host does not exist' in e.get_description():
|
if 'host does not exist' in e.get_description():
|
||||||
# use the wwn to see if we can find the hostname
|
# If a host is failed-over, we want to allow the detach to
|
||||||
hostname = self._get_3par_hostname_from_wwn_iqn(wwn, iqn)
|
# 'succeed' when it cannot find the host. We can simply
|
||||||
# no 3par host, re-throw
|
# return out of the terminate connection in order for things
|
||||||
if hostname is None:
|
# to be updated correctly.
|
||||||
LOG.error(_LE("Exception: %s"), e)
|
if self._active_backend_id:
|
||||||
raise
|
LOG.warning(_LW("Because the host is currently in a "
|
||||||
|
"failed-over state, the volume will not "
|
||||||
|
"be properly detached from the primary "
|
||||||
|
"array. The detach will be considered a "
|
||||||
|
"success as far as Cinder is concerned. "
|
||||||
|
"The volume can now be attached to the "
|
||||||
|
"secondary target."))
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
# use the wwn to see if we can find the hostname
|
||||||
|
hostname = self._get_3par_hostname_from_wwn_iqn(wwn, iqn)
|
||||||
|
# no 3par host, re-throw
|
||||||
|
if hostname is None:
|
||||||
|
LOG.error(_LE("Exception: %s"), e)
|
||||||
|
raise
|
||||||
else:
|
else:
|
||||||
# not a 'host does not exist' HTTPNotFound exception, re-throw
|
# not a 'host does not exist' HTTPNotFound exception, re-throw
|
||||||
LOG.error(_LE("Exception: %s"), e)
|
LOG.error(_LE("Exception: %s"), e)
|
||||||
|
|
Loading…
Reference in New Issue