diff --git a/nova/objects/compute_node.py b/nova/objects/compute_node.py index 742c7bdb3cf4..c27cf8c61f76 100644 --- a/nova/objects/compute_node.py +++ b/nova/objects/compute_node.py @@ -19,6 +19,7 @@ from oslo_utils import versionutils import nova.conf from nova import db +from nova.db.sqlalchemy import api as sa_api from nova.db.sqlalchemy import models from nova import exception from nova import objects @@ -441,7 +442,7 @@ class ComputeNodeList(base.ObjectListBase, base.NovaObject): @staticmethod @db.select_db_reader_mode def _db_compute_node_get_all_by_uuids(context, compute_uuids): - db_computes = context.session.query(models.ComputeNode).filter( + db_computes = sa_api.model_query(context, models.ComputeNode).filter( models.ComputeNode.uuid.in_(compute_uuids)).all() return db_computes diff --git a/nova/tests/functional/db/test_compute_node.py b/nova/tests/functional/db/test_compute_node.py index dfa88ab64373..e802be4702d5 100644 --- a/nova/tests/functional/db/test_compute_node.py +++ b/nova/tests/functional/db/test_compute_node.py @@ -85,6 +85,12 @@ class ComputeNodeTestCase(test.TestCase): # Two compute nodes can't have the same tuple (host, node, deleted) cn2.host = _HOSTNAME + '2' cn2.create() + # A deleted compute node + cn3 = fake_compute_obj.obj_clone() + cn3._context = self.context + cn3.host = _HOSTNAME + '3' + cn3.create() + cn3.destroy() cns = objects.ComputeNodeList.get_all_by_uuids(self.context, []) self.assertEqual(0, len(cns)) @@ -107,6 +113,12 @@ class ComputeNodeTestCase(test.TestCase): uuidsentinel.noexists]) self.assertEqual(2, len(cns)) + # Ensure we don't get the deleted one, even if we ask for it + cns = objects.ComputeNodeList.get_all_by_uuids(self.context, + [cn1.uuid, cn2.uuid, + cn3.uuid]) + self.assertEqual(2, len(cns)) + def test_get_by_hypervisor_type(self): cn1 = fake_compute_obj.obj_clone() cn1._context = self.context