Explicitly use a session for DB version check
The db field value version check, which is a preflight to major upgrades (to detect if a prior upgrade was not completed) was using model_query, which could orphan an open transaction in the same process until the python interpretter went and took out the perverable trash. We now use an explicit session which structurally ensures we close any open transactions which allows a metadata lock to be obtained to perform a schema update.. Change-Id: Id51419bc50af5a756bb7b0ca451df1936dd6f904
This commit is contained in:
parent
2afaf4d0a0
commit
93688e9531
@ -1798,7 +1798,8 @@ class Connection(api.Connection):
|
||||
# compatible with its (old) DB representation.
|
||||
# NOTE(rloo): .notin_ does not handle null:
|
||||
# http://docs.sqlalchemy.org/en/latest/core/sqlelement.html#sqlalchemy.sql.operators.ColumnOperators.notin_
|
||||
query = model_query(model.version).filter(
|
||||
with _session_for_read() as session:
|
||||
query = session.query(model.version).filter(
|
||||
sql.or_(model.version == sql.null(),
|
||||
model.version.notin_(supported_versions)))
|
||||
if query.count():
|
||||
|
@ -0,0 +1,9 @@
|
||||
---
|
||||
fixes:
|
||||
- |
|
||||
Fixes an issue where the database upgrade can hang on Python 3.10.
|
||||
This was because open transactions could become orphaned awaiting
|
||||
the Python runtime to clean up their memory references due to the
|
||||
way the overall database query was being intiiated to pre-flight
|
||||
check the upgrade. We have structurally changed the behavior
|
||||
to remedy this case.
|
Loading…
Reference in New Issue
Block a user