[Twisted-Python] Adbapi, cp_reconnect and MySQL
Yanick Dufresne
yanick at iotum.com
Tue Jul 5 10:06:50 MDT 2005
Hi all, quick question:
In adbapi's Transaction.reopen:
def reopen(self):
if self._connection is None:
self.reconnect()
if self._cursor is not None:
self.close()
try:
self._cursor = self._connection.cursor()
return
except:
if not self._pool.reconnect:
raise
My understand of the goal of cp_reconnect is to ensure that at the
beginning of a query, the connection be re-established if it timed out
since the last query (I understand that trying to reconnect in the
middle of an interaction could potentially have undesired and
unpredictable effects).
The code above seems to assume that self._connection.cursor() will raise
ConnectionLost if the connection has timed out.
My question is two-fold:
1) should it not specifically check for ConnectionLost rather than catch
everything?
2) I don't know about other backends, but MySQL will cheerfully give you
a cursor object whenever you ask for one, and only raises ConnectionLost
when you actually call execute on the cursor, making the code above
completely ineffective. Anyone has a clever solution to this, short of
inserting " self._cursor.execute(self._pool.good_sql)" in the
try block? That works, but isn't exactly performance friendly...
Any help appreciated,
Yanick Dufresne
Iotum Corporation
More information about the Twisted-Python
mailing list