From 543c22740822581dc26fc79dbdbebc3c9991b6ce Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Tue, 31 Jan 2006 05:20:19 +0000 Subject: [PATCH] merged fix that insures unrealized connections dont fill up the pool --- lib/sqlalchemy/pool.py | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/lib/sqlalchemy/pool.py b/lib/sqlalchemy/pool.py index e62ac709a4..fe5c29e88e 100644 --- a/lib/sqlalchemy/pool.py +++ b/lib/sqlalchemy/pool.py @@ -95,13 +95,22 @@ class Pool(object): self.log("get connection from pool") self.log(self.status()) return self.do_get() - + + def return_invalid(self): + if self._echo: + self.log("return invalid connection to pool") + self.log(self.status()) + self.do_return_invalid() + def do_get(self): raise NotImplementedError() def do_return_conn(self, conn): raise NotImplementedError() - + + def do_return_invalid(self): + raise NotImplementedError() + def status(self): raise NotImplementedError() @@ -115,6 +124,7 @@ class ConnectionFairy(object): self.connection = pool.get() except: self.connection = None + self.pool.return_invalid() raise def cursor(self): return CursorFairy(self, self.connection.cursor()) @@ -147,7 +157,12 @@ class SingletonThreadPool(Pool): def do_return_conn(self, conn): pass - + def do_return_invalid(self): + try: + del self._conns[thread.get_ident()] + except KeyError: + pass + def do_get(self): try: return self._conns[thread.get_ident()] @@ -171,6 +186,12 @@ class QueuePool(Pool): except Queue.Full: self._overflow -= 1 + def do_return_invalid(self): + if self._echo: + self.log("return invalid connection") + if self._pool.full(): + self._overflow -= 1 + def do_get(self): if self._echo: self.log("get connection from pool") -- 2.47.2