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
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):
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)