Improving performance of GET operations in the Nicira Plugin
High level description
Currently the Nicira plugin synchronizes the operational status for most resource at each GET request, to the aim of returning always an up-to-date information of the operational status of a resource. This however becomes a performance bottleneck especially when the REST/RPC traffic increases, as the NVP backend is hit for each GET request. Some operations, such as those from DHCP agent, tend to execute a get operation for every object they need to synchronize, thus leading to linearly increasing accesses to the NVP backend.
It's therefore advisable to move operational state synchronization to a distinct task, which can be repeated at a periodic interval. This task will synchronize the status for all the relevant resources (networks, ports, and routers). This can be achieved with a very limited number of queries to NVP (3 queries). The number of queries won't increase with the number of resources managed by Quantum; however the response size will increase. This is much more manageable however compared with executing a number of requests which increases with the data set size.
No API change will be performed as part of this blueprint
Data Model Changes
No data model change.
The following operations mapped to GET API operations will stop fetching entities from NVP to gather their operational status - get_network - get_networks - get_router - get_routers - get_port - get_ports
The operational status will always be returned by