On Wed, Aug 17, 2011 at 08:12:03AM -0600, Eric Blake wrote:
On 08/17/2011 07:10 AM, Osier Yang wrote:
>If one tries to restore a domain from a corrupt save image, we blindly
>goes forward to restore from it, this can cause many different errors,
>depending on how much the image is saved. E.g.
>
>https://bugzilla.redhat.com/show_bug.cgi?id=730750
>
>So I'm thinking if we can introduce a new feild to struct qemud_save_header,
>such as "bool complete;", and set it true if succeeded to save the image,
>false if not. So that could do some checking while trying to open the image
>(qemuDomainSaveImageOpen), and quit early if "complete" is false, with
>a sensiable error message.
Almost. I think we can reuse one of the existing spare fields in
the header (that is, change unused[15] to instead be unused[14] and
make the new field a uint32_t), and I also think we need to have a
tri-state value:
0 - save image was created with older libvirt, no idea if image is sane
1 - save image created by current libvirt, but not yet marked
complete; attempts to restore from this image should fail with
sensible message suggesting nuking the save image since it is broken
- value written at start of save process
2 - save image created by current libvirt and completed - value
written at end of save process
And of course, we have to update the bswap_header routine to treat
it with the same endianness as the rest of the header.
The downside to adding a new header field, is that old libvirt
won't look for it. A slightly more evil approach is to
1. Write header, but with 'magic' set to all zerso
2. do migration
3. Re-write header to set correct 'magic'
On the plus side old livirt will refuse to restore from this. On the
downside new libvirt will give less good errors "not a known save
file" instad of "save file is corrupt"
Regards,
Daniel
--
|:
http://berrange.com -o-
http://www.flickr.com/photos/dberrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|:
http://entangle-photo.org -o-
http://live.gnome.org/gtk-vnc :|