Drop expired connections before retrieving from the queue

If all the connections in the queue have expired, we don't want to
return any of them.  Because we previously dropped connections only
after retrieval, it was possible we would choose and return a dead
connection.  Doing the cleanup first should prevent that.

Change-Id: I650537e7b44d6bdd552def6a3b2de42a60ed9b94
Closes-Bug: 1775341
This commit is contained in:
Ben Nemec 2018-08-30 20:41:21 +00:00
parent 941c728706
commit 43c6279a7e
1 changed files with 1 additions and 1 deletions

View File

@ -123,6 +123,7 @@ class ConnectionPool(queue.Queue):
@contextlib.contextmanager
def acquire(self):
self._trace_logger('Acquiring connection')
self._drop_expired_connections()
try:
conn = self.get(timeout=self._connection_get_timeout)
except queue.Empty:
@ -135,7 +136,6 @@ class ConnectionPool(queue.Queue):
yield conn
finally:
self._trace_logger('Releasing connection %s', id(conn))
self._drop_expired_connections()
try:
# super() cannot be used here because Queue in stdlib is an
# old-style class