Skip to content

Commit

Permalink
Eventlet green threads not released back to pool
Browse files Browse the repository at this point in the history
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.

Conflicts:
        cinder/wsgi.py
        etc/cinder/cinder.conf.sample

SecurityImpact

Closes-Bug: #1361360
Change-Id: Ic57b2aceb136e8626388cfe4df72b2f47cb0661c
(cherry picked from commit fc87da7)
  • Loading branch information
abhishekkekane committed Oct 30, 2014
1 parent 3e6c4e6 commit b57c024
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 1 deletion.
8 changes: 7 additions & 1 deletion cinder/wsgi.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,11 @@
"max_header_line may need to be increased when using "
"large tokens (typically those generated by the "
"Keystone v3 API with big service catalogs)."),
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
Expand Down Expand Up @@ -229,7 +234,8 @@ def start(self):
'site': self.app,
'protocol': self._protocol,
'custom_pool': self._pool,
'log': self._wsgi_logger
'log': self._wsgi_logger,
'keepalive': CONF.wsgi_keep_alive
}

self._server = eventlet.spawn(**wsgi_kwargs)
Expand Down
5 changes: 5 additions & 0 deletions etc/cinder/cinder.conf.sample
Original file line number Diff line number Diff line change
Expand Up @@ -305,6 +305,11 @@
# with big service catalogs). (integer value)
#max_header_line=16384

# 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
Expand Down

0 comments on commit b57c024

Please sign in to comment.