From 30433383c7042e1cab5df6edd7778ed0e0156b3b Mon Sep 17 00:00:00 2001 From: Roman Podoliaka Date: Mon, 5 Jan 2015 11:28:54 +0200 Subject: [PATCH] Ensure PostgreSQL connection errors are wrapped Currently PostgreSQL connection errors are not wrapped with our custom DBConnectionError and engine.connect() will raise OperationalError instead. Change-Id: Iefdb9a99ca0cbe982bf12cb7e1ac47996fc5a025 --- oslo_db/sqlalchemy/exc_filters.py | 1 + oslo_db/tests/sqlalchemy/test_exc_filters.py | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/oslo_db/sqlalchemy/exc_filters.py b/oslo_db/sqlalchemy/exc_filters.py index efdbb2f7..aa5b55a7 100644 --- a/oslo_db/sqlalchemy/exc_filters.py +++ b/oslo_db/sqlalchemy/exc_filters.py @@ -270,6 +270,7 @@ def _raise_operational_errors_directly_filter(operational_error, @filters("mysql", sqla_exc.OperationalError, r".*\(.*(?:2002|2003|2006|2013)") +@filters("postgresql", sqla_exc.OperationalError, r".*could not connect to server") # noqa @filters("ibm_db_sa", sqla_exc.OperationalError, r".*(?:30081)") def _is_db_connection_error(operational_error, match, engine_name, is_disconnect): diff --git a/oslo_db/tests/sqlalchemy/test_exc_filters.py b/oslo_db/tests/sqlalchemy/test_exc_filters.py index 157a183e..b2845a22 100644 --- a/oslo_db/tests/sqlalchemy/test_exc_filters.py +++ b/oslo_db/tests/sqlalchemy/test_exc_filters.py @@ -745,6 +745,21 @@ class TestDBDisconnected(TestsExceptionFilter): is_disconnect=False ) + def test_postgresql_ping_listener_disconnected(self): + self._test_ping_listener_disconnected( + "postgresql", + self.OperationalError( + "could not connect to server: Connection refused"), + ) + + def test_postgresql_ping_listener_disconnected_regex_only(self): + self._test_ping_listener_disconnected( + "postgresql", + self.OperationalError( + "could not connect to server: Connection refused"), + is_disconnect=False + ) + class TestDBConnectRetry(TestsExceptionFilter):