]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
QoS SR-IOV: allow to reset vf rate when VF is assigend to VM
authorMoshe Levi <moshele@mellanox.com>
Thu, 8 Oct 2015 19:41:06 +0000 (22:41 +0300)
committerMoshe Levi <moshele@mellanox.com>
Fri, 9 Oct 2015 04:52:19 +0000 (07:52 +0300)
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

neutron/plugins/ml2/drivers/mech_sriov/agent/extension_drivers/qos_driver.py
neutron/tests/unit/plugins/ml2/drivers/mech_sriov/agent/extension_drivers/test_qos_driver.py

index b20f06dfbf3e14b4ba78f748fb58ad9a922c0dee..3773b7fbb7bc64d45730e7aef90d02f583e195a8 100755 (executable)
@@ -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):
index 60a5ef2085ff57f5d159190120c02f766ba56629..db4ca6bdbf00a3dea141dfef30612b4543fa4ff3 100755 (executable)
@@ -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)