Comment 46 for bug 1780139

Revision history for this message
Bernard Cafarelli (bcafarel) wrote :

Finally found the root cause here!

First, this is most probably not an issue if using WSGI for neutron API

For "standard" setups, parts of neutron-server startup are:
server/wsgi_eventlet.py: start wsgi/api, then start all workers
For wsgi, eventlet_wsgi_server() will eventually result in wsgi.Server.start() call. For multiple workers it will call oslo.service ProcessLauncher (stored in self._server)

For other workers, service.start_all_workers() which in _start_workers() will create a worker launcher (if we have process_workers), which is another call to oslo.service ProcessLauncher

oslo.service https://docs.openstack.org/oslo.service/latest/user/usage.html#launchers strongly recommends not to use multiple instances of ProcessLauncher in the same process (probably because at creation it does a few global actions, especially on signal handlers).

So what happens is RPC processes signals end up on the wsgi ProcessLauncher, which as shown in previous comment, does not know them. It also shows RPC processes are handled correctly with api_workers=0 (where there is only one ProcessLauncher).

Planned fix will be to reuse the neutron API ProcessLauncher instance if it is set