From da172417fffdf1d162319319fa34a73f2a597de1 Mon Sep 17 00:00:00 2001 From: gksk Date: Wed, 18 Aug 2021 17:02:28 +0000 Subject: [PATCH] [SVF] Fixed update_rep_properties for empty values [Spectrum Virtualize Family] During _update_replication_properties, some empty value volume relationship attributes of mirror volumes are not updated in volume metadata. Fixed the above issue by removing the check that filters only non-empty values of volume relationship properties. Closes-Bug: #1935670 Change-Id: Ief710f5f337671c4aaf21899c69e3ccd62743d9e --- .../volume/drivers/ibm/test_storwize_svc.py | 38 +++++++++++++++++++ .../ibm/storwize_svc/storwize_svc_common.py | 3 +- ...for_empty_values_fix-a2faabbf2139195e.yaml | 6 +++ 3 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 releasenotes/notes/bug-1935670-svc_update_rep_properties_for_empty_values_fix-a2faabbf2139195e.yaml diff --git a/cinder/tests/unit/volume/drivers/ibm/test_storwize_svc.py b/cinder/tests/unit/volume/drivers/ibm/test_storwize_svc.py index 6b1b0713b5c..90a65dee4cd 100644 --- a/cinder/tests/unit/volume/drivers/ibm/test_storwize_svc.py +++ b/cinder/tests/unit/volume/drivers/ibm/test_storwize_svc.py @@ -13048,3 +13048,41 @@ class StorwizeSVCReplicationTestCase(test.TestCase): model_update = self.driver.delete_group(self.ctxt, clone_group, [clone_vol1, clone_vol2]) self.assertEqual(fields.GroupStatus.DELETED, model_update[0]['status']) + + @ddt.data(({'volume_type': 'gm_type'}), + ({'volume_type': 'mm_type'}), + ({'volume_type': 'gmcv_default_type'}), + ({'volume_type': 'non_replica_type'}) + ) + def test_update_replication_properties_on_create_volume(self, vol_spec): + self.driver.configuration.set_override('replication_device', + [self.rep_target]) + self.driver.do_setup(self.ctxt) + vol_type = getattr(self, vol_spec['volume_type']) + + with mock.patch.object( + storwize_svc_common.StorwizeSVCCommonDriver, + '_update_replication_properties') as update_rep_properties: + volume, model_update = self._create_test_volume(vol_type) + if vol_type == self.non_replica_type: + self.assertFalse(update_rep_properties.called) + else: + self.assertTrue(update_rep_properties.called) + self.driver.delete_volume(volume) + + # Create metro mirror replication. + volume, model_update = self._create_test_volume(vol_type) + if 'metadata' in model_update: + expected_sync_attr_value = '' + expected_freeze_time = '' + expected_primary = 'master' + expected_mirroring_state = 'inconsistent_copying' + self.assertEqual(model_update['metadata']['Sync'], + expected_sync_attr_value) + self.assertEqual(model_update['metadata']['Freeze Time'], + expected_freeze_time) + self.assertEqual(model_update['metadata']['Primary'], + expected_primary) + self.assertEqual(model_update['metadata']['Mirroring State'], + expected_mirroring_state) + self.driver.delete_volume(volume) diff --git a/cinder/volume/drivers/ibm/storwize_svc/storwize_svc_common.py b/cinder/volume/drivers/ibm/storwize_svc/storwize_svc_common.py index e878801f14a..06c851bcbd2 100644 --- a/cinder/volume/drivers/ibm/storwize_svc/storwize_svc_common.py +++ b/cinder/volume/drivers/ibm/storwize_svc/storwize_svc_common.py @@ -3440,8 +3440,7 @@ class StorwizeSVCCommonDriver(san.SanDriver, del model_update['metadata'][key] else: for key, value in rep_properties.items(): - if rel_info.get(value): - model_update['metadata'][key] = rel_info[value] + model_update['metadata'][key] = rel_info.get(value) return model_update def create_volume(self, volume): diff --git a/releasenotes/notes/bug-1935670-svc_update_rep_properties_for_empty_values_fix-a2faabbf2139195e.yaml b/releasenotes/notes/bug-1935670-svc_update_rep_properties_for_empty_values_fix-a2faabbf2139195e.yaml new file mode 100644 index 00000000000..142fe62356d --- /dev/null +++ b/releasenotes/notes/bug-1935670-svc_update_rep_properties_for_empty_values_fix-a2faabbf2139195e.yaml @@ -0,0 +1,6 @@ +fixes: + - | + IBM Spectrum Virtualize Family driver: `Bug #1935670 + `_: + Fixed empty attribute values issue while updating + volume metadata table for replicated volumes.