]> 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:26:30 +0000 (13:26 -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)
(cherry picked from commit 35e879fcded5b21e70d6de840532187f5d304b46)

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

index 2aeebd319254407bd33c10631abffc5fde66cf2a..aeae944fe05d909ec896ec61e05e09fcd9b86dea 100644 (file)
@@ -65,6 +65,9 @@ def setup_options(make_option):
                 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 - "
index 487b610485d9d5196ae22aa19584639b80e7cc60..52428f5a6f8518576c80ff66dbaf9b663a7264ed 100644 (file)
@@ -160,23 +160,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