Merge "Eliminate unnecessary indirection in L3 agent"
This commit is contained in:
commit
351bd4b69c
@ -620,17 +620,7 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback,
|
||||
ns_to_ignore = self._get_routers_namespaces(router_ids)
|
||||
|
||||
ns_to_destroy = router_namespaces - ns_to_ignore
|
||||
self._destroy_stale_router_namespaces(ns_to_destroy)
|
||||
|
||||
def _destroy_stale_router_namespaces(self, router_namespaces):
|
||||
"""Destroys the stale router namespaces
|
||||
|
||||
The argumenet router_namespaces is a list of stale router namespaces
|
||||
|
||||
As some stale router namespaces may not be able to be deleted, only
|
||||
one attempt will be made to delete them.
|
||||
"""
|
||||
for ns in router_namespaces:
|
||||
for ns in ns_to_destroy:
|
||||
try:
|
||||
self._destroy_namespace(ns)
|
||||
except RuntimeError:
|
||||
@ -1838,18 +1828,11 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback,
|
||||
while True:
|
||||
pool.spawn_n(self._process_router_update)
|
||||
|
||||
def _router_ids(self):
|
||||
if not self.conf.use_namespaces:
|
||||
return [self.conf.router_id]
|
||||
|
||||
@periodic_task.periodic_task
|
||||
def periodic_sync_routers_task(self, context):
|
||||
self._sync_routers_task(context)
|
||||
|
||||
def _sync_routers_task(self, context):
|
||||
if self.services_sync:
|
||||
super(L3NATAgent, self).process_services_sync(context)
|
||||
LOG.debug("Starting _sync_routers_task - fullsync:%s",
|
||||
LOG.debug("Starting periodic_sync_routers_task - fullsync:%s",
|
||||
self.fullsync)
|
||||
if not self.fullsync:
|
||||
return
|
||||
@ -1862,10 +1845,12 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback,
|
||||
prev_router_ids = set(self.router_info)
|
||||
|
||||
try:
|
||||
router_ids = self._router_ids()
|
||||
timestamp = timeutils.utcnow()
|
||||
routers = self.plugin_rpc.get_routers(
|
||||
context, router_ids)
|
||||
if self.conf.use_namespaces:
|
||||
routers = self.plugin_rpc.get_routers(context)
|
||||
else:
|
||||
routers = self.plugin_rpc.get_routers(context,
|
||||
[self.conf.router_id])
|
||||
|
||||
LOG.debug('Processing :%r', routers)
|
||||
for r in routers:
|
||||
@ -1875,7 +1860,7 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback,
|
||||
timestamp=timestamp)
|
||||
self._queue.add(update)
|
||||
self.fullsync = False
|
||||
LOG.debug("_sync_routers_task successfully completed")
|
||||
LOG.debug("periodic_sync_routers_task successfully completed")
|
||||
except messaging.MessagingException:
|
||||
LOG.exception(_LE("Failed synchronizing routers due to RPC error"))
|
||||
self.fullsync = True
|
||||
|
@ -418,18 +418,18 @@ class TestBasicRouterOperations(base.BaseTestCase):
|
||||
|
||||
return agent, ri, port
|
||||
|
||||
def test__sync_routers_task_raise_exception(self):
|
||||
def test_periodic_sync_routers_task_raise_exception(self):
|
||||
agent = l3_agent.L3NATAgent(HOSTNAME, self.conf)
|
||||
self.plugin_api.get_routers.side_effect = Exception()
|
||||
with mock.patch.object(agent, '_cleanup_namespaces') as f:
|
||||
agent._sync_routers_task(agent.context)
|
||||
agent.periodic_sync_routers_task(agent.context)
|
||||
self.assertFalse(f.called)
|
||||
|
||||
def test__sync_routers_task_call_clean_stale_namespaces(self):
|
||||
def test_periodic_sync_routers_task_call_clean_stale_namespaces(self):
|
||||
agent = l3_agent.L3NATAgent(HOSTNAME, self.conf)
|
||||
self.plugin_api.get_routers.return_value = []
|
||||
with mock.patch.object(agent, '_cleanup_namespaces') as f:
|
||||
agent._sync_routers_task(agent.context)
|
||||
agent.periodic_sync_routers_task(agent.context)
|
||||
self.assertTrue(f.called)
|
||||
|
||||
def test_router_info_create(self):
|
||||
@ -1491,8 +1491,8 @@ vrrp_instance VR_1 {
|
||||
# The unexpected exception has been fixed manually
|
||||
internal_network_added.side_effect = None
|
||||
|
||||
# _sync_routers_task finds out that _rpc_loop failed to process the
|
||||
# router last time, it will retry in the next run.
|
||||
# periodic_sync_routers_task finds out that _rpc_loop failed to
|
||||
# process the router last time, it will retry in the next run.
|
||||
agent.process_router(ri)
|
||||
# We were able to add the port to ri.internal_ports
|
||||
self.assertIn(
|
||||
@ -1522,8 +1522,8 @@ vrrp_instance VR_1 {
|
||||
# The unexpected exception has been fixed manually
|
||||
internal_net_removed.side_effect = None
|
||||
|
||||
# _sync_routers_task finds out that _rpc_loop failed to process the
|
||||
# router last time, it will retry in the next run.
|
||||
# periodic_sync_routers_task finds out that _rpc_loop failed to
|
||||
# process the router last time, it will retry in the next run.
|
||||
agent.process_router(ri)
|
||||
# We were able to remove the port from ri.internal_ports
|
||||
self.assertNotIn(
|
||||
@ -1840,7 +1840,7 @@ vrrp_instance VR_1 {
|
||||
|
||||
self.conf.set_override('router_id', '1234')
|
||||
agent = l3_agent.L3NATAgent(HOSTNAME, self.conf)
|
||||
self.assertEqual(['1234'], agent._router_ids())
|
||||
self.assertEqual('1234', agent.conf.router_id)
|
||||
self.assertFalse(agent._clean_stale_namespaces)
|
||||
|
||||
def test_process_router_if_compatible_with_no_ext_net_in_conf(self):
|
||||
|
Loading…
x
Reference in New Issue
Block a user