the new pool. This fix may or may
not be ported to 0.7. [ticket:2522]
+ - [bug] Fixed bug whereby if a database restart
+ affected multiple connections, each
+ connection would individually invoke a new
+ disposal of the pool, even though only
+ one disposal is needed. [ticket:2522]
+
- [feature] Added a new system
for registration of new dialects in-process
without using an entrypoint. See the
if is_disconnect:
+ dbapi_conn_wrapper = self.connection
self.invalidate(e)
- self.engine.dispose()
+ if not hasattr(dbapi_conn_wrapper, '_pool') or \
+ dbapi_conn_wrapper._pool is self.engine.pool:
+ self.engine.dispose()
else:
if cursor:
self._safe_close_cursor(cursor)
conn.close()
+ def test_multiple_invalidate(self):
+ c1 = engine.connect()
+ c2 = engine.connect()
+
+ eq_(c1.execute(select([1])).scalar(), 1)
+
+ p1 = engine.pool
+ engine.test_shutdown()
+
+ try:
+ c1.execute(select([1]))
+ assert False
+ except tsa.exc.DBAPIError, e:
+ assert e.connection_invalidated
+
+ p2 = engine.pool
+
+ try:
+ c2.execute(select([1]))
+ assert False
+ except tsa.exc.DBAPIError, e:
+ assert e.connection_invalidated
+
+ # pool isn't replaced
+ assert engine.pool is p2
+
+
def test_ensure_is_disconnect_gets_connection(self):
def is_disconnect(e, conn, cursor):
# connection is still present