From 672a0e97988755012ff87fb85bddc1cd125f1898 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 --- .../drivers/dell_emc/powermax/powermax_data.py | 4 ++++ .../dell_emc/powermax/test_powermax_common.py | 16 ++++++++++++++++ .../volume/drivers/dell_emc/powermax/common.py | 9 ++++++--- .../notes/bug-1939139-02ab552420813e70.yaml | 7 +++++++ 4 files changed, 33 insertions(+), 3 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 f5f2d53b99d..ec55b33328d 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 @@ -1471,6 +1471,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': [ @@ -1482,6 +1483,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 7e1f9384543..bd1dcd056e4 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 @@ -3835,6 +3835,22 @@ 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, + 'SnapIdList': six.text_type(self.data.snap_id), + 'is_snap_id': True} + + 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 2d7ff329bc4..e4b99a5f28f 100644 --- a/cinder/volume/drivers/dell_emc/powermax/common.py +++ b/cinder/volume/drivers/dell_emc/powermax/common.py @@ -7076,14 +7076,17 @@ class PowerMaxCommon(object): snap_id_list.append(snapshot_src.get( 'snap_id') if self.rest.is_snap_id else snapshot_src.get( 'generation')) - device_label = device_name.split(':')[1] + 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, 'SnapIdList': ', '.join( six.text_type(v) for v in snap_id_list), 'is_snap_id': self.rest.is_snap_id} - + if device_label: + metadata['SourceDeviceLabel'] = device_label return metadata def _check_and_add_tags_to_storage_array( 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.