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
This commit is contained in:
Helen Walsh 2017-05-04 11:26:38 +01:00
parent 5a9cc940ed
commit b44f55c516
2 changed files with 58 additions and 6 deletions

View File

@ -293,6 +293,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 = (
@ -8325,6 +8326,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):

View File

@ -2816,10 +2816,10 @@ class VMAXMasking(object):
self._get_port_group_from_masking_view(
conn, maskingViewName, storageSystemName))
if portGroupInstanceName is None:
LOG.error(
"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 = (
@ -2827,8 +2827,8 @@ class VMAXMasking(object):
portGroupName = (
portGroupInstance['ElementName'])
except Exception:
LOG.error(
"Cannot get port group name.")
errorMessage = ("Cannot get port group name.")
LOG.error(errorMessage)
return portGroupName, errorMessage
@coordination.synchronized('emc-sg-'