From a56256c3d8f95806a557a1a21db88c7058c11c8b Mon Sep 17 00:00:00 2001 From: Helen Walsh Date: Thu, 25 Mar 2021 12:57:02 +0000 Subject: [PATCH] PowerMax Driver - Fix for create snapshot Payload response change from REST means that the Device Label no longer exists in the format expected and causes an IndexError exception. This is the case in PowerMaxOS 5978.711 and later. Closes-Bug: #1939139 Change-Id: If465bc719cea2d4e85b37527f3f7ac916b5de638 (cherry picked from commit 672a0e97988755012ff87fb85bddc1cd125f1898) (cherry picked from commit a366ed53b1ea17d0be266a4fca56785410b376cf) (cherry picked from commit 37be715cc7fd20878bbcd77965d2b9a902a25a99) --- .../drivers/dell_emc/powermax/powermax_data.py | 4 ++++ .../dell_emc/powermax/test_powermax_common.py | 14 ++++++++++++++ cinder/volume/drivers/dell_emc/powermax/common.py | 13 ++++++++----- cinder/volume/drivers/dell_emc/powermax/fc.py | 3 ++- cinder/volume/drivers/dell_emc/powermax/iscsi.py | 3 ++- .../notes/bug-1939139-02ab552420813e70.yaml | 7 +++++++ 6 files changed, 37 insertions(+), 7 deletions(-) create mode 100644 releasenotes/notes/bug-1939139-02ab552420813e70.yaml diff --git a/cinder/tests/unit/volume/drivers/dell_emc/powermax/powermax_data.py b/cinder/tests/unit/volume/drivers/dell_emc/powermax/powermax_data.py index e7d8ddfafb5..44add9980ed 100644 --- a/cinder/tests/unit/volume/drivers/dell_emc/powermax/powermax_data.py +++ b/cinder/tests/unit/volume/drivers/dell_emc/powermax/powermax_data.py @@ -1430,6 +1430,7 @@ class PowerMaxData(object): snap_device_label = ('%(dev)s:%(label)s' % {'dev': device_id, 'label': managed_snap_id}) + priv_snap_response = { 'deviceName': snap_device_label, 'snapshotLnks': [], 'snapshotSrcs': [ @@ -1441,6 +1442,9 @@ class PowerMaxData(object): 'snapshotName': test_snapshot_snap_name, 'state': 'Established'}]} + priv_snap_response_no_label = deepcopy(priv_snap_response) + priv_snap_response_no_label.update({'deviceName': device_id}) + volume_metadata = { 'DeviceID': device_id, 'ArrayID': array, 'ArrayModel': array_model} diff --git a/cinder/tests/unit/volume/drivers/dell_emc/powermax/test_powermax_common.py b/cinder/tests/unit/volume/drivers/dell_emc/powermax/test_powermax_common.py index 2dcc988fa09..5cd6b085da9 100644 --- a/cinder/tests/unit/volume/drivers/dell_emc/powermax/test_powermax_common.py +++ b/cinder/tests/unit/volume/drivers/dell_emc/powermax/test_powermax_common.py @@ -3387,6 +3387,20 @@ class PowerMaxCommonTest(test.TestCase): array, device_id, snap_name) self.assertEqual(ref_metadata, act_metadata) + @mock.patch.object( + rest.PowerMaxRest, 'get_volume_snap_info', + return_value=(tpd.PowerMaxData.priv_snap_response_no_label)) + def test_get_snapshot_metadata_no_label(self, mck_snap): + array = self.data.array + device_id = self.data.device_id + snap_name = self.data.test_snapshot_snap_name + ref_metadata = {'SnapshotLabel': snap_name, + 'SourceDeviceID': device_id} + + act_metadata = self.common.get_snapshot_metadata( + array, device_id, snap_name) + self.assertEqual(ref_metadata, act_metadata) + def test_update_metadata(self): model_update = {'provider_location': six.text_type( self.data.provider_location)} diff --git a/cinder/volume/drivers/dell_emc/powermax/common.py b/cinder/volume/drivers/dell_emc/powermax/common.py index 31a2941095e..b78014fcb38 100644 --- a/cinder/volume/drivers/dell_emc/powermax/common.py +++ b/cinder/volume/drivers/dell_emc/powermax/common.py @@ -6416,12 +6416,15 @@ class PowerMaxCommon(object): :returns: dict -- volume metadata """ snap_info = self.rest.get_volume_snap_info(array, device_id) - device_name = snap_info['deviceName'] - device_label = device_name.split(':')[1] + device_name = snap_info.get('deviceName') + try: + device_label = device_name.split(':')[1] if device_name else None + except IndexError: + device_label = None metadata = {'SnapshotLabel': snap_name, - 'SourceDeviceID': device_id, - 'SourceDeviceLabel': device_label} - + 'SourceDeviceID': device_id} + if device_label: + metadata['SourceDeviceLabel'] = device_label return metadata def _check_and_add_tags_to_storage_array( diff --git a/cinder/volume/drivers/dell_emc/powermax/fc.py b/cinder/volume/drivers/dell_emc/powermax/fc.py index b5f7a2871dd..2af3b2cd2de 100644 --- a/cinder/volume/drivers/dell_emc/powermax/fc.py +++ b/cinder/volume/drivers/dell_emc/powermax/fc.py @@ -133,9 +133,10 @@ class PowerMaxFCDriver(san.SanDriver, driver.FibreChannelDriver): 4.2.9 - Failover group volume update (#1888831) 4.2.10 - Replica RDFG suspend fix (#1892718) 4.2.11 - Fix non-temporary snapshot delete (#1887962) + 4.2.12 - Fix for create snapshot (#1939139) """ - VERSION = "4.2.11" + VERSION = "4.2.12" # ThirdPartySystems wiki CI_WIKI_NAME = "EMC_VMAX_CI" diff --git a/cinder/volume/drivers/dell_emc/powermax/iscsi.py b/cinder/volume/drivers/dell_emc/powermax/iscsi.py index 561114c152f..6565293b85c 100644 --- a/cinder/volume/drivers/dell_emc/powermax/iscsi.py +++ b/cinder/volume/drivers/dell_emc/powermax/iscsi.py @@ -138,9 +138,10 @@ class PowerMaxISCSIDriver(san.SanISCSIDriver): 4.2.9 - Failover group volume update (#1888831) 4.2.10 - Replica RDFG suspend fix (#1892718) 4.2.11 - Fix non-temporary snapshot delete (#1887962) + 4.2.12 - Fix for create snapshot (#1939139) """ - VERSION = "4.2.11" + VERSION = "4.2.12" # ThirdPartySystems wiki CI_WIKI_NAME = "EMC_VMAX_CI" diff --git a/releasenotes/notes/bug-1939139-02ab552420813e70.yaml b/releasenotes/notes/bug-1939139-02ab552420813e70.yaml new file mode 100644 index 00000000000..4edf6cf11a2 --- /dev/null +++ b/releasenotes/notes/bug-1939139-02ab552420813e70.yaml @@ -0,0 +1,7 @@ +--- +fixes: + - | + PowerMax driver `bug #1939139 + `_: Fix + on create snapshot operation that exists when using PowerMax OS + 5978.711 and later.