098d99d701
When the L3 agent starts up and runs the sync task it doesn't process any incoming RPC events until the sync task is complete. This change combines the work from _rpc_loop and _sync_routers_task in to a single loop called _process_routers_loop. This loop spawns threads that pull from a priority queue. The queue ensures that RPC messages are handled before _process_routers_loop. The latter is generally maintenance tasks triggered by the agent rather than user triggered tasks. Synchronization between RPC and sync routers loops is no longer necessary since they both feed in to a single queue. There were places where it was necessary to reorder some things to allow for the lack of synchronization. For example, it is necessary to list namespaces before fetching the full list of routers to ensure that it doesn't delete a new namespace that gets created after listing namespaces. The lack of the need for synchronization between loops is probably the main strength of this patch. With multiple worker threads, need to handle the case where an RPC message came in while a thread was working on a router. Another thread should not handle the same router that is already in progress. Adds a mechanism to signal to the working thread that an update came in for the router it is working on. The original thread will repeat processing the router when it is finished to get the update. Multiple rapid updates to the same router will be consolidated. Essentially, there is still synchronization of work for a given router but not between routers. Much better than before. blueprint l3-agent-responsiveness Closes-Bug: #1289066 Change-Id: I39afe86c66f864d71adf865d7bd1c9db35511505 |
||
---|---|---|
.. | ||
common | ||
linux | ||
metadata | ||
__init__.py | ||
dhcp_agent.py | ||
firewall.py | ||
l2population_rpc.py | ||
l3_agent.py | ||
netns_cleanup_util.py | ||
ovs_cleanup_util.py | ||
rpc.py | ||
securitygroups_rpc.py |