Skip to content

Commit 85e0495

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "db: Resolve additional SAWarning warnings" into stable/yoga
2 parents 7252072 + ce2cc54 commit 85e0495

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
@@ -4176,6 +4176,12 @@ def _get_fk_stmts(metadata, conn, table, column, records):
41764176
fk_column = fk_table.c.id
41774177

41784178
for fk in fk_table.foreign_keys:
4179+
if table != fk.column.table:
4180+
# if the foreign key doesn't actually point to the table we're
4181+
# archiving entries from then it's not relevant; trying to
4182+
# resolve this would result in a cartesian product
4183+
continue
4184+
41794185
# We need to find the records in the referring (child) table that
41804186
# correspond to the records in our (parent) table so we can archive
41814187
# them.
@@ -4225,6 +4231,7 @@ def _get_fk_stmts(metadata, conn, table, column, records):
42254231
# deque.
42264232
fk_delete = fk_table.delete().where(fk_column.in_(fk_records))
42274233
deletes.appendleft(fk_delete)
4234+
42284235
# Repeat for any possible nested child tables.
42294236
i, d = _get_fk_stmts(metadata, conn, fk_table, fk_column, fk_records)
42304237
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
@@ -904,6 +904,16 @@ def setUp(self):
904904
message='Implicit coercion of SELECT and textual SELECT .*',
905905
category=sqla_exc.SADeprecationWarning)
906906

907+
# Enable general SQLAlchemy warnings also to ensure we're not doing
908+
# silly stuff. It's possible that we'll need to filter things out here
909+
# with future SQLAlchemy versions, but that's a good thing
910+
911+
warnings.filterwarnings(
912+
'error',
913+
module='nova',
914+
category=sqla_exc.SAWarning,
915+
)
916+
907917
self.addCleanup(self._reset_warning_filters)
908918

909919
def _reset_warning_filters(self):

0 commit comments

Comments
 (0)