From: Mike Bayer Date: Tue, 22 Aug 2017 00:15:21 +0000 (-0400) Subject: merge PG fixes from master X-Git-Tag: rel_1_1_14~24 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9ceddec38fa3f786d6113d2bb974b3f6bc313d59;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git merge PG fixes from master Change-Id: I5630eb8ba503c567bebddd10f6e525ceb3dd5998 --- diff --git a/lib/sqlalchemy/testing/provision.py b/lib/sqlalchemy/testing/provision.py index 6b0dae0ddc..a3e87b7c10 100644 --- a/lib/sqlalchemy/testing/provision.py +++ b/lib/sqlalchemy/testing/provision.py @@ -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