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 03cf9fb37e..4ba8d7c0e4 100644 --- a/manila/share/drivers/netapp/dataontap/cluster_mode/lib_base.py +++ b/manila/share/drivers/netapp/dataontap/cluster_mode/lib_base.py @@ -2244,6 +2244,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 b64cf86e17..6beeaf288e 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 @@ -4781,8 +4781,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', @@ -4816,10 +4826,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') @@ -4844,7 +4854,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.