Comment 8 for bug 1423250

Revision history for this message
Elena Ezhova (eezhova) wrote :

It seems that the problem in keystone has the same nature as the one in neutron. A wsgi server is started in a green thread from the same green pool that as passed to the server as a custom pool which is used to handle client requests [1],[2]. So when we try to stop a server, waitall() is eventually called for all green threads in that pool, including the thread which issued that call. And that results in an exception that is observed in logs.

There is a working fix for neutron [3], which is currently under review, that simply uses different pools for spawning
a wsgi server and for its internal usage. Comments are highly appreciated.

[1] https://github.com/openstack/keystone/blob/b72fb2feeb066ec09ee4b6c6b6cc680e8a8f37b7/keystone/common/environment/eventlet_server.py#L138
[2] https://github.com/openstack/keystone/blob/b72fb2feeb066ec09ee4b6c6b6cc680e8a8f37b7/keystone/common/environment/eventlet_server.py#L178
[3] https://review.openstack.org/#/c/157320