From 748fc29254785d22c4623c0e5ec9bd71f0ef6365 Mon Sep 17 00:00:00 2001 From: Helen Walsh Date: Thu, 12 Mar 2020 15:30:20 +0000 Subject: [PATCH] PowerMax Driver - Legacy volume not found The equals check is too stringent for legacy pre Pike volumes after an upgrade. Pre PIke is SMI-S, Pike and later is REST and identifier name is persisted differently. Change-Id: I963ad219c2e3b1c9c5edaa8f7e0d3dea911ecd8e Closes-Bug: #1867163 (cherry picked from commit 4296ea130e1055d608b11b44cbff21358804ae7d) (cherry picked from commit b2d61850b0826ec258e8c645ac6c8a9bb71a3966) (cherry picked from commit db58c6c9026265737667391a7b833076ce210639) (cherry picked from commit 917e0b0cef91686787fe7cf4185cd4efb03d6361) --- .../volume/drivers/dell_emc/vmax/test_vmax.py | 29 +++++++++++++++++++ cinder/volume/drivers/dell_emc/vmax/fc.py | 3 +- cinder/volume/drivers/dell_emc/vmax/iscsi.py | 3 +- cinder/volume/drivers/dell_emc/vmax/rest.py | 19 +++++++----- .../bug-fix-1867163-27afa39ac77b9e15.yaml | 5 ++++ 5 files changed, 50 insertions(+), 9 deletions(-) create mode 100644 releasenotes/notes/bug-fix-1867163-27afa39ac77b9e15.yaml diff --git a/cinder/tests/unit/volume/drivers/dell_emc/vmax/test_vmax.py b/cinder/tests/unit/volume/drivers/dell_emc/vmax/test_vmax.py index 563e3dee135..22171432ddd 100644 --- a/cinder/tests/unit/volume/drivers/dell_emc/vmax/test_vmax.py +++ b/cinder/tests/unit/volume/drivers/dell_emc/vmax/test_vmax.py @@ -685,6 +685,15 @@ class VMAXCommonData(object): headroom = {"headroom": [{"headroomCapacity": 20348.29}]} + volume_details_legacy = {'cap_gb': 2, + 'num_of_storage_groups': 1, + 'volumeId': device_id, + 'volume_identifier': test_volume.id, + 'wwn': volume_wwn, + 'snapvx_target': 'false', + 'snapvx_source': 'false', + 'storageGroupId': []} + class FakeLookupService(object): def get_device_mapping_from_network(self, initiator_wwns, target_wwns): @@ -2953,6 +2962,26 @@ class VMAXRestTest(test.TestCase): self.assertEqual(self.rest.get_vmax_model(self.data.array), reference) + def test_check_volume_device_id_legacy_case(self): + element_name = self.utils.get_volume_element_name( + self.data.test_volume.id) + with mock.patch.object(self.rest, 'get_volume', + return_value=self.data.volume_details_legacy): + found_dev_id = self.rest.check_volume_device_id( + self.data.array, self.data.device_id, element_name) + self.assertEqual(self.data.device_id, found_dev_id) + + def test_check_volume_device_id_legacy_case_no_match(self): + element_name = self.utils.get_volume_element_name( + self.data.test_volume.id) + volume_details_no_match = deepcopy(self.data.volume_details_legacy) + volume_details_no_match['volume_identifier'] = 'no_match' + with mock.patch.object(self.rest, 'get_volume', + return_value=volume_details_no_match): + found_dev_id = self.rest.check_volume_device_id( + self.data.array, self.data.device_id, element_name) + self.assertIsNone(found_dev_id) + class VMAXProvisionTest(test.TestCase): def setUp(self): diff --git a/cinder/volume/drivers/dell_emc/vmax/fc.py b/cinder/volume/drivers/dell_emc/vmax/fc.py index 66f52ee7927..a81658376cd 100644 --- a/cinder/volume/drivers/dell_emc/vmax/fc.py +++ b/cinder/volume/drivers/dell_emc/vmax/fc.py @@ -101,9 +101,10 @@ class VMAXFCDriver(san.SanDriver, driver.FibreChannelDriver): - Fix for initiator retrieval and short hostname unmapping (bugs #1783855 #1783867) - Fix for HyperMax OS Upgrade Bug (bug #1790141) + 3.1.2 - Legacy volume not found fix (#1867163) """ - VERSION = "3.1.1" + VERSION = "3.1.2" # ThirdPartySystems wiki CI_WIKI_NAME = "EMC_VMAX_CI" diff --git a/cinder/volume/drivers/dell_emc/vmax/iscsi.py b/cinder/volume/drivers/dell_emc/vmax/iscsi.py index 1656330ea0a..21ae7b3f378 100644 --- a/cinder/volume/drivers/dell_emc/vmax/iscsi.py +++ b/cinder/volume/drivers/dell_emc/vmax/iscsi.py @@ -106,9 +106,10 @@ class VMAXISCSIDriver(san.SanISCSIDriver): - Fix for initiator retrieval and short hostname unmapping (bugs #1783855 #1783867) - Fix for HyperMax OS Upgrade Bug (bug #1790141) + 3.1.2 - Legacy volume not found fix (#1867163) """ - VERSION = "3.1.1" + VERSION = "3.1.2" # ThirdPartySystems wiki CI_WIKI_NAME = "EMC_VMAX_CI" diff --git a/cinder/volume/drivers/dell_emc/vmax/rest.py b/cinder/volume/drivers/dell_emc/vmax/rest.py index 5c0055a13e7..f60b884fc36 100644 --- a/cinder/volume/drivers/dell_emc/vmax/rest.py +++ b/cinder/volume/drivers/dell_emc/vmax/rest.py @@ -754,14 +754,19 @@ class VMAXRest(object): LOG.debug('Element name = %(en)s, Vol identifier = %(vi)s, ' 'Device id = %(di)s, vol details = %(vd)s', {'en': element_name, 'vi': vol_identifier, - 'di': device_id, 'vd': vol_details}) - if vol_identifier == element_name: - found_device_id = device_id - elif name_id: - # This may be host-assisted migration case - element_name = self.utils.get_volume_element_name(name_id) - if vol_identifier == element_name: + 'di': device_id}) + if vol_identifier: + if vol_identifier in element_name: found_device_id = device_id + if vol_identifier != element_name: + LOG.debug("Device %(di)s is a legacy volume created " + "using SMI-S.", + {'di': device_id}) + elif name_id: + # This may be host-assisted migration case + element_name = self.utils.get_volume_element_name(name_id) + if vol_identifier == element_name: + found_device_id = device_id return found_device_id def add_vol_to_sg(self, array, storagegroup_name, device_id, extra_specs): diff --git a/releasenotes/notes/bug-fix-1867163-27afa39ac77b9e15.yaml b/releasenotes/notes/bug-fix-1867163-27afa39ac77b9e15.yaml new file mode 100644 index 00000000000..f10eb92d9ac --- /dev/null +++ b/releasenotes/notes/bug-fix-1867163-27afa39ac77b9e15.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + PowerMax Driver - Issue with upgrades from pre Pike to Pike and later. + The device is not found when trying to snapshot a legacy volume.