]> 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:20:43 +0000 (12:20 -0500)
on database use

(cherry picked from commit c8b3d4ed3f2638599fc73486cf0f724fa033a638)

lib/sqlalchemy/testing/provision.py

index 77527571b39f6b665351f0e4dd0e3406a50bc271..dd2083f7a87afb0157ca0a58113f9647e83f4942 100644 (file)
@@ -1,8 +1,9 @@
 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 time
 
 FOLLOWER_IDENT = None
 
@@ -135,7 +136,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")