Skip to content

Commit fee3c77

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "db: Resolve additional SAWarning warnings" into stable/xena
2 parents 53a451a + 5b1d487 commit fee3c77

File tree

3 files changed

+25
-4
lines changed

3 files changed

+25
-4
lines changed

nova/db/main/api.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4332,6 +4332,12 @@ def _get_fk_stmts(metadata, conn, table, column, records):
43324332
fk_column = fk_table.c.id
43334333

43344334
for fk in fk_table.foreign_keys:
4335+
if table != fk.column.table:
4336+
# if the foreign key doesn't actually point to the table we're
4337+
# archiving entries from then it's not relevant; trying to
4338+
# resolve this would result in a cartesian product
4339+
continue
4340+
43354341
# We need to find the records in the referring (child) table that
43364342
# correspond to the records in our (parent) table so we can archive
43374343
# them.
@@ -4378,6 +4384,7 @@ def _get_fk_stmts(metadata, conn, table, column, records):
43784384
# deque.
43794385
fk_delete = fk_table.delete().where(fk_column.in_(fk_records))
43804386
deletes.appendleft(fk_delete)
4387+
43814388
# Repeat for any possible nested child tables.
43824389
i, d = _get_fk_stmts(metadata, conn, fk_table, fk_column, fk_records)
43834390
inserts.extendleft(i)

nova/objects/cell_mapping.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -279,11 +279,15 @@ def _get_by_project_id_from_db(context, project_id):
279279
# SELECT DISTINCT cell_id FROM instance_mappings \
280280
# WHERE project_id = $project_id;
281281
cell_ids = context.session.query(
282-
api_db_models.InstanceMapping.cell_id).filter_by(
283-
project_id=project_id).distinct().subquery()
282+
api_db_models.InstanceMapping.cell_id
283+
).filter_by(
284+
project_id=project_id
285+
).distinct()
284286
# SELECT cell_mappings WHERE cell_id IN ($cell_ids);
285-
return context.session.query(api_db_models.CellMapping).filter(
286-
api_db_models.CellMapping.id.in_(cell_ids)).all()
287+
return context.session.query(
288+
api_db_models.CellMapping).filter(
289+
api_db_models.CellMapping.id.in_(cell_ids)
290+
).all()
287291

288292
@classmethod
289293
def get_by_project_id(cls, context, project_id):

nova/tests/fixtures/nova.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -833,6 +833,16 @@ def setUp(self):
833833

834834
self.addCleanup(warnings.resetwarnings)
835835

836+
# Enable general SQLAlchemy warnings also to ensure we're not doing
837+
# silly stuff. It's possible that we'll need to filter things out here
838+
# with future SQLAlchemy versions, but that's a good thing
839+
840+
warnings.filterwarnings(
841+
'error',
842+
module='nova',
843+
category=sqla_exc.SAWarning,
844+
)
845+
836846

837847
class ConfPatcher(fixtures.Fixture):
838848
"""Fixture to patch and restore global CONF.

0 commit comments

Comments
 (0)