From d3cb76c85883ef9e5ba7b41fc1607d0ccb39756b Mon Sep 17 00:00:00 2001 From: Balazs Gibizer Date: Wed, 2 Jul 2025 17:57:23 +0200 Subject: [PATCH] Reproduce that only half of the PCI devs are removed This reproduces a bug where at each resource tracker update_available_resources periodic run only half of the remove PCI devices are deleted from the DB. Related-Bug: #2115729 Change-Id: I95694f38105d61b4b7befd9223089f3a0d862634 Signed-off-by: Balazs Gibizer --- nova/tests/unit/pci/test_manager.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/nova/tests/unit/pci/test_manager.py b/nova/tests/unit/pci/test_manager.py index 0707d49f2a..fc5765b10e 100644 --- a/nova/tests/unit/pci/test_manager.py +++ b/nova/tests/unit/pci/test_manager.py @@ -878,12 +878,25 @@ class PciDevTrackerTestCase(test.NoDBTestCase): self._fake_pci_device_destroy) self.destroy_called = 0 self.assertEqual(len(self.tracker.pci_devs), 3) - dev = self.tracker.pci_devs[0] + dev1 = self.tracker.pci_devs[0] + dev2 = self.tracker.pci_devs[1] self.update_called = 0 - dev.remove() + dev1.remove() + dev2.remove() self.tracker.save(self.fake_context) + + # This is https://bugs.launchpad.net/nova/+bug/2115729 as + # only one half of the removed devices are destroyed. self.assertEqual(len(self.tracker.pci_devs), 2) self.assertEqual(self.destroy_called, 1) + # a subsequent save will destroy half of the remaining removed devices + self.tracker.save(self.fake_context) + self.assertEqual(len(self.tracker.pci_devs), 1) + self.assertEqual(self.destroy_called, 2) + # after the fix we should see that a single save causes all the + # removed devices destroyed + # self.assertEqual(len(self.tracker.pci_devs), 1) + # self.assertEqual(self.destroy_called, 2) def test_clean_usage(self): inst_2 = copy.copy(self.inst)