From fc87da7eeb3451e139ee71b31095d0b9093332ce Mon Sep 17 00:00:00 2001 From: abhishekkekane Date: Tue, 21 Oct 2014 02:31:15 -0700 Subject: [PATCH] Eventlet green threads not released back to pool Presently, the wsgi server allows persist connections hence even after the response is sent to the client, it doesn't close the client socket connection. Because of this problem, the green thread is not released back to the pool. In order to close the client socket connection explicitly after the response is sent and read successfully by the client, you simply have to set keepalive to False when you create a wsgi server. DocImpact: Added wsgi_keep_alive option (default=True). In order to maintain the backward compatibility, setting wsgi_keep_alive as True by default. Recommended is set it to False. SecurityImpact Closes-Bug: #1361360 Change-Id: Ic57b2aceb136e8626388cfe4df72b2f47cb0661c --- cinder/wsgi.py | 8 +++++++- etc/cinder/cinder.conf.sample | 5 +++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/cinder/wsgi.py b/cinder/wsgi.py index a7cfbcb49..ff4b2d545 100644 --- a/cinder/wsgi.py +++ b/cinder/wsgi.py @@ -84,6 +84,11 @@ eventlet_opts = [ "If an incoming connection is idle for this number of " "seconds it will be closed. A value of \'0\' means " "wait forever."), + cfg.BoolOpt('wsgi_keep_alive', + default=True, + help='If False, closes the client socket connection ' + 'explicitly. Setting it to True to maintain backward ' + 'compatibility. Recommended setting is set it to False.'), ] CONF = cfg.CONF @@ -236,7 +241,8 @@ class Server(object): 'protocol': self._protocol, 'custom_pool': self._pool, 'log': self._wsgi_logger, - 'socket_timeout': self.client_socket_timeout + 'socket_timeout': self.client_socket_timeout, + 'keepalive': CONF.wsgi_keep_alive } self._server = eventlet.spawn(**wsgi_kwargs) diff --git a/etc/cinder/cinder.conf.sample b/etc/cinder/cinder.conf.sample index 656393c76..6665e30ce 100644 --- a/etc/cinder/cinder.conf.sample +++ b/etc/cinder/cinder.conf.sample @@ -311,6 +311,11 @@ # value) #client_socket_timeout=900 +# If False, closes the client socket connection explicitly. +# Setting it to True to maintain backward compatibility. +# Recommended setting is set it to False. (boolean value) +#wsgi_keep_alive=true + # Sets the value of TCP_KEEPALIVE (True/False) for each server # socket. (boolean value) #tcp_keepalive=true -- 2.45.2