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:
parent
941c728706
commit
43c6279a7e
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue