From 7626fc5aab8b625bb6e48e7374d4622efc7f1e5a Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Tue, 27 Jun 2006 23:56:14 +0000 Subject: [PATCH] fixes to pool_invalidate [ticket:224] --- CHANGES | 1 + lib/sqlalchemy/pool.py | 16 +++++++++------- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/CHANGES b/CHANGES index 2854a58e97..05e0d7f0de 100644 --- a/CHANGES +++ b/CHANGES @@ -34,6 +34,7 @@ arguments to be propigated [ticket:221] - new MySQL types: MSEnum, MSTinyText, MSMediumText, MSLongText, etc. more support for MS-specific length/precision params in numeric types patch courtesy Mike Bernson +- some fixes to connection pool invalidate() [ticket:224] 0.2.3 - overhaul to mapper compilation to be deferred. this allows mappers diff --git a/lib/sqlalchemy/pool.py b/lib/sqlalchemy/pool.py index 006328d7dc..9aa149d5ec 100644 --- a/lib/sqlalchemy/pool.py +++ b/lib/sqlalchemy/pool.py @@ -91,20 +91,24 @@ class Pool(object): self._threadconns[thread.get_ident()] = agent return agent - def return_conn(self, agent): + def _purge_for_threadlocal(self): if self._use_threadlocal: try: del self._threadconns[thread.get_ident()] except KeyError: pass + + def return_conn(self, agent): + self._purge_for_threadlocal() self.do_return_conn(agent.connection) + + def return_invalid(self): + self._purge_for_threadlocal() + self.do_return_invalid() def get(self): return self.do_get() - def return_invalid(self): - self.do_return_invalid() - def do_get(self): raise NotImplementedError() @@ -138,7 +142,6 @@ class ConnectionFairy(object): def invalidate(self): if self.pool.echo: self.pool.log("Invalidate connection %s" % repr(self.connection)) - self.connection.rollback() self.connection = None self.pool.return_invalid() def cursor(self, *args, **kwargs): @@ -220,8 +223,7 @@ class QueuePool(Pool): self._overflow -= 1 def do_return_invalid(self): - if self._pool.full(): - self._overflow -= 1 + self._overflow -= 1 def do_get(self): try: -- 2.47.2