Service workers stop re-writing the process name
In a Neutron server, there are workers that are not spawned in a single process. These processes are grouped and spawned within a service class called ``AllServicesNeutronWorker``. This class spawns a thread per service worker. That reduces the footprint of the Neutron server, reducing the number of processes spawned. Depends-On: https://review.opendev.org/c/openstack/neutron-lib/+/922085 Related-Bug: #2069595 Change-Id: I24313dc891f179a600909854dd8f9a09f74088f5
This commit is contained in:
parent
f17cc24e8a
commit
6168db6058
@ -24,6 +24,7 @@ from neutron_lib import context
|
|||||||
from neutron_lib.db import api as session
|
from neutron_lib.db import api as session
|
||||||
from neutron_lib.plugins import directory
|
from neutron_lib.plugins import directory
|
||||||
from neutron_lib import rpc as n_rpc
|
from neutron_lib import rpc as n_rpc
|
||||||
|
from neutron_lib import worker as base_worker
|
||||||
from oslo_concurrency import processutils
|
from oslo_concurrency import processutils
|
||||||
from oslo_config import cfg
|
from oslo_config import cfg
|
||||||
from oslo_log import log as logging
|
from oslo_log import log as logging
|
||||||
@ -34,6 +35,7 @@ from oslo_utils import excutils
|
|||||||
from oslo_utils import importutils
|
from oslo_utils import importutils
|
||||||
import psutil
|
import psutil
|
||||||
|
|
||||||
|
from neutron._i18n import _
|
||||||
from neutron.api import wsgi
|
from neutron.api import wsgi
|
||||||
from neutron.common import config
|
from neutron.common import config
|
||||||
from neutron.common import profiler
|
from neutron.common import profiler
|
||||||
@ -238,11 +240,16 @@ class AllServicesNeutronWorker(neutron_worker.NeutronBaseWorker):
|
|||||||
def __init__(self, services, worker_process_count=1):
|
def __init__(self, services, worker_process_count=1):
|
||||||
super(AllServicesNeutronWorker, self).__init__(worker_process_count)
|
super(AllServicesNeutronWorker, self).__init__(worker_process_count)
|
||||||
self._services = services
|
self._services = services
|
||||||
|
for srv in self._services:
|
||||||
|
self._check_base_worker_service(srv)
|
||||||
self._launcher = common_service.Launcher(cfg.CONF,
|
self._launcher = common_service.Launcher(cfg.CONF,
|
||||||
restart_method='mutate')
|
restart_method='mutate')
|
||||||
|
|
||||||
def start(self):
|
def start(self):
|
||||||
for srv in self._services:
|
for srv in self._services:
|
||||||
|
# Unset the 'set_proctitle' flag to prevent each service to
|
||||||
|
# re-write the process title already defined and set by this class.
|
||||||
|
srv.set_proctitle = 'off'
|
||||||
self._launcher.launch_service(srv)
|
self._launcher.launch_service(srv)
|
||||||
super(AllServicesNeutronWorker, self).start(desc="services worker")
|
super(AllServicesNeutronWorker, self).start(desc="services worker")
|
||||||
|
|
||||||
@ -255,6 +262,13 @@ class AllServicesNeutronWorker(neutron_worker.NeutronBaseWorker):
|
|||||||
def reset(self):
|
def reset(self):
|
||||||
self._launcher.restart()
|
self._launcher.restart()
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _check_base_worker_service(srv):
|
||||||
|
if not isinstance(srv, base_worker.BaseWorker):
|
||||||
|
raise TypeError(
|
||||||
|
_('Service %(srv)s must an instance of %(base)s!)') %
|
||||||
|
{'srv': srv, 'base': base_worker.BaseWorker})
|
||||||
|
|
||||||
|
|
||||||
def _start_workers(workers, neutron_api=None):
|
def _start_workers(workers, neutron_api=None):
|
||||||
process_workers = [
|
process_workers = [
|
||||||
|
Loading…
Reference in New Issue
Block a user