diff --git a/neutron/agent/dhcp/agent.py b/neutron/agent/dhcp/agent.py index bb3ed49b6e8..b2793d3b059 100644 --- a/neutron/agent/dhcp/agent.py +++ b/neutron/agent/dhcp/agent.py @@ -1050,11 +1050,12 @@ class NetworkCache(object): "self._deleted_ports" and "self._deleted_ports_ts". """ timestamp_min = timeutils.utcnow_ts() - DELETED_PORT_MAX_AGE - idx = None - for idx, (ts, port_id) in enumerate(self._deleted_ports_ts): + idx = 0 + for (ts, port_id) in self._deleted_ports_ts: if ts > timestamp_min: break self._deleted_ports.remove(port_id) + idx += 1 if idx: self._deleted_ports_ts = self._deleted_ports_ts[idx:] diff --git a/neutron/tests/unit/agent/dhcp/test_agent.py b/neutron/tests/unit/agent/dhcp/test_agent.py index 70079920abe..a5726963c4b 100644 --- a/neutron/tests/unit/agent/dhcp/test_agent.py +++ b/neutron/tests/unit/agent/dhcp/test_agent.py @@ -1719,6 +1719,12 @@ class TestNetworkCache(base.BaseTestCase): nc = dhcp_agent.NetworkCache() nc.add_to_deleted_ports(fake_port1.id) utils.wait_until_true(lambda: nc._deleted_ports == set(), timeout=7) + self.assertEqual([], self.nc._deleted_ports_ts) + + # check the second iteration is ok too + nc.add_to_deleted_ports(fake_port2.id) + utils.wait_until_true(lambda: nc._deleted_ports == set(), timeout=7) + self.assertEqual([], self.nc._deleted_ports_ts) class FakePort1(object):