]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
merge PG fixes from master
authorMike Bayer <mike_mp@zzzcomputing.com>
Tue, 22 Aug 2017 00:15:21 +0000 (20:15 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Tue, 22 Aug 2017 00:15:21 +0000 (20:15 -0400)
Change-Id: I5630eb8ba503c567bebddd10f6e525ceb3dd5998

lib/sqlalchemy/testing/provision.py

index 6b0dae0ddcfc48906079d8601a5d3454e489f181..a3e87b7c10d77571f21b685cbb880f47d220545d 100644 (file)
@@ -166,17 +166,37 @@ def _pg_create_db(cfg, eng, ident):
         except Exception:
             pass
         currentdb = conn.scalar("select current_database()")
-        for attempt in range(3):
+        for attempt in range(10):
             try:
+                log.info(
+                    "emitting CREATE DATABASE %s url %r" %
+                    (ident, eng.url))
                 conn.execute(
                     "CREATE DATABASE %s TEMPLATE %s" % (ident, currentdb))
             except exc.OperationalError as err:
-                if attempt != 2 and "accessed by other users" in str(err):
+                conn.connection.rollback()
+                if attempt != 10 and "accessed by other users" in str(err):
+                    log.info(
+                        "got accessed by others for database %s, URI %r, "
+                        "sleeping for .2",
+                        ident, eng.url)
                     time.sleep(.2)
                     continue
                 else:
                     raise
             else:
+                time.sleep(.5)
+                log.info(
+                    "checking for database %s URI %r" %
+                    (ident, eng.url))
+                result = conn.execute(
+                    "SELECT datname FROM pg_database "
+                    "where datname='%s'" % ident)
+                row = result.first()
+                if not row:
+                    raise Exception(
+                        "Database named %s did not get "
+                        "created, in engine %r" % (ident, eng.url))
                 break