From 9161e6180707c9bfdaee5c0996193e0d3473bc99 Mon Sep 17 00:00:00 2001 From: odonos12 Date: Mon, 24 Aug 2020 13:22:09 +0100 Subject: [PATCH] PowerMax Driver - Replica rdfg suspend fix Add wait for synchronized rdf pair state when creating a replica that has an rdf enabled source. Prevent calling suspend when rdf pair may not have reached synchronized state after volume creation. Change-Id: I8b391d02adff831b3bb67e181907032804f96e72 Closes-Bug: 1892718 (cherry picked from commit 5d864dbc50e3eb9c94b411f47f141ba47c7f5640) --- .../dell_emc/powermax/test_powermax_common.py | 28 +++++++++++++++++++ .../drivers/dell_emc/powermax/common.py | 3 ++ cinder/volume/drivers/dell_emc/powermax/fc.py | 3 +- .../volume/drivers/dell_emc/powermax/iscsi.py | 3 +- 4 files changed, 35 insertions(+), 2 deletions(-) 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 9c5d146d68a..97788548894 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 @@ -1624,6 +1624,34 @@ class PowerMaxCommonTest(test.TestCase): self.data.extra_specs, snap_name) self.assertEqual(ref_response, (clone_dict, rep_update, rep_info_dict)) + @mock.patch.object( + rest.PowerMaxRest, 'get_slo_list', return_value=['Diamond']) + @mock.patch.object( + common.PowerMaxCommon, '_create_volume', + return_value=(tpd.PowerMaxData.rep_info_dict, + tpd.PowerMaxData.replication_update, + tpd.PowerMaxData.rep_info_dict)) + @mock.patch.object(rest.PowerMaxRest, 'rdf_resume_with_retries') + @mock.patch.object(rest.PowerMaxRest, 'srdf_suspend_replication') + @mock.patch.object(rest.PowerMaxRest, 'wait_for_rdf_pair_sync') + def test_create_replica_rep_enabled( + self, mck_wait, mck_susp, mck_res, mck_create, mck_slo): + array = self.data.array + clone_volume = self.data.test_clone_volume + source_device_id = self.data.device_id + snap_name = self.data.snap_location['snap_name'] + extra_specs = deepcopy(self.data.rep_extra_specs_rep_config) + __, rep_extra_specs, __, __ = self.common.prepare_replication_details( + extra_specs) + rdfg = extra_specs['rdf_group_no'] + self.common._create_replica( + array, clone_volume, source_device_id, rep_extra_specs, snap_name) + mck_wait.assert_called_once_with( + array, rdfg, source_device_id, rep_extra_specs) + mck_susp.assert_called_once_with( + array, rep_extra_specs['sg_name'], rdfg, rep_extra_specs) + mck_res.assert_called_once_with(array, rep_extra_specs) + def test_create_replica_no_snap_name(self): array = self.data.array clone_volume = self.data.test_clone_volume diff --git a/cinder/volume/drivers/dell_emc/powermax/common.py b/cinder/volume/drivers/dell_emc/powermax/common.py index 702565b5316..862225ac788 100644 --- a/cinder/volume/drivers/dell_emc/powermax/common.py +++ b/cinder/volume/drivers/dell_emc/powermax/common.py @@ -2721,6 +2721,9 @@ class PowerMaxCommon(object): rep_extra_specs['sg_name'] = ( self.utils.get_rdf_management_group_name( rep_extra_specs[utils.REP_CONFIG])) + self.rest.wait_for_rdf_pair_sync( + array, rep_extra_specs['rdf_group_no'], target_device_id, + rep_extra_specs) self.rest.srdf_suspend_replication( array, rep_extra_specs['sg_name'], rep_extra_specs['rdf_group_no'], rep_extra_specs) diff --git a/cinder/volume/drivers/dell_emc/powermax/fc.py b/cinder/volume/drivers/dell_emc/powermax/fc.py index 03ce880af40..e6ed3add694 100644 --- a/cinder/volume/drivers/dell_emc/powermax/fc.py +++ b/cinder/volume/drivers/dell_emc/powermax/fc.py @@ -131,9 +131,10 @@ class PowerMaxFCDriver(san.SanDriver, driver.FibreChannelDriver): 4.2.7 - Fix to enable legacy volumes to live migrate (#1867163) 4.2.8 - Force flag to add to rep enable storage groups (#1892057) 4.2.9 - Failover group volume update (#1888831) + 4.2.10 - Replica RDFG suspend fix (#1892718) """ - VERSION = "4.2.9" + VERSION = "4.2.10" # 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 8aea5c84b0c..3df5f8ac33a 100644 --- a/cinder/volume/drivers/dell_emc/powermax/iscsi.py +++ b/cinder/volume/drivers/dell_emc/powermax/iscsi.py @@ -136,9 +136,10 @@ class PowerMaxISCSIDriver(san.SanISCSIDriver): 4.2.7 - Fix to enable legacy volumes to live migrate (#1867163) 4.2.8 - Force flag to add to rep enable storage groups (#1892057) 4.2.9 - Failover group volume update (#1888831) + 4.2.10 - Replica RDFG suspend fix (#1892718) """ - VERSION = "4.2.9" + VERSION = "4.2.10" # ThirdPartySystems wiki CI_WIKI_NAME = "EMC_VMAX_CI"