diff --git a/manila/share/drivers/huawei/constants.py b/manila/share/drivers/huawei/constants.py index cc8d73de54..877bef6cf1 100644 --- a/manila/share/drivers/huawei/constants.py +++ b/manila/share/drivers/huawei/constants.py @@ -20,7 +20,10 @@ STATUS_FSSNAPSHOT_HEALTH = '1' STATUS_JOIN_DOMAIN = '1' STATUS_EXIT_DOMAIN = '0' STATUS_SERVICE_RUNNING = "2" -STATUS_QOS_ACTIVE = '2' + +QOS_STATUSES = (STATUS_QOS_ACTIVE, + STATUS_QOS_INACTIVATED, + STATUS_QOS_IDLE) = ('2', '45', '46') DEFAULT_WAIT_INTERVAL = 3 DEFAULT_TIMEOUT = 60 diff --git a/manila/share/drivers/huawei/v3/smartx.py b/manila/share/drivers/huawei/v3/smartx.py index 794b3997b5..2d7e6a171b 100644 --- a/manila/share/drivers/huawei/v3/smartx.py +++ b/manila/share/drivers/huawei/v3/smartx.py @@ -95,7 +95,7 @@ class SmartQos(object): def delete_qos(self, qos_id): qos_info = self.helper.get_qos_info(qos_id) qos_status = qos_info['RUNNINGSTATUS'] - if qos_status == constants.STATUS_QOS_ACTIVE: + if qos_status != constants.STATUS_QOS_INACTIVATED: self.helper.activate_deactivate_qos(qos_id, False) self.helper.delete_qos_policy(qos_id) diff --git a/manila/tests/share/drivers/huawei/test_huawei_nas.py b/manila/tests/share/drivers/huawei/test_huawei_nas.py index 53d6632a27..d14e47d8d5 100644 --- a/manila/tests/share/drivers/huawei/test_huawei_nas.py +++ b/manila/tests/share/drivers/huawei/test_huawei_nas.py @@ -4458,3 +4458,27 @@ class HuaweiShareDriverTestCase(test.TestCase): 'fake_pair_id') self.assertEqual(expected_state, result_state) + + @ddt.data(*constants.QOS_STATUSES) + def test_delete_qos(self, qos_status): + self.driver.plugin.helper.custom_results['/ioclass/11'] = { + "GET": """{"error":{"code":0}, "data":{"RUNNINGSTATUS": "%s"}}""" % + qos_status + } + + activate_deactivate_qos_mock = self.mock_object( + self.driver.plugin.helper, + 'activate_deactivate_qos') + delete_qos_mock = self.mock_object( + self.driver.plugin.helper, + 'delete_qos_policy') + + qos = smartx.SmartQos(self.driver.plugin.helper) + qos.delete_qos('11') + + if qos_status == constants.STATUS_QOS_INACTIVATED: + activate_deactivate_qos_mock.assert_not_called() + else: + activate_deactivate_qos_mock.assert_called_once_with('11', False) + + delete_qos_mock.assert_called_once_with('11') diff --git a/releasenotes/notes/fix-huawei-driver-qos-deletion-9ad62db3d7415980.yaml b/releasenotes/notes/fix-huawei-driver-qos-deletion-9ad62db3d7415980.yaml new file mode 100644 index 0000000000..742a6fe109 --- /dev/null +++ b/releasenotes/notes/fix-huawei-driver-qos-deletion-9ad62db3d7415980.yaml @@ -0,0 +1,4 @@ +--- +fixes: + - Fixed qos deletion failing in huawei driver when qos status is 'idle' + by deactivating it first.