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_v3 = 'SYMMETRIX-+-000197200056'
|
||||
port_group = 'OS-portgroup-PG'
|
||||
port_group_instance = {'ElementName': 'OS-portgroup-PG'}
|
||||
lunmaskctrl_id = (
|
||||
'SYMMETRIX+000195900551+OS-fakehost-gold-I-MV')
|
||||
lunmaskctrl_name = (
|
||||
@ -8304,6 +8305,57 @@ class VMAXMaskingTest(test.TestCase):
|
||||
self.assertIsNone(sgFromMvInstanceName)
|
||||
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):
|
||||
def setUp(self):
|
||||
|
@ -2814,10 +2814,10 @@ class VMAXMasking(object):
|
||||
self._get_port_group_from_masking_view(
|
||||
conn, maskingViewName, storageSystemName))
|
||||
if portGroupInstanceName is None:
|
||||
LOG.error(_LE(
|
||||
"Cannot get port group from masking view: "
|
||||
"%(maskingViewName)s. "),
|
||||
{'maskingViewName': maskingViewName})
|
||||
errorMessage = ("Cannot get port group from masking view: "
|
||||
"%(maskingViewName)s." %
|
||||
{'maskingViewName': maskingViewName})
|
||||
LOG.error(errorMessage)
|
||||
else:
|
||||
try:
|
||||
portGroupInstance = (
|
||||
@ -2825,8 +2825,8 @@ class VMAXMasking(object):
|
||||
portGroupName = (
|
||||
portGroupInstance['ElementName'])
|
||||
except Exception:
|
||||
LOG.error(_LE(
|
||||
"Cannot get port group name."))
|
||||
errorMessage = ("Cannot get port group name.")
|
||||
LOG.error(errorMessage)
|
||||
return portGroupName, errorMessage
|
||||
|
||||
@coordination.synchronized('emc-sg-'
|
||||
|
Loading…
Reference in New Issue
Block a user