summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Benton <kevin@benton.pub>2016-08-01 13:40:03 -0700
committerKevin Benton <kevin@benton.pub>2016-08-02 10:39:52 +0000
commit3277ef33f2a1f6a892f0832e2907acef7b45dc2b (patch)
tree1d7bdd0cd39752663c13dcaf20618ab7bfa42eb4
parentc5999fb2fa25bc3107ca75d7b5b6cb619118712e (diff)
downloadoslo-db-3277ef33f2a1f6a892f0832e2907acef7b45dc2b.tar.gz
Capture DatabaseError for deadlock check4.10.0
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
-rw-r--r--oslo_db/sqlalchemy/exc_filters.py2
-rw-r--r--oslo_db/tests/sqlalchemy/test_exc_filters.py3
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):