FSX / momoko

Wraps (asynchronous) Psycopg2 for Tornado.
http://momoko.61924.nl/
Other
363 stars 73 forks source link

Non psycopg2 exception can lock connection #79

Closed nxsofsys closed 9 years ago

nxsofsys commented 9 years ago

For example I have code like this and only one connection in pool:

        try:
            cursor = yield momoko.Op(self.db.execute, 'SELECT %s FROM %s'
                ,()) # rises TypeError
        except Exception as e:
            print e
            cursor = yield momoko.Op(self.db.execute, 'SELECT 1'
                ,())
            print 'Done' #unreachable

This code rises TypeError, but second query can't obtain connection. Debug log is:

[D 141115 18:00:26 connection:234] Connection attempt complete. Success: True
[D 141115 18:00:31 connection:252] Getting connection
[D 141115 18:00:31 connection:327] Connection obtained, proceeding
tuple index out of range
[D 141115 18:00:31 connection:252] Getting connection
[D 141115 18:00:31 connection:272] There are busy connections
[D 141115 18:00:31 connection:321] No connection available right now - will try again later

Changing psycopg2.Error to Exception in _catch_early_errors decorator fixes that issue, but I not sure that it right.

haizaar commented 9 years ago

Thanks for the bug report and suggestion for the fix!