[libvirt RFC 23/24] qemu_snapshot: when deleting snapshot invalidate parent snapshot

Peter Krempa pkrempa at redhat.com
Wed Sep 7 13:40:26 UTC 2022


On Tue, Aug 23, 2022 at 18:32:26 +0200, Pavel Hrdina wrote:
> When deleting external snapshots the operation may fail at any point
> which could lead to situation that some disks finished the block commit
> operation but for some disks it failed and the libvirt job ends.
> 
> In order to make sure that the qcow2 images are in consistent state
> introduce new element "<invalid/>" that will mark the disk in snapshot
> metadata as invalid until the snapshot delete is completed successfully.
> 
> This will prevent deleting snapshot with the invalid disk and in future
> reverting to snapshot with the invalid disk.
> 
> Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
> ---
>  src/conf/snapshot_conf.c |  5 +++++
>  src/conf/snapshot_conf.h |  1 +
>  src/qemu/qemu_snapshot.c | 42 ++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 48 insertions(+)
> 
> diff --git a/src/conf/snapshot_conf.c b/src/conf/snapshot_conf.c
> index ae635edd08..155da42862 100644
> --- a/src/conf/snapshot_conf.c
> +++ b/src/conf/snapshot_conf.c
> @@ -158,6 +158,8 @@ virDomainSnapshotDiskDefParseXML(xmlNodePtr node,
>          return -1;
>      }
>  
> +    def->invalid = !!virXPathNode("./invalid", ctxt);

You shouldn't allow parsing this unless a snapshot is being
redefined/reloaded from disk.

> +
>      if ((cur = virXPathNode("./source", ctxt)) &&
>          virDomainStorageSourceParse(cur, ctxt, src, flags, xmlopt) < 0)
>          return -1;

Once again please make sure to document non-obvious behaviour.

In this patch it's specifically where the disks of the _parent_ snapshot
are marked as invalid. I've overlooked that first.


More information about the libvir-list mailing list