Fix db upgrade with SQLAlchemy 2.0
DB schema upgrade is stuck when SQLAlchemy 2.0 is used because all operations are not executed within a transaction. Change-Id: Ief7ea81e78344ea32fb2a295f11a5d5a873251a8
This commit is contained in:
parent
fa8b7dc862
commit
6efa793ec2
aodh/storage
@ -156,17 +156,19 @@ class Connection(base.Connection):
|
||||
def upgrade(self, nocreate=False):
|
||||
cfg = self._get_alembic_config()
|
||||
cfg.conf = self.conf
|
||||
if nocreate:
|
||||
command.upgrade(cfg, "head")
|
||||
else:
|
||||
engine = enginefacade.writer.get_engine()
|
||||
ctxt = migration.MigrationContext.configure(engine.connect())
|
||||
current_version = ctxt.get_current_revision()
|
||||
if current_version is None:
|
||||
models.Base.metadata.create_all(engine, checkfirst=False)
|
||||
command.stamp(cfg, "head")
|
||||
else:
|
||||
engine = enginefacade.writer.get_engine()
|
||||
with engine.connect() as conn, conn.begin():
|
||||
cfg.attributes['connection'] = conn
|
||||
if nocreate:
|
||||
command.upgrade(cfg, "head")
|
||||
else:
|
||||
ctxt = migration.MigrationContext.configure(conn)
|
||||
current_version = ctxt.get_current_revision()
|
||||
if current_version is None:
|
||||
models.Base.metadata.create_all(conn, checkfirst=False)
|
||||
command.stamp(cfg, "head")
|
||||
else:
|
||||
command.upgrade(cfg, "head")
|
||||
|
||||
def clear(self):
|
||||
engine = enginefacade.writer.get_engine()
|
||||
|
@ -68,10 +68,21 @@ def run_migrations_online():
|
||||
and associate a connection with the context.
|
||||
|
||||
"""
|
||||
engine = enginefacade.writer.get_engine()
|
||||
with engine.connect() as connection:
|
||||
connectable = config.attributes.get('connection', None)
|
||||
|
||||
if connectable is None:
|
||||
engine = enginefacade.writer.get_engine()
|
||||
with engine.connect() as connection:
|
||||
context.configure(
|
||||
connection=connection,
|
||||
target_metadata=target_metadata
|
||||
)
|
||||
|
||||
with context.begin_transaction():
|
||||
context.run_migrations()
|
||||
else:
|
||||
context.configure(
|
||||
connection=connection,
|
||||
connection=connectable,
|
||||
target_metadata=target_metadata
|
||||
)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user