summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2021-06-26 09:55:00 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2021-06-26 09:55:00 -0400
commit3d6130d8e92dc3fd63e7192908e122fe5ee45699 (patch)
treed6bdbd3e64b0aa9063153a0ad38ac037694e8469 /lib/sqlalchemy
parent791f1d9407f68cc668c7078fa87784ebdf3bd688 (diff)
downloadsqlalchemy-3d6130d8e92dc3fd63e7192908e122fe5ee45699.tar.gz
turn pg provision error into a warning
We haven't had any real cases of the PG "cant drop tables" condition since this error was first introduced; instead we seem to get it for a non-critical query during pool reconnect tests, and I have not been able to isolate what is causing it. Therefore turn the error into a new class of warning that can emit within the test suite without failing the test, so that if we do get a real PG drop timeout, the warning will be there to show us what the query was in which it was stuck. Change-Id: I1a9b3c4f7a25b7b9c1af722a721fc44ad5575b0f
Diffstat (limited to 'lib/sqlalchemy')
-rw-r--r--lib/sqlalchemy/dialects/postgresql/provision.py12
-rw-r--r--lib/sqlalchemy/testing/__init__.py1
-rw-r--r--lib/sqlalchemy/testing/warnings.py10
3 files changed, 18 insertions, 5 deletions
diff --git a/lib/sqlalchemy/dialects/postgresql/provision.py b/lib/sqlalchemy/dialects/postgresql/provision.py
index 9196337ba..68a01e483 100644
--- a/lib/sqlalchemy/dialects/postgresql/provision.py
+++ b/lib/sqlalchemy/dialects/postgresql/provision.py
@@ -3,6 +3,7 @@ import time
from ... import exc
from ... import inspect
from ... import text
+from ...testing import warn_test_suite
from ...testing.provision import create_db
from ...testing.provision import drop_all_schema_objects_post_tables
from ...testing.provision import drop_all_schema_objects_pre_tables
@@ -118,8 +119,9 @@ def prepare_for_drop_tables(config, connection):
"and pid != pg_backend_pid()"
)
rows = result.all() # noqa
- assert not rows, (
- "PostgreSQL may not be able to DROP tables due to "
- "idle in transaction: %s"
- % ("; ".join(row._mapping["query"] for row in rows))
- )
+ if rows:
+ warn_test_suite(
+ "PostgreSQL may not be able to DROP tables due to "
+ "idle in transaction: %s"
+ % ("; ".join(row._mapping["query"] for row in rows))
+ )
diff --git a/lib/sqlalchemy/testing/__init__.py b/lib/sqlalchemy/testing/__init__.py
index a311efa74..1bb2943e1 100644
--- a/lib/sqlalchemy/testing/__init__.py
+++ b/lib/sqlalchemy/testing/__init__.py
@@ -74,6 +74,7 @@ from .util import rowset
from .util import run_as_contextmanager
from .util import teardown_events
from .warnings import assert_warnings
+from .warnings import warn_test_suite
def against(*queries):
diff --git a/lib/sqlalchemy/testing/warnings.py b/lib/sqlalchemy/testing/warnings.py
index 8810dff5d..fd7748050 100644
--- a/lib/sqlalchemy/testing/warnings.py
+++ b/lib/sqlalchemy/testing/warnings.py
@@ -11,6 +11,15 @@ import warnings
from . import assertions
from .. import exc as sa_exc
+from ..util.langhelpers import _warnings_warn
+
+
+class SATestSuiteWarning(sa_exc.SAWarning):
+ """warning for a condition detected during tests that is non-fatal"""
+
+
+def warn_test_suite(message):
+ _warnings_warn(message, category=SATestSuiteWarning)
def setup_filters():
@@ -21,6 +30,7 @@ def setup_filters():
)
warnings.filterwarnings("error", category=sa_exc.SADeprecationWarning)
warnings.filterwarnings("error", category=sa_exc.SAWarning)
+ warnings.filterwarnings("always", category=SATestSuiteWarning)
# some selected deprecations...
warnings.filterwarnings("error", category=DeprecationWarning)