[Zope3-dev] Re: rdb: Disappearing Connection
Velko Ivanov
dachev at nove.bg
Thu Dec 15 16:04:28 EST 2005
jürgen Kartnaller wrote:
>
> MySQL::Ping will automatically reopen a closed connection in a way where
> the existing connection object can still be used.
> If MySQL::Ping fails something really bad is going on.
>
> To reduce the number of ping's in my application I used a timer which
> was tested before every call to a database function.
> If the timer expired I did a ping to ensure mysql is reconnected.
>
>
> This is the code sqlobject is using :
>
> while (1):
> try:
> return cursor.execute(query)
> except MySQLdb.OperationalError, e:
> if e.args[0] == 2013: # SERVER_LOST error
> if self.debug:
> self.printDebug(conn, str(e), 'ERROR')
> else:
> raise
>
> So, checking for SERVER_LOST and then eventually using MySQL::Ping would
> do the trick.
>
>
> Jürgen
>
Sorry if that is mentioned somewhere, I missed the begining of the
thread, but I just want to add, that MySQL is not the only SQL server in
use. And this particular problem is not MySQL specific - I'm having
troubles with disappearing connections with PostgreSQL, which doesn't
have MySQL::Ping. The patch, that was proposed already - use a SELECT
statement to ensure the connection is available - is not the best
solution at least in my case, because my code never dares to store, or
reuse a connection, knowing that connections are being managed by Zope
(with a volatile attribute) and this turns into one getConnection() call
per request.
I was thinking about handling exceptions, because it does generate
exception at the end and I know I need to reconnect when I see it in the
log (restart the server actually, because I authenticate trough the SQL
database).
I do hope however that I will be able to configure the SQL server in a
way to prevent the connection from dissappearing at all, when the time
comes to solve this problem.
Regards
Velko Ivanov
More information about the Zope3-dev
mailing list