]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- put a retry in for PG database provisioning as it locks
authorMike Bayer <mike_mp@zzzcomputing.com>
Fri, 29 Jan 2016 17:19:17 +0000 (12:19 -0500)
committerMike Bayer <mike_mp@zzzcomputing.com>
Fri, 29 Jan 2016 17:19:17 +0000 (12:19 -0500)
on database use

lib/sqlalchemy/testing/provision.py

index 3f9ddae73c0a6b4f69b81aa35a1fc00030367307..ce60e99d3cc223c7ed43436b4dee100f3f3b13d7 100644 (file)
@@ -1,8 +1,10 @@
 from sqlalchemy.engine import url as sa_url
 from sqlalchemy import text
+from sqlalchemy import exc
 from sqlalchemy.util import compat
 from . import config, engines
 import os
+import time
 
 FOLLOWER_IDENT = None
 
@@ -158,7 +160,18 @@ def _pg_create_db(cfg, eng, ident):
         except Exception:
             pass
         currentdb = conn.scalar("select current_database()")
-        conn.execute("CREATE DATABASE %s TEMPLATE %s" % (ident, currentdb))
+        for attempt in range(3):
+            try:
+                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):
+                    time.sleep(.2)
+                    continue
+                else:
+                    raise
+            else:
+                break
 
 
 @_create_db.for_db("mysql")