From 2e0ead8e043a47db214f4f52c9bfe71b6079b5fd Mon Sep 17 00:00:00 2001 From: Moshe Levi Date: Thu, 8 Oct 2015 22:41:06 +0300 Subject: [PATCH] QoS SR-IOV: allow to reset vf rate when VF is assigend to VM delete_bandwidth_limit method is called in 2 scenarios: 1. when deleting a port 2. when removing a policy from a port self.eswitch_mgr.clear_max_rate is valdating if VF is not assigned to VM which is good for case 1, but prevent reseting the max rate for case 2. for case 2 the delete_bandwidth_limit should call _set_vf_max_rate with max_kbps=0 to reset VF max rate for assigned VM. Closes-Bug: #1504165 Change-Id: Ief708531708b8faa918603298d49d39ef5ba2df5 --- .../mech_sriov/agent/extension_drivers/qos_driver.py | 6 +++++- .../mech_sriov/agent/extension_drivers/test_qos_driver.py | 8 +++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/neutron/plugins/ml2/drivers/mech_sriov/agent/extension_drivers/qos_driver.py b/neutron/plugins/ml2/drivers/mech_sriov/agent/extension_drivers/qos_driver.py index b20f06dfb..3773b7fbb 100755 --- a/neutron/plugins/ml2/drivers/mech_sriov/agent/extension_drivers/qos_driver.py +++ b/neutron/plugins/ml2/drivers/mech_sriov/agent/extension_drivers/qos_driver.py @@ -47,7 +47,11 @@ class QosSRIOVAgentDriver(qos.QosAgentDriver): def delete_bandwidth_limit(self, port): pci_slot = port['profile'].get('pci_slot') - self.eswitch_mgr.clear_max_rate(pci_slot) + if port.get('device_owner') is None: + self.eswitch_mgr.clear_max_rate(pci_slot) + else: + device = port['device'] + self._set_vf_max_rate(device, pci_slot) def _set_vf_max_rate(self, device, pci_slot, max_kbps=0): if self.eswitch_mgr.device_exists(device, pci_slot): diff --git a/neutron/tests/unit/plugins/ml2/drivers/mech_sriov/agent/extension_drivers/test_qos_driver.py b/neutron/tests/unit/plugins/ml2/drivers/mech_sriov/agent/extension_drivers/test_qos_driver.py index 60a5ef208..db4ca6bdb 100755 --- a/neutron/tests/unit/plugins/ml2/drivers/mech_sriov/agent/extension_drivers/test_qos_driver.py +++ b/neutron/tests/unit/plugins/ml2/drivers/mech_sriov/agent/extension_drivers/test_qos_driver.py @@ -85,7 +85,13 @@ class QosSRIOVAgentDriverTestCase(base.BaseTestCase): self.max_rate_mock.assert_called_once_with( self.ASSIGNED_MAC, self.PCI_SLOT, self.rule.max_kbps) - def test_delete_rules(self): + def test_delete_rules_on_assigned_vf(self): + self.qos_driver.delete(self.port, self.qos_policy) + self.max_rate_mock.assert_called_once_with( + self.ASSIGNED_MAC, self.PCI_SLOT, 0) + + def test_delete_rules_on_released_vf(self): + del self.port['device_owner'] self.qos_driver.delete(self.port, self.qos_policy) self.clear_max_rate_mock.assert_called_once_with(self.PCI_SLOT) -- 2.45.2