summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2006-06-27 23:56:14 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2006-06-27 23:56:14 +0000
commit7626fc5aab8b625bb6e48e7374d4622efc7f1e5a (patch)
tree9cc54c1ae8777d9fe3d4d2330d83d0ab1790ff86
parentd4cbae66037338ea8f727cdaa6ce47844af2be0c (diff)
downloadsqlalchemy-7626fc5aab8b625bb6e48e7374d4622efc7f1e5a.tar.gz
fixes to pool_invalidate [ticket:224]rel_0_2_4
-rw-r--r--CHANGES1
-rw-r--r--lib/sqlalchemy/pool.py16
2 files changed, 10 insertions, 7 deletions
diff --git a/CHANGES b/CHANGES
index 2854a58e9..05e0d7f0d 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 006328d7d..9aa149d5e 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: