VMAX driver - Rollback error on Live Migration
This patch fixes an issue where errorMessage is not getting reassigned
from None in the method ._get_port_group_name_from_mv., having the knock
on effect where errors are not being picked up in subsequent calls or
conditional checks.
Change-Id: I74a85aaa912a7f4c22abbf48f0a5d1bd4538c098
Closes-Bug: #1686174
(cherry picked from commit b44f55c516
)
This commit is contained in:
parent
01bede894b
commit
34850ce411
@ -292,6 +292,7 @@ class VMAXCommonData(object):
|
|||||||
storage_system = 'SYMMETRIX+000195900551'
|
storage_system = 'SYMMETRIX+000195900551'
|
||||||
storage_system_v3 = 'SYMMETRIX-+-000197200056'
|
storage_system_v3 = 'SYMMETRIX-+-000197200056'
|
||||||
port_group = 'OS-portgroup-PG'
|
port_group = 'OS-portgroup-PG'
|
||||||
|
port_group_instance = {'ElementName': 'OS-portgroup-PG'}
|
||||||
lunmaskctrl_id = (
|
lunmaskctrl_id = (
|
||||||
'SYMMETRIX+000195900551+OS-fakehost-gold-I-MV')
|
'SYMMETRIX+000195900551+OS-fakehost-gold-I-MV')
|
||||||
lunmaskctrl_name = (
|
lunmaskctrl_name = (
|
||||||
@ -8304,6 +8305,57 @@ class VMAXMaskingTest(test.TestCase):
|
|||||||
self.assertIsNone(sgFromMvInstanceName)
|
self.assertIsNone(sgFromMvInstanceName)
|
||||||
self.assertIsNotNone(msg)
|
self.assertIsNotNone(msg)
|
||||||
|
|
||||||
|
@mock.patch.object(
|
||||||
|
masking.VMAXMasking,
|
||||||
|
'_get_port_group_from_masking_view',
|
||||||
|
return_value=VMAXCommonData.port_group)
|
||||||
|
def test_get_port_group_name_from_mv_success(self, mock_pg_name):
|
||||||
|
masking = self.driver.common.masking
|
||||||
|
conn = self.fake_ecom_connection()
|
||||||
|
mv_name = self.data.lunmaskctrl_name
|
||||||
|
system_name = self.data.storage_system
|
||||||
|
|
||||||
|
conn.GetInstance = mock.Mock(
|
||||||
|
return_value=self.data.port_group_instance)
|
||||||
|
pg_name, err_msg = (
|
||||||
|
masking._get_port_group_name_from_mv(conn, mv_name, system_name))
|
||||||
|
|
||||||
|
self.assertIsNone(err_msg)
|
||||||
|
self.assertIsNotNone(pg_name)
|
||||||
|
|
||||||
|
@mock.patch.object(
|
||||||
|
masking.VMAXMasking,
|
||||||
|
'_get_port_group_from_masking_view',
|
||||||
|
return_value=None)
|
||||||
|
def test_get_port_group_name_from_mv_fail_1(self, mock_pg_name):
|
||||||
|
masking = self.driver.common.masking
|
||||||
|
conn = self.fake_ecom_connection()
|
||||||
|
mv_name = self.data.lunmaskctrl_name
|
||||||
|
system_name = self.data.storage_system
|
||||||
|
|
||||||
|
pg_name, err_msg = (
|
||||||
|
masking._get_port_group_name_from_mv(conn, mv_name, system_name))
|
||||||
|
|
||||||
|
self.assertIsNone(pg_name)
|
||||||
|
self.assertIsNotNone(err_msg)
|
||||||
|
|
||||||
|
@mock.patch.object(
|
||||||
|
masking.VMAXMasking,
|
||||||
|
'_get_port_group_from_masking_view',
|
||||||
|
return_value=VMAXCommonData.port_group)
|
||||||
|
def test_get_port_group_name_from_mv_fail_2(self, mock_pg_name):
|
||||||
|
masking = self.driver.common.masking
|
||||||
|
conn = self.fake_ecom_connection()
|
||||||
|
mv_name = self.data.lunmaskctrl_name
|
||||||
|
system_name = self.data.storage_system
|
||||||
|
|
||||||
|
conn.GetInstance = mock.Mock(return_value={})
|
||||||
|
pg_name, err_msg = (
|
||||||
|
masking._get_port_group_name_from_mv(conn, mv_name, system_name))
|
||||||
|
|
||||||
|
self.assertIsNone(pg_name)
|
||||||
|
self.assertIsNotNone(err_msg)
|
||||||
|
|
||||||
|
|
||||||
class VMAXFCTest(test.TestCase):
|
class VMAXFCTest(test.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
@ -2814,10 +2814,10 @@ class VMAXMasking(object):
|
|||||||
self._get_port_group_from_masking_view(
|
self._get_port_group_from_masking_view(
|
||||||
conn, maskingViewName, storageSystemName))
|
conn, maskingViewName, storageSystemName))
|
||||||
if portGroupInstanceName is None:
|
if portGroupInstanceName is None:
|
||||||
LOG.error(_LE(
|
errorMessage = ("Cannot get port group from masking view: "
|
||||||
"Cannot get port group from masking view: "
|
"%(maskingViewName)s." %
|
||||||
"%(maskingViewName)s. "),
|
{'maskingViewName': maskingViewName})
|
||||||
{'maskingViewName': maskingViewName})
|
LOG.error(errorMessage)
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
portGroupInstance = (
|
portGroupInstance = (
|
||||||
@ -2825,8 +2825,8 @@ class VMAXMasking(object):
|
|||||||
portGroupName = (
|
portGroupName = (
|
||||||
portGroupInstance['ElementName'])
|
portGroupInstance['ElementName'])
|
||||||
except Exception:
|
except Exception:
|
||||||
LOG.error(_LE(
|
errorMessage = ("Cannot get port group name.")
|
||||||
"Cannot get port group name."))
|
LOG.error(errorMessage)
|
||||||
return portGroupName, errorMessage
|
return portGroupName, errorMessage
|
||||||
|
|
||||||
@coordination.synchronized('emc-sg-'
|
@coordination.synchronized('emc-sg-'
|
||||||
|
Loading…
Reference in New Issue
Block a user