From 66117610f92fe3e7632980ccef007ced7f952385 Mon Sep 17 00:00:00 2001 From: Naresh Kumar Gunjalli Date: Mon, 17 Jun 2019 07:15:21 -0400 Subject: [PATCH] [NetApp] cDOT to set valid QoS during migration NetApp cDOT driver is now fixed to remove the QoS Policy on the backend volume when a share is migrated from an extra-spec which had QoS defined to another extra-spec which has no QoS defined in it. Change-Id: I57c2e15fc22eb2bf69ebee25a92ba10746505e73 Closes-Bug: #1706137 (cherry picked from commit 14b75b1fdd753c6d90c301cd4576706024a9356f) (cherry picked from commit 1fddc0794f89dc9fb8381e622855d76839136c5d) (cherry picked from commit 15dc973b17cb0557f192a97d1efcb8ce235c54e1) (cherry picked from commit 6e52af90f828c6fc34cad4bd788e9264c321bac0) --- .../netapp/dataontap/cluster_mode/lib_base.py | 11 ++++++++++ .../dataontap/cluster_mode/test_lib_base.py | 20 ++++++++++++++----- ...qos-during-migration-4405fff02bd6fa83.yaml | 5 +++++ 3 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 releasenotes/notes/bug-1706137-netapp-manila-set-valid-qos-during-migration-4405fff02bd6fa83.yaml diff --git a/manila/share/drivers/netapp/dataontap/cluster_mode/lib_base.py b/manila/share/drivers/netapp/dataontap/cluster_mode/lib_base.py index 3b4531e917..9284146e07 100644 --- a/manila/share/drivers/netapp/dataontap/cluster_mode/lib_base.py +++ b/manila/share/drivers/netapp/dataontap/cluster_mode/lib_base.py @@ -2197,6 +2197,17 @@ class NetAppCmodeFileStorageLibrary(object): destination_share, extra_specs, vserver, vserver_client) if qos_policy_group_name: provisioning_options['qos_policy_group'] = qos_policy_group_name + else: + # Removing the QOS Policy on the migrated share as the + # new extra-spec for which this share is being migrated to + # does not specify any QOS settings. + provisioning_options['qos_policy_group'] = "none" + + qos_policy_of_src_share = self._get_backend_qos_policy_group_name( + source_share['id']) + self._client.mark_qos_policy_group_for_deletion( + qos_policy_of_src_share) + destination_aggregate = share_utils.extract_host( destination_share['host'], level='pool') diff --git a/manila/tests/share/drivers/netapp/dataontap/cluster_mode/test_lib_base.py b/manila/tests/share/drivers/netapp/dataontap/cluster_mode/test_lib_base.py index 93a50838ba..77b2345d0f 100644 --- a/manila/tests/share/drivers/netapp/dataontap/cluster_mode/test_lib_base.py +++ b/manila/tests/share/drivers/netapp/dataontap/cluster_mode/test_lib_base.py @@ -4731,8 +4731,18 @@ class NetAppFileStorageLibraryTestCase(test.TestCase): self.assertFalse(self.library._create_export.called) self.assertEqual(3, mock_warning_log.call_count) - @ddt.data('cutover_hard_deferred', 'cutover_soft_deferred', 'completed') - def test_migration_complete(self, phase): + @ddt.data({'phase': 'cutover_hard_deferred', + 'provisioning_options': fake.PROVISIONING_OPTIONS_WITH_QOS, + 'policy_group_name': fake.QOS_POLICY_GROUP_NAME}, + {'phase': 'cutover_soft_deferred', + 'provisioning_options': fake.PROVISIONING_OPTIONS_WITH_QOS, + 'policy_group_name': fake.QOS_POLICY_GROUP_NAME}, + {'phase': 'completed', + 'provisioning_options': fake.PROVISIONING_OPTIONS, + 'policy_group_name': False}) + @ddt.unpack + def test_migration_complete(self, phase, provisioning_options, + policy_group_name): snap = fake_share.fake_snapshot_instance( id='src-snapshot', provider_location='test-src-provider-location') dest_snap = fake_share.fake_snapshot_instance(id='dest-snapshot', @@ -4766,10 +4776,10 @@ class NetAppFileStorageLibraryTestCase(test.TestCase): mock.Mock(return_value=fake.EXTRA_SPEC)) self.mock_object( self.library, '_get_provisioning_options', - mock.Mock(return_value=fake.PROVISIONING_OPTIONS_WITH_QOS)) + mock.Mock(return_value=provisioning_options)) self.mock_object( self.library, '_modify_or_create_qos_for_existing_share', - mock.Mock(return_value=fake.QOS_POLICY_GROUP_NAME)) + mock.Mock(return_value=policy_group_name)) self.mock_object(vserver_client, 'modify_volume') src_share = fake_share.fake_share_instance(id='source-share-instance') @@ -4794,7 +4804,7 @@ class NetAppFileStorageLibraryTestCase(test.TestCase): dest_share, fake.SHARE_SERVER, fake.VSERVER1, vserver_client, clear_current_export_policy=False) vserver_client.modify_volume.assert_called_once_with( - dest_aggr, 'new_share_name', **fake.PROVISIONING_OPTIONS_WITH_QOS) + dest_aggr, 'new_share_name', **provisioning_options) mock_info_log.assert_called_once() if phase != 'completed': self.assertEqual(2, mock_warning_log.call_count) diff --git a/releasenotes/notes/bug-1706137-netapp-manila-set-valid-qos-during-migration-4405fff02bd6fa83.yaml b/releasenotes/notes/bug-1706137-netapp-manila-set-valid-qos-during-migration-4405fff02bd6fa83.yaml new file mode 100644 index 0000000000..b53feb19c5 --- /dev/null +++ b/releasenotes/notes/bug-1706137-netapp-manila-set-valid-qos-during-migration-4405fff02bd6fa83.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - NetApp cDOT driver is now fixed to remove the QoS Policy on the + backend volume when a share is migrated from an extra-spec which had + QoS defined to another extra-spec which has no QoS defined in it.