2
0
mirror of https://github.com/xcat2/confluent.git synced 2025-01-17 13:13:18 +00:00

Have polling consoleserver sessions more robustly clean up

If anything goes wrong or a session was exited, no destruction of the
session would be scheduled.  Always have a reaper scheduled for that.
This commit is contained in:
Jarrod Johnson 2016-02-27 13:37:10 -05:00
parent 1df60ceb73
commit 029c06cc66

View File

@ -560,6 +560,8 @@ class ConsoleSession(object):
instead of polling mode.
"""
self.reaper.cancel()
# postpone death to be 15 seconds after this would timeout
self.reaper = eventlet.spawn_after(timeout + 15, self.destroy)
if self._evt:
raise Exception('get_next_output is not re-entrant')
if not self.databuffer:
@ -568,16 +570,12 @@ class ConsoleSession(object):
self._evt.wait()
self._evt = None
if not self.databuffer:
self.reaper = eventlet.spawn_after(15, self.destroy)
return ""
currdata = self.databuffer.popleft()
if isinstance(currdata, dict):
self.reaper = eventlet.spawn_after(15, self.destroy)
return currdata
retval = currdata
while self.databuffer and not isinstance(self.databuffer[0], dict):
retval += self.databuffer.popleft()
# the client has 15 seconds to make a new request for data before
# they are given up on
self.reaper = eventlet.spawn_after(15, self.destroy)
return retval