9f6bd17703
There are several cases where plugin initialization should be handled after neutron-server forks API/RPC workers. For example, starting a client connection to an SDN controller before forking copies the fd of the socket to the child process, but then you have multiple processes trying to read/write the same socket connection. It is also useful for a plugin to be able to do something in only one process, regardless of how many workers are forked. One example would be handling syncing from an external system to the neutron database. This patch does 3 things: 1) Treats rpc_workers=0 as = 1. This simplifies the code for handling notification that forking has completed. In the existing code, calling the notification in the Worker object's start() method would happen twice in the case where both api and rpc workers were 0, despite there being only one process. An earlier patch already changed the default api_workers to be the number of processors. 2) Adds notification of forking via the callbacks mechanism. Plugins can subscribe to resources.PROCESS, event.AFTER_CREATE and do any post-fork initialization that needs to be done for every spawned process. 3) Adds core/service plugin calls to get_workers() which defaults to returning (). Plugins that need additional processes to spawn should just return an iterable of NeutronWorkers that will be spawned in their own process. DocImpact Closes-Bug: #1463129 Change-Id: Ib99954678c2b4f32f486b537979d446aafbea07b |
||
---|---|---|
.. | ||
brocade | ||
README | ||
__init__.py | ||
l3_router_plugin.py | ||
l3_sdnve.py |
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