Update check before migrating flavor
db_inst.get('extra', {}) returns {} if 'extra' is not in db_inst, but
not if db_inst['extra'] is None. Since the result of that is accessed
like a dict the access of 'extra' has been changed to ensure that we get
a dict.
Change-Id: I3755151306ef784119aca0d5ee20fd0455116f64
Closes-Bug: 1438923
This commit is contained in:
parent
d2b62042d1
commit
ae870634d1
|
@ -460,7 +460,8 @@ class Instance(base.NovaPersistentObject, base.NovaObject,
|
|||
else:
|
||||
# Migrate the flavor from system_metadata to extra,
|
||||
# if needed
|
||||
if db_inst.get('extra', {}).get('flavor') is not None:
|
||||
instance_extra = db_inst.get('extra') or {}
|
||||
if instance_extra.get('flavor') is not None:
|
||||
self._flavor_from_db(db_inst['extra']['flavor'])
|
||||
elif 'instance_type_id' in self.system_metadata:
|
||||
self._migrate_flavor(self)
|
||||
|
|
|
@ -1145,6 +1145,18 @@ class _TestInstanceObject(object):
|
|||
inst._maybe_migrate_flavor(db_inst, ['flavor', 'system_metadata'])
|
||||
self.assertIn('instance_type_id', inst.system_metadata)
|
||||
|
||||
def test_migrate_flavor_instance_no_extra(self):
|
||||
flavor = flavors.get_default_flavor()
|
||||
db_inst = {'extra': None}
|
||||
inst = objects.Instance(
|
||||
system_metadata=flavors.save_flavor_info({}, flavor))
|
||||
result = inst._maybe_migrate_flavor(db_inst,
|
||||
['flavor', 'system_metadata'])
|
||||
self.assertTrue(result, 'Flavor not migrated')
|
||||
self.assertNotIn('instance_type_id', inst.system_metadata)
|
||||
self.assertTrue(inst.obj_attr_is_set('flavor'))
|
||||
self.assertEqual(flavor.flavorid, inst.flavor.flavorid)
|
||||
|
||||
|
||||
class TestInstanceObject(test_objects._LocalTest,
|
||||
_TestInstanceObject):
|
||||
|
|
Loading…
Reference in New Issue