From: Carl Baldwin Date: Tue, 1 Apr 2014 22:02:17 +0000 (+0000) Subject: Delete routers that are requested but not reported as active X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=472412a000d12659bf2eb324277f8ee7168aa0c8;p=openstack-build%2Fneutron-build.git Delete routers that are requested but not reported as active There are two cases that I can think of that result in a router being requested but not reported as active. One is that admin_state_up has been set to False. In this case, the router is never removed and continues to be operational. The other case is if a router is changed and then deleted before the change is processed. In this case, it is prudent to be sure that the router is queued for deletion. Change-Id: I4738f599a18f0d130cc8ad4d4dafc488eec75ffd Closes-Bug: #1215387 (cherry picked from commit 9da60d0a417dd70c16ae34f5877c564e425e4cf8) --- diff --git a/neutron/agent/l3_agent.py b/neutron/agent/l3_agent.py index f1e5d9381..f335da729 100644 --- a/neutron/agent/l3_agent.py +++ b/neutron/agent/l3_agent.py @@ -771,9 +771,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 @@ -810,9 +807,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 6ccb64778..d1dffffb4 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)