currentdb = conn.scalar("select current_database()")
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:
- conn.connection.rollback()
- if attempt != 10 and "accessed by other users" in str(err):
+ if "accessed by other users" in str(err):
log.info(
- "got accessed by others for database %s, URI %r, "
- "sleeping for .2",
+ "Waiting to create %s, URI %r, "
+ "template DB is in use sleeping for .5",
ident, eng.url)
- time.sleep(.2)
- continue
- else:
- raise
+ time.sleep(.5)
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
+ else:
+ raise err
@_create_db.for_db("mysql")