Add a new process to spawn the plugin services in the Neutron server
When using the Neutron WSGI module, the plugin services (periodic workers created on demand in the ML2 plugin initialization) were not spawned. This patch adds a new service that should be spawned within the Neutron API processes, similar to the RPC server. Closes-Bug: #2069581 Change-Id: Ia5376a68bfbcff4156800f550f28b59944b863c3
This commit is contained in:
parent
305e1451bb
commit
811f74d943
@ -12,6 +12,7 @@
|
||||
|
||||
from neutron import server
|
||||
from neutron.server import api_eventlet
|
||||
from neutron.server import periodic_eventlet
|
||||
from neutron.server import rpc_eventlet
|
||||
from neutron.server import wsgi_eventlet
|
||||
|
||||
@ -26,3 +27,7 @@ def main_rpc_eventlet():
|
||||
|
||||
def main_api_eventlet():
|
||||
return server.boot_server(api_eventlet.eventlet_api_server)
|
||||
|
||||
|
||||
def main_periodic_eventlet():
|
||||
server.boot_server(periodic_eventlet.eventlet_periodic_workers)
|
||||
|
38
neutron/server/periodic_eventlet.py
Normal file
38
neutron/server/periodic_eventlet.py
Normal file
@ -0,0 +1,38 @@
|
||||
# Copyright (c) 2024 Red Hat, 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.
|
||||
|
||||
from neutron_lib.api import attributes
|
||||
from oslo_log import log
|
||||
|
||||
from neutron.api import extensions
|
||||
from neutron import manager
|
||||
from neutron import service
|
||||
|
||||
LOG = log.getLogger(__name__)
|
||||
|
||||
|
||||
def eventlet_periodic_workers():
|
||||
LOG.info('Eventlet based periodic workers process starting...')
|
||||
|
||||
try:
|
||||
manager.init()
|
||||
ext_mgr = extensions.PluginAwareExtensionManager.get_instance()
|
||||
ext_mgr.extend_resources('2.0', attributes.RESOURCES)
|
||||
periodic_workers_launcher = service.start_periodic_workers()
|
||||
except NotImplementedError:
|
||||
LOG.info('Periodic workers process was already started in '
|
||||
'parent process by plugin.')
|
||||
else:
|
||||
periodic_workers_launcher.wait()
|
@ -310,6 +310,13 @@ def start_rpc_workers():
|
||||
return launcher
|
||||
|
||||
|
||||
def start_periodic_workers():
|
||||
periodic_workers = _get_plugins_workers()
|
||||
launcher = _start_workers(periodic_workers)
|
||||
registry.publish(resources.PROCESS, events.AFTER_SPAWN, None)
|
||||
return launcher
|
||||
|
||||
|
||||
def start_plugins_workers():
|
||||
plugins_workers = _get_plugins_workers()
|
||||
return _start_workers(plugins_workers)
|
||||
|
@ -57,6 +57,7 @@ console_scripts =
|
||||
neutron-metering-agent = neutron.cmd.eventlet.services.metering_agent:main
|
||||
neutron-sriov-nic-agent = neutron.cmd.eventlet.plugins.sriov_nic_neutron_agent:main
|
||||
neutron-sanity-check = neutron.cmd.sanity_check:main
|
||||
neutron-periodic-workers = neutron.cmd.eventlet.server:main_periodic_eventlet
|
||||
neutron-status = neutron.cmd.status:main
|
||||
neutron-ovn-agent = neutron.cmd.eventlet.agents.ovn_neutron_agent:main
|
||||
neutron-ovn-metadata-agent = neutron.cmd.eventlet.agents.ovn_metadata:main
|
||||
|
Loading…
Reference in New Issue
Block a user