From e806603a6e4ac3d488a0cadb1e962507a6f76fc1 Mon Sep 17 00:00:00 2001 From: Anssi Kääriäinen Date: Thu, 5 Jul 2012 14:06:21 +0300 Subject: Fixed issue #230 -- Avoid queries in aborted transactions On PostgreSQL when the transaction is in aborted status, checking connection.isolation_level will result in an error. --- debug_toolbar/utils/tracking/db.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'debug_toolbar/utils/tracking/db.py') diff --git a/debug_toolbar/utils/tracking/db.py b/debug_toolbar/utils/tracking/db.py index 4d87090..01b4331 100644 --- a/debug_toolbar/utils/tracking/db.py +++ b/debug_toolbar/utils/tracking/db.py @@ -146,10 +146,17 @@ class NormalCursorWrapper(object): } if engine == 'psycopg2': + # If an erroneous query was ran on the connection, it might + # be in a state where checking isolation_level raises an + # exception. + try: + iso_level = conn.isolation_level + except conn.InternalError: + iso_level = 'unknown' params.update({ 'trans_id': self.logger.get_transaction_id(alias), 'trans_status': conn.get_transaction_status(), - 'iso_level': conn.isolation_level, + 'iso_level': iso_level, 'encoding': conn.encoding, }) -- cgit v1.2.3 From c1f7b3a273600b94dc433902c0a480dc8874d26a Mon Sep 17 00:00:00 2001 From: Anssi Kääriäinen Date: Mon, 27 Aug 2012 15:29:20 +0300 Subject: Made usable connections with alias not in db.connections --- debug_toolbar/utils/tracking/db.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'debug_toolbar/utils/tracking/db.py') diff --git a/debug_toolbar/utils/tracking/db.py b/debug_toolbar/utils/tracking/db.py index 01b4331..2c82920 100644 --- a/debug_toolbar/utils/tracking/db.py +++ b/debug_toolbar/utils/tracking/db.py @@ -88,6 +88,14 @@ class NormalCursorWrapper(object): try: return self.cursor.execute(sql, params) finally: + # FIXME: Sometimes connections which are not in the connections + # dict are used (for example in test database destroying). + # The code below (at least get_transaction_id(alias) needs to have + # the connection in the connections dict. It would be good to + # not have this requirement at all, but for now lets just skip + # these connections. + if self.db.alias not in connections: + return stop = datetime.now() duration = ms_from_timedelta(stop - start) enable_stacktraces = getattr(settings, @@ -119,7 +127,7 @@ class NormalCursorWrapper(object): del cur_frame alias = getattr(self.db, 'alias', 'default') - conn = connections[alias].connection + conn = self.db.connection # HACK: avoid imports if conn: engine = conn.__class__.__module__.split('.', 1)[0] -- cgit v1.2.3