]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- allow a separate template database to be used for
authorMike Bayer <mike_mp@zzzcomputing.com>
Tue, 22 Aug 2017 17:12:43 +0000 (13:12 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Tue, 22 Aug 2017 17:25:58 +0000 (13:25 -0400)
PG CREATE DATABASE.  as nobody will connect to it that would
solve the contention issue here
- backport --nomemory since tox.ini is using it

Change-Id: I00a4d52091876e120faff4a8a5493c53280d96f1
(cherry picked from commit 4c306818396c8cc98a16a14c5ed3361cf6ff373a)

lib/sqlalchemy/testing/plugin/plugin_base.py
lib/sqlalchemy/testing/provision.py

index 860303882621b88593eac379cf5ae9fefd0c9ab4..18f5e035743938b8b667a979ebcf3b7b1ca42469 100644 (file)
@@ -63,6 +63,11 @@ def setup_options(make_option):
                 help="Drop all tables in the target database first")
     make_option("--backend-only", action="store_true", dest="backend_only",
                 help="Run only tests marked with __backend__")
+    make_option("--nomemory", action="store_true", dest="nomemory",
+                help="Don't run memory profiling tests")
+    make_option("--postgresql-templatedb", type="string",
+                help="name of template database to use for Postgresql "
+                     "CREATE DATABASE (defaults to current database)")
     make_option("--low-connections", action="store_true",
                 dest="low_connections",
                 help="Use a low number of distinct connections - "
@@ -228,6 +233,12 @@ def _setup_options(opt, file_config):
     options = opt
 
 
+@pre
+def _set_nomemory(opt, file_config):
+    if opt.nomemory:
+        exclude_tags.add("memory_intensive")
+
+
 @pre
 def _monkeypatch_cdecimal(options, file_config):
     if options.cdecimal:
index f62024084ad5e9267473d3d678e72535de7be50c..125479d315931a83a026d8ebd1d4a0ded6d8dfa9 100644 (file)
@@ -159,23 +159,26 @@ def _sqlite_post_configure_engine(url, engine, follower_ident):
 
 @_create_db.for_db("postgresql")
 def _pg_create_db(cfg, eng, ident):
+    template_db = cfg.options.postgresql_templatedb
+
     with eng.connect().execution_options(
             isolation_level="AUTOCOMMIT") as conn:
         try:
             _pg_drop_db(cfg, conn, ident)
         except Exception:
             pass
-        currentdb = conn.scalar("select current_database()")
-        for attempt in range(10):
+        if not template_db:
+            template_db = conn.scalar("select current_database()")
+        for attempt in range(3):
             try:
                 conn.execute(
-                    "CREATE DATABASE %s TEMPLATE %s" % (ident, currentdb))
+                    "CREATE DATABASE %s TEMPLATE %s" % (ident, template_db))
             except exc.OperationalError as err:
                 if "accessed by other users" in str(err):
                     log.info(
                         "Waiting to create %s, URI %r, "
-                        "template DB is in use sleeping for .5",
-                        ident, eng.url)
+                        "template DB %s is in use sleeping for .5",
+                        ident, eng.url, template_db)
                     time.sleep(.5)
             else:
                 break