]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
fixes to pool_invalidate [ticket:224] rel_0_2_4
authorMike Bayer <mike_mp@zzzcomputing.com>
Tue, 27 Jun 2006 23:56:14 +0000 (23:56 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Tue, 27 Jun 2006 23:56:14 +0000 (23:56 +0000)
CHANGES
lib/sqlalchemy/pool.py

diff --git a/CHANGES b/CHANGES
index 2854a58e9718a872df22b7cc6efcd410700d5d85..05e0d7f0dec19327cf16432ee2415d9b345a9296 100644 (file)
--- 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
index 006328d7dc2643b92b06e89ce4ca3c0a2904feb6..9aa149d5ec11cb0b9f0dce39a9a7af7a9fe310fa 100644 (file)
@@ -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: