From 3277ef33f2a1f6a892f0832e2907acef7b45dc2b Mon Sep 17 00:00:00 2001 From: Kevin Benton Date: Mon, 1 Aug 2016 13:40:03 -0700 Subject: [PATCH] Capture DatabaseError for deadlock check Pymysql can raise 'lock wait timeout exceeded' errors as InternalErrors. The previous filter was only catching OperationalError exceptions. This patch changes it to catch all DatabaseErrors, which both of the aforementioned exceptions inherit. Change-Id: If7bd1ceef6e5d64f0766b780616388c62862ce82 Closes-Bug: #1608691 --- oslo_db/sqlalchemy/exc_filters.py | 2 +- oslo_db/tests/sqlalchemy/test_exc_filters.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/oslo_db/sqlalchemy/exc_filters.py b/oslo_db/sqlalchemy/exc_filters.py index 466a733..051d1f8 100644 --- a/oslo_db/sqlalchemy/exc_filters.py +++ b/oslo_db/sqlalchemy/exc_filters.py @@ -59,7 +59,7 @@ def filters(dbname, exception_type, regex): # as well as sqlalchemy.exc.DBAPIError, as SQLAlchemy will reraise it # as this until issue #3075 is fixed. @filters("mysql", sqla_exc.OperationalError, r"^.*\b1213\b.*Deadlock found.*") -@filters("mysql", sqla_exc.OperationalError, +@filters("mysql", sqla_exc.DatabaseError, r"^.*\b1205\b.*Lock wait timeout exceeded.*") @filters("mysql", sqla_exc.InternalError, r"^.*\b1213\b.*Deadlock found.*") @filters("postgresql", sqla_exc.OperationalError, r"^.*deadlock detected.*") diff --git a/oslo_db/tests/sqlalchemy/test_exc_filters.py b/oslo_db/tests/sqlalchemy/test_exc_filters.py index 65fb1b1..8e3d16d 100644 --- a/oslo_db/tests/sqlalchemy/test_exc_filters.py +++ b/oslo_db/tests/sqlalchemy/test_exc_filters.py @@ -884,7 +884,8 @@ class TestDeadlock(TestsExceptionFilter): self._run_deadlock_detect_test( "mysql", "(1205, 'Lock wait timeout exceeded; " - "try restarting transaction')" + "try restarting transaction')", + orig_exception_cls=self.InternalError ) def test_mysql_mysqlconnector_deadlock(self):