[libvirt] [RFC PATCHv2 1/n] snapshot: add revert-and-create branching of external snapshots

Peter Krempa pkrempa at redhat.com
Tue Nov 20 16:07:31 UTC 2012


On 11/20/12 01:09, Eric Blake wrote:
> Right now, libvirt refuses to revert to the state at the time
> of an external snapshot, because doing so would reset things so
> that the next time the domain boots, we are using the backing
> file; but modifying the backing file invalidates all qcow2
> files that are based on top of it.  There are three possibilities
> for lifting this restriction:
> 1. delete all snapshot metadata and qcow2 files that are
> invalidated by the revert (losing changes since the snapshot)
> 2. perform a block commit (such as with qemu-img commit) to
> merge the qcow2 file back into the backing file (keeping the
> changes since the snapshot, but losing the qcow2 files)
> 3. create NEW qcow2 files that wrap the same base file as
> the original snapshot (keeping the changes since the original
> snapshot)
>
> This patch documents the API for option 3, by adding a new flag
> to virDomainSnapshotCreateXML (the only snapshot-related function
> that takes XML, which is required to pass in new file names
> during the branch), and wires up virsh to expose it.  Later
> patches will enhance virDomainRevertToSnapshot to cover options
> 1 and 2.
>
> API wise, an application wishing to do the revert-and-create
> operation must add a <branch>name</branch> element to their
> <domainsnapshot> XML, and pass VIR_DOMAIN_SNAPSHOT_CREATE_BRANCH
> in the flags argument.  In virsh, snapshot-create gains a new
> boolean flag --branch that must match the XML passed in, and
> snapshot-create-as gains a new --branch=name argument along
> with a --current boolean for creating such XML.
>
> * include/libvirt/libvirt.h.in
> (VIR_DOMAIN_SNAPSHOT_CREATE_BRANCH): New flag.
> * src/libvirt.c (virDomainSnapshotCreateXML): Document it, and
> enforce some mutual exclusion.
> * docs/formatsnapshot.html.in: Document the new <branch> element.
> * docs/schemas/domainsnapshot.rng: Allow new element.
> * tools/virsh-snapshot.c (cmdSnapshotCreate): Add --branch option.
> (cmdSnapshotCreateAs): Likewise, also add --current.
> * tools/virsh.pod (snapshot-create, snapshot-create-as): Document
> new usage.
> ---
>   docs/formatsnapshot.html.in     | 16 +++++++++++++---
>   docs/schemas/domainsnapshot.rng |  5 +++++
>   include/libvirt/libvirt.h.in    |  3 +++
>   src/libvirt.c                   | 27 ++++++++++++++++++++++-----
>   tools/virsh-snapshot.c          | 40 ++++++++++++++++++++++++++++++++--------
>   tools/virsh.pod                 | 16 ++++++++++++++--
>   6 files changed, 89 insertions(+), 18 deletions(-)

Looks well designed. ACK. Hopefully no changes will be needed :)

Peter




More information about the libvir-list mailing list