Fix Instance objects with empty security groups
This makes sure that a DB instance with an empty list of security groups does not result in an object with an unset attribute, thus triggering a lazy load on access (and ultimately an exception). Related to blueprint compute-api-objects Change-Id: Ib33b05853e9d067cbac5d3e87824a68e9935b822
This commit is contained in:
parent
beae8f01b0
commit
39dd4f8c5f
@ -235,7 +235,7 @@ class Instance(base.NovaObject):
|
|||||||
instance_info_cache.InstanceInfoCache._from_db_object(
|
instance_info_cache.InstanceInfoCache._from_db_object(
|
||||||
context, instance['info_cache'], db_inst['info_cache'])
|
context, instance['info_cache'], db_inst['info_cache'])
|
||||||
if ('security_groups' in expected_attrs and
|
if ('security_groups' in expected_attrs and
|
||||||
db_inst.get('security_groups')):
|
db_inst.get('security_groups') is not None):
|
||||||
instance['security_groups'] = security_group.SecurityGroupList()
|
instance['security_groups'] = security_group.SecurityGroupList()
|
||||||
security_group._make_secgroup_list(context,
|
security_group._make_secgroup_list(context,
|
||||||
instance['security_groups'],
|
instance['security_groups'],
|
||||||
|
@ -348,6 +348,17 @@ class _TestInstanceObject(object):
|
|||||||
inst.save()
|
inst.save()
|
||||||
self.assertEqual(inst.security_groups.obj_what_changed(), set())
|
self.assertEqual(inst.security_groups.obj_what_changed(), set())
|
||||||
|
|
||||||
|
def test_with_empty_security_groups(self):
|
||||||
|
ctxt = context.get_admin_context()
|
||||||
|
fake_inst = dict(self.fake_instance, security_groups=[])
|
||||||
|
fake_uuid = fake_inst['uuid']
|
||||||
|
self.mox.StubOutWithMock(db, 'instance_get_by_uuid')
|
||||||
|
db.instance_get_by_uuid(ctxt, fake_uuid, columns_to_join=[]
|
||||||
|
).AndReturn(fake_inst)
|
||||||
|
self.mox.ReplayAll()
|
||||||
|
inst = instance.Instance.get_by_uuid(ctxt, fake_uuid)
|
||||||
|
self.assertEqual(0, len(inst.security_groups))
|
||||||
|
|
||||||
def test_with_fault(self):
|
def test_with_fault(self):
|
||||||
ctxt = context.get_admin_context()
|
ctxt = context.get_admin_context()
|
||||||
fake_inst = dict(self.fake_instance)
|
fake_inst = dict(self.fake_instance)
|
||||||
|
Loading…
Reference in New Issue
Block a user