Merge "Introduce a separate RPC server" into feature/pecan
This commit is contained in:
commit
50dac76b06
@ -10,14 +10,20 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from neutron.server import rpc_eventlet
|
||||
from neutron.server import wsgi_eventlet
|
||||
from neutron.server import wsgi_pecan
|
||||
|
||||
|
||||
def main_wsgi_eventlet():
|
||||
# This also starts the RPC server
|
||||
wsgi_eventlet.main()
|
||||
|
||||
|
||||
# Eventlet patching is not required for Pecan, but some plugins still spawn
|
||||
# eventlet threads
|
||||
def main_wsgi_pecan():
|
||||
wsgi_pecan.main()
|
||||
|
||||
|
||||
def main_rpc_eventlet():
|
||||
rpc_eventlet.main()
|
||||
|
@ -146,17 +146,12 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2,
|
||||
self.type_manager.initialize()
|
||||
self.extension_manager.initialize()
|
||||
self.mechanism_manager.initialize()
|
||||
|
||||
self._setup_rpc()
|
||||
self._setup_dhcp()
|
||||
self._start_rpc_notifiers()
|
||||
LOG.info(_LI("Modular L2 Plugin initialization complete"))
|
||||
|
||||
def _setup_rpc(self):
|
||||
"""Initialize components to support agent communication."""
|
||||
self.notifier = rpc.AgentNotifierApi(topics.AGENT)
|
||||
self.agent_notifiers[const.AGENT_TYPE_DHCP] = (
|
||||
dhcp_rpc_agent_api.DhcpAgentNotifyAPI()
|
||||
)
|
||||
self.endpoints = [
|
||||
rpc.RpcCallbacks(self.notifier, self.type_manager),
|
||||
securitygroups_rpc.SecurityGroupServerRpcCallback(),
|
||||
@ -178,9 +173,18 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2,
|
||||
def supported_qos_rule_types(self):
|
||||
return self.mechanism_manager.supported_qos_rule_types
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def _start_rpc_notifiers(self):
|
||||
"""Initialize RPC notifiers for agents."""
|
||||
self.notifier = rpc.AgentNotifierApi(topics.AGENT)
|
||||
self.agent_notifiers[const.AGENT_TYPE_DHCP] = (
|
||||
dhcp_rpc_agent_api.DhcpAgentNotifyAPI()
|
||||
)
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def start_rpc_listeners(self):
|
||||
"""Start the RPC loop to let the plugin communicate with agents."""
|
||||
self._setup_rpc()
|
||||
self.topic = topics.PLUGIN
|
||||
self.conn = n_rpc.create_connection(new=True)
|
||||
self.conn.create_consumer(self.topic, self.endpoints, fanout=False)
|
||||
|
45
neutron/server/rpc_eventlet.py
Normal file
45
neutron/server/rpc_eventlet.py
Normal file
@ -0,0 +1,45 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
# Copyright 2011 VMware, Inc.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
# If ../neutron/__init__.py exists, add ../ to Python search path, so that
|
||||
# it will override what happens to be installed in /usr/(local/)lib/python...
|
||||
|
||||
import eventlet
|
||||
from oslo_log import log
|
||||
|
||||
from neutron.i18n import _LI
|
||||
from neutron import server
|
||||
from neutron import service
|
||||
|
||||
LOG = log.getLogger(__name__)
|
||||
|
||||
|
||||
def _eventlet_rpc_server():
|
||||
pool = eventlet.GreenPool()
|
||||
LOG.info(_LI("Eventlet based AMQP RPC server starting..."))
|
||||
try:
|
||||
neutron_rpc = service.serve_rpc()
|
||||
except NotImplementedError:
|
||||
LOG.info(_LI("RPC was already started in parent process by "
|
||||
"plugin."))
|
||||
else:
|
||||
pool.spawn(neutron_rpc.wait)
|
||||
pool.waitall()
|
||||
|
||||
|
||||
def main():
|
||||
server.boot_server(_eventlet_rpc_server)
|
@ -95,6 +95,7 @@ console_scripts =
|
||||
neutron-restproxy-agent = neutron.plugins.bigswitch.agent.restproxy_agent:main
|
||||
neutron-server = neutron.cmd.eventlet.server:main_wsgi_eventlet
|
||||
neutron-dev-server = neutron.cmd.eventlet.server:main_wsgi_pecan
|
||||
neutron-rpc-server = neutron.cmd.eventlet.server:main_rpc_eventlet
|
||||
neutron-rootwrap = oslo_rootwrap.cmd:main
|
||||
neutron-rootwrap-daemon = oslo_rootwrap.cmd:daemon
|
||||
neutron-usage-audit = neutron.cmd.usage_audit:main
|
||||
|
Loading…
x
Reference in New Issue
Block a user