Update image_base_image_ref during rebuild.
In different location we assume system_metadata.image_base_image_ref exists, because it is set during instance creation in method _populate_instance_for_create But once instance is rebuild, all system_metadata image property a dropped and replace by new image property and without setting back image_base_image_ref. This change propose to set image_base_image_ref during rebuild. In specific case of shelve/unshelve in Qcow2 backend, image_base_image_ref is used to rebase disk image, so we ensure this property is set as instance may have been rebuild before the fix was apply. Related-Bug: #1732428 Closes-Bug: #1893618 Change-Id: Ia3031ea1f7db8b398f02d2080ca603ded8970200 (cherry picked from commitfe52b6c25b
) (cherry picked from commit560414036d
)
This commit is contained in:
parent
3bc1502f00
commit
8a01a58a60
|
@ -3392,6 +3392,8 @@ class API(base.Base):
|
|||
new_sys_metadata = utils.get_system_metadata_from_image(
|
||||
image, flavor)
|
||||
|
||||
new_sys_metadata.update({'image_base_image_ref': image_id})
|
||||
|
||||
instance.system_metadata.update(new_sys_metadata)
|
||||
instance.save()
|
||||
return orig_sys_metadata
|
||||
|
@ -3805,6 +3807,14 @@ class API(base.Base):
|
|||
hypervisor.
|
||||
"""
|
||||
instance.task_state = task_states.SHELVING
|
||||
|
||||
# NOTE(aarents): Ensure image_base_image_ref is present as it will be
|
||||
# needed during unshelve and instance rebuild done before Bug/1893618
|
||||
# Fix dropped it.
|
||||
instance.system_metadata.update(
|
||||
{'image_base_image_ref': instance.image_ref}
|
||||
)
|
||||
|
||||
instance.save(expected_task_state=[None])
|
||||
|
||||
self._record_action_start(context, instance, instance_actions.SHELVE)
|
||||
|
|
|
@ -54,6 +54,7 @@ class ShelvePolicyTestV21(test.NoDBTestCase):
|
|||
self.req.environ['nova.context'],
|
||||
vm_state=vm_states.ACTIVE, task_state=None)
|
||||
instance.launched_at = instance.created_at
|
||||
instance.system_metadata = {}
|
||||
get_instance_mock.return_value = instance
|
||||
mock_save.side_effect = exception.UnexpectedTaskStateError(
|
||||
instance_uuid=instance.uuid, expected=None,
|
||||
|
|
|
@ -9133,6 +9133,7 @@ class ComputeAPITestCase(BaseTestCase):
|
|||
'image_ramdisk_id': uuids.ramdisk_id,
|
||||
'image_something_else': 'meow',
|
||||
'preserved': 'preserve this!',
|
||||
'image_base_image_ref': image_ref,
|
||||
'boot_roles': ''},
|
||||
sys_meta)
|
||||
|
||||
|
|
Loading…
Reference in New Issue