neutron/neutron/services/l3_router
Eugene Nikanorov de5bdc9cc2 Consume service plugins queues in RPC workers.
This patch adds all RPC workers to consumers of service
plugins queues such as metering and l3-plugin.
This is important for DVR-enabled deployments with hundreds
of agents.

Closes-Bug: #1498844
(cherry picked from commit 5be613490d)

===

Also include the following fix that keeps backwards compatibility with
plugins that don't implement start_rpc_listeners method:

Check if plugin supports starting rpc listeners

When neutron starts an rpc worker, it checks if the plugin has the method
"start_rpc_listeners".  Since most plugins inherit from a base class, and
that base class implements the start_rpc_listeners method and raises
NotImplementedError, the rpc worker will attempt to call that method.
It should just catch the NotImplementedError and continue on.

Change-Id: Ie1830b6140acffffd0f283a0d8eefa52067f7650
Closes-Bug: 1551542
(cherry picked from commit cd7be292a8)

===

Change-Id: I6fea7f409c91b25d2c35b038d6100fdfa85d1905
2016-04-18 16:54:53 +02:00
..
brocade Fix minor errors in the Vyatta L3 Plugin: 2015-05-20 17:38:39 -07:00
README Adds support for L3 routing/NAT as a service plugin 2013-09-11 12:12:10 +02:00
__init__.py Empty files should not contain copyright or license 2014-10-20 00:50:32 +00:00
l3_router_plugin.py Consume service plugins queues in RPC workers. 2016-04-18 16:54:53 +02:00
l3_sdnve.py Remove lingering traces of q_ 2015-07-07 17:04:44 -04:00

README

This service plugin implements the L3 routing functionality (resources router
and floatingip) that in earlier releases before Havana was provided by core
plugins (openvswitch, linuxbridge, ... etc).

Core plugins can now choose not to implement L3 routing functionality and
instead delegate that to the L3 routing service plugin.

The required changes to a core plugin are in that case:
- Do not inherit 'l3_db.L3_NAT_db_mixin' (or its descendants like extraroute)
  anymore.
- Remove "router" from 'supported_extension_aliases'.
- Modify any 'self' references to members in L3_NAT_db_mixin to instead use
  'manager.NeutronManager.get_service_plugins().get(constants.L3_ROUTER_NAT)'
  For example,
     self.prevent_l3_port_deletion(...)
  becomes something like
     plugin = manager.NeutronManager.get_service_plugins().get(
         constants.L3_ROUTER_NAT)
     if plugin:
         plugin.prevent_l3_port_deletion(...)

If the core plugin has relied on the L3Agent the following must also be changed:
- Do not inherit 'l3_rpc_base.L3RpcCallbackMixin' in any '*RpcCallbacks' class.
- Do not be a consumer of the topics.L3PLUGIN topic for RPC.

To use the L3 routing service plugin, add
'neutron.services.l3_router.l3_router_plugin.L3RouterPlugin'
to 'service_plugins' in '/etc/neutron/neutron.conf'.
That is,
service_plugins = neutron.services.l3_router.l3_router_plugin.L3RouterPlugin