From e8e0f8756f071a29216ce8f099102af15a003256 Mon Sep 17 00:00:00 2001 From: Helen Walsh Date: Fri, 2 Apr 2021 18:14:10 +0100 Subject: [PATCH] PowerMax Driver - Get manageable volumes fix For a PowerMax volume to be manageable it can not be in more than one storage group. Filtering manageable volumes list to remove all devices that are in more than one storage group. Change-Id: I3b480b8f6f01925357651a5c5b2145b249706415 --- .../unit/volume/drivers/dell_emc/powermax/powermax_data.py | 6 ++++++ .../volume/drivers/dell_emc/powermax/test_powermax_utils.py | 5 +++++ cinder/volume/drivers/dell_emc/powermax/utils.py | 3 +++ 3 files changed, 14 insertions(+) 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 ec55b33328d..69ec7736564 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 @@ -1269,6 +1269,12 @@ class PowerMaxData(object): 'getDynamicRDFCapability': 'RDF1_Capable', 'RDFA': False}, 'timeFinderInfo': {'snapVXTgt': False, 'snapVXSrc': False}}] + priv_vol_func_response_multi_sg = deepcopy(priv_vol_func_response_single) + priv_vol_func_response_multi_sg[0].get('volumeHeader').update( + {'numStorageGroups': 2}) + priv_vol_func_response_multi_sg[0].get('volumeHeader').update( + {'storageGroup': ['SG1', 'SG2']}) + volume_create_info_dict = {utils.ARRAY: array, utils.DEVICE_ID: device_id} volume_info_dict = { diff --git a/cinder/tests/unit/volume/drivers/dell_emc/powermax/test_powermax_utils.py b/cinder/tests/unit/volume/drivers/dell_emc/powermax/test_powermax_utils.py index e79d9d94c0e..f1cff7afdc3 100644 --- a/cinder/tests/unit/volume/drivers/dell_emc/powermax/test_powermax_utils.py +++ b/cinder/tests/unit/volume/drivers/dell_emc/powermax/test_powermax_utils.py @@ -590,6 +590,11 @@ class PowerMaxUtilsTest(test.TestCase): self.assertFalse( self.utils.is_volume_manageable(volume)) + def test_is_volume_manageable_multi_sg(self): + for volume in self.data.priv_vol_func_response_multi_sg: + self.assertFalse( + self.utils.is_volume_manageable(volume)) + def test_is_snapshot_manageable(self): for volume in self.data.priv_vol_func_response_multi: self.assertTrue( diff --git a/cinder/volume/drivers/dell_emc/powermax/utils.py b/cinder/volume/drivers/dell_emc/powermax/utils.py index aeed7b9d332..eea56fbf714 100644 --- a/cinder/volume/drivers/dell_emc/powermax/utils.py +++ b/cinder/volume/drivers/dell_emc/powermax/utils.py @@ -1057,6 +1057,9 @@ class PowerMaxUtils(object): if vol_head['userDefinedIdentifier'][0:3] == 'OS-': return False + if vol_head.get('numStorageGroups', 0) > 1: + return False + return True @staticmethod