diff --git a/neutron/agent/l3_agent.py b/neutron/agent/l3_agent.py index 9f4bed74f97..991c378857a 100644 --- a/neutron/agent/l3_agent.py +++ b/neutron/agent/l3_agent.py @@ -770,9 +770,6 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, manager.Manager): [router['id'] for router in routers]) cur_router_ids = set() for r in routers: - if not r['admin_state_up']: - continue - # If namespaces are disabled, only process the router associated # with the configured agent id. if (not self.conf.use_namespaces and @@ -809,9 +806,13 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, manager.Manager): len(self.updated_routers)) if self.updated_routers: router_ids = list(self.updated_routers) - self.updated_routers.clear() routers = self.plugin_rpc.get_routers( self.context, router_ids) + + fetched = set([r['id'] for r in routers]) + self.removed_routers.update(self.updated_routers - fetched) + self.updated_routers.clear() + self._process_routers(routers) self._process_router_delete() LOG.debug(_("RPC loop successfully completed")) diff --git a/neutron/tests/unit/test_l3_agent.py b/neutron/tests/unit/test_l3_agent.py index 6ccb64778cb..d1dffffb4cb 100644 --- a/neutron/tests/unit/test_l3_agent.py +++ b/neutron/tests/unit/test_l3_agent.py @@ -895,17 +895,6 @@ class TestBasicRouterOperations(base.BaseTestCase): namespace=ri.ns_name, prefix=l3_agent.EXTERNAL_DEV_PREFIX) - def test_routers_with_admin_state_down(self): - agent = l3_agent.L3NATAgent(HOSTNAME, self.conf) - self.plugin_api.get_external_network_id.return_value = None - - routers = [ - {'id': _uuid(), - 'admin_state_up': False, - 'external_gateway_info': {}}] - agent._process_routers(routers) - self.assertNotIn(routers[0]['id'], agent.router_info) - def test_router_deleted(self): agent = l3_agent.L3NATAgent(HOSTNAME, self.conf) agent.router_deleted(None, FAKE_ID)