Skip to content

Commit

Permalink
Merge "Add get_by_instance_uuids() to InstanceMappingList"
Browse files Browse the repository at this point in the history
  • Loading branch information
Jenkins authored and openstack-gerrit committed Apr 11, 2017
2 parents 002594c + 38a0231 commit fc3e91a
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 2 deletions.
17 changes: 16 additions & 1 deletion nova/objects/instance_mapping.py
Expand Up @@ -136,7 +136,8 @@ def destroy(self):
class InstanceMappingList(base.ObjectListBase, base.NovaObject):
# Version 1.0: Initial version
# Version 1.1: Added get_by_cell_id method.
VERSION = '1.1'
# Version 1.2: Added get_by_instance_uuids method
VERSION = '1.2'

fields = {
'objects': fields.ListOfObjectsField('InstanceMapping'),
Expand Down Expand Up @@ -169,3 +170,17 @@ def get_by_cell_id(cls, context, cell_id):
db_mappings = cls._get_by_cell_id_from_db(context, cell_id)
return base.obj_make_list(context, cls(), objects.InstanceMapping,
db_mappings)

@staticmethod
@db_api.api_context_manager.reader
def _get_by_instance_uuids_from_db(context, uuids):
return (context.session.query(api_models.InstanceMapping)
.options(joinedload('cell_mapping'))
.filter(api_models.InstanceMapping.instance_uuid.in_(uuids))
.all())

@base.remotable_classmethod
def get_by_instance_uuids(cls, context, uuids):
db_mappings = cls._get_by_instance_uuids_from_db(context, uuids)
return base.obj_make_list(context, cls(), objects.InstanceMapping,
db_mappings)
13 changes: 13 additions & 0 deletions nova/tests/functional/db/test_instance_mapping.py
Expand Up @@ -18,6 +18,7 @@
from nova.objects import instance_mapping
from nova import test
from nova.tests import fixtures
from nova.tests import uuidsentinel


sample_mapping = {'instance_uuid': '',
Expand Down Expand Up @@ -170,3 +171,15 @@ def test_instance_mapping_list_get_by_cell_id(self):
)
self.assertEqual(1, len(inst_mapping_list))
self.assertEqual(db_inst_mapping1['id'], inst_mapping_list[0].id)

def test_instance_mapping_get_by_instance_uuids(self):
db_inst_mapping1 = create_mapping()
db_inst_mapping2 = create_mapping(cell_id=None)
# Create a third that we won't include
create_mapping()
uuids = [db_inst_mapping1.instance_uuid,
db_inst_mapping2.instance_uuid]
mappings = instance_mapping.InstanceMappingList.get_by_instance_uuids(
self.context, uuids + [uuidsentinel.deleted_instance])
self.assertEqual(sorted(uuids),
sorted([m.instance_uuid for m in mappings]))
2 changes: 1 addition & 1 deletion nova/tests/unit/objects/test_objects.py
Expand Up @@ -1111,7 +1111,7 @@ def obj_name(cls):
'InstanceInfoCache': '1.5-cd8b96fefe0fc8d4d337243ba0bf0e1e',
'InstanceList': '2.2-ff71772c7bf6d72f6ef6eee0199fb1c9',
'InstanceMapping': '1.0-65de80c491f54d19374703c0753c4d47',
'InstanceMappingList': '1.1-14d4a4296c3cbf51e660b657dc37b19e',
'InstanceMappingList': '1.2-ee638619aa3d8a82a59c0c83bfa64d78',
'InstanceNUMACell': '1.4-7c1eb9a198dee076b4de0840e45f4f55',
'InstanceNUMATopology': '1.3-ec0030cb0402a49c96da7051c037082a',
'InstancePCIRequest': '1.1-b1d75ebc716cb12906d9d513890092bf',
Expand Down

0 comments on commit fc3e91a

Please sign in to comment.