[openstack-dev] [nova] Super fun unshelve image_ref bugs
Matt Riedemann
mriedemos at gmail.com
Fri Dec 1 17:24:52 UTC 2017
I came across this bug during triage today:
https://bugs.launchpad.net/nova/+bug/1732428
It essentially says that unshelving an instance and then resizing that
instance later, depending on the type of image backend, can fail.
It's pointed out that when we complete the unshelve procedure, we set
the instance.image_ref back to the original image_ref used to create the
instance, rather than leave it pointing at the shelved instance snapshot
image id.
I thought, "well that's crazy, the instance isn't backed by the original
image anymore, it's backed by the snapshot image, so instance.image_ref
should point at the snapshot image id now." But lo, in true
shelve-tastic form, it turns out that would cause more bugs.
Because after we successfully spawn the guest during unshelve, we delete
the snapshot image:
https://github.com/openstack/nova/blob/b6a245f0425a07be3871a976952646d2bdd44533/nova/compute/manager.py#L4797
So at this point, you've unshelved your instance, but the
instance.image_ref is pointing at image A but was really created from
image B.
Does anyone have ANY idea why we do this? Even if we delete the snapshot
image, why would we change the image_ref back to the original image?
I think we can assert as follows:
1. After you've unshelved an instance, it's image_ref (unless
volume-backed, because that's different crazy, not discussed here)
should point at the image used to create the guest. Agree?
2. If we're going to point the instance at an image_ref, we shouldn't
delete that image. I don't have a good reason why besides deleting
things which nova has a reference to in an active instance generally
causes problems (volumes, ports, etc).
Am I missing something that everyone else knew about way back in 2013?
--
Thanks,
Matt
More information about the OpenStack-dev
mailing list