From 5de1c82c316614c43e4186e744258a6058aefd6c Mon Sep 17 00:00:00 2001 From: Jonty Wareing Date: Tue, 2 Jul 2013 19:29:02 +0000 Subject: [PATCH] Handle rollback/commit with failed connection If a rollback or commit is attempted after the connection has failed Django's BaseDatabaseWrapper does not know to check the validity of the database connection and may fail due to the connection already being closed. This is especially a problem when django is attempting to automatically roll back transactions at the end of a request that has already failed due to a database error and will result in the default "Server Error" page being displayed as django cannot handle the error. --- django_postgrespool/base.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/django_postgrespool/base.py b/django_postgrespool/base.py index d78966a..43e0737 100644 --- a/django_postgrespool/base.py +++ b/django_postgrespool/base.py @@ -134,6 +134,14 @@ class DatabaseWrapper(Psycopg2DatabaseWrapper): cursor.tzinfo_factory = utc_tzinfo_factory if settings.USE_TZ else None return CursorWrapper(cursor, self.connection) + def _commit(self): + if self.connection is not None and self.connection.is_valid: + return self.connection.commit() + + def _rollback(self): + if self.connection is not None and self.connection.is_valid: + return self.connection.rollback() + def _dispose(self): """Dispose of the pool for this instance, closing all connections.""" self.close()