]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- keep trying to identify the race here. can reproduce locally
authorMike Bayer <mike_mp@zzzcomputing.com>
Thu, 27 Apr 2017 21:44:29 +0000 (17:44 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Thu, 27 Apr 2017 21:44:29 +0000 (17:44 -0400)
now and it seems like mock might not be doing the right thing.

Change-Id: I5c108d82631c9217da54a8ace68d7728c3e204d8

test/engine/test_pool.py

index ffbb5f2822c54bc77fbcb47fb2759226af3bb943..9572d3a24d4359f0f12c456eaad608f6ab408ab5 100644 (file)
@@ -20,7 +20,16 @@ def MockDBAPI():  # noqa
         return Mock()
 
     def connect(*arg, **kw):
-        return Mock(cursor=Mock(side_effect=cursor))
+        def close():
+            conn.closed = True
+
+        # mock seems like it might have an issue logging
+        # call_count correctly under threading, not sure.
+        # adding a side_effect for close seems to help.
+        conn = Mock(
+            cursor=Mock(side_effect=cursor),
+            close=Mock(side_effect=close), closed=False)
+        return conn
 
     def shutdown(value):
         if value:
@@ -2016,21 +2025,12 @@ class SingletonThreadPoolTest(PoolTestBase):
                 return dbapi.connect()
         p = pool.SingletonThreadPool(creator=creator, pool_size=3)
 
-        # there's an obvious race in STP which is that one thread
-        # creates a connection, another one calls cleanup and closes
-        # it before it ever gets returned.  This is of course if you're
-        # using more threads than the pool can connect to.
-
         if strong_refs:
             sr = set()
 
             def _conn():
                 c = p.connect()
-                if not c.connection.close.call_count:
-                    sr.add(c.connection)
-                # otherwise the connection is already closed, which
-                # is because you're using 10 threads but only a pool
-                # of size 3 :).
+                sr.add(c.connection)
                 return c
         else:
             def _conn():