[libvirt] [PATCH] qemu: forbid snapshot-delete --children-only on external snapshot
Kashyap Chamarthy
kchamart at redhat.com
Mon Oct 27 15:14:13 UTC 2014
On Mon, Oct 27, 2014 at 05:44:29AM -0600, Eric Blake wrote:
> https://bugzilla.redhat.com/show_bug.cgi?id=956506 documents that
> given a domain where an internal snapshot parent has an external
> snapshot child, we lacked a safety check when trying to use the
> --children-only option to snapshot-delete:
>
> $ virsh start dom
> $ virsh snapshot-create-as dom internal
> $ virsh snapshot-create-as dom external --disk-only
> $ virsh snapshot-delete dom external
> error: Failed to delete snapshot external
> error: unsupported configuration: deletion of 1 external disk snapshots not supported yet
> $ virsh snapshot-delete dom internal --children
> error: Failed to delete snapshot internal
> error: unsupported configuration: deletion of 1 external disk snapshots not supported yet
> $ virsh snapshot-delete dom internal --children-only
> Domain snapshot internal children deleted
>
> While I'd still like to see patches that actually do proper external
> snapshot deletion, we should at least fix the inconsistency in the
> meantime. With this patch:
>
> $ virsh snapshot-delete dom internal --children-only
> error: Failed to delete snapshot internal
> error: unsupported configuration: deletion of 1 external disk snapshots not supported yet
>
> * src/qemu/qemu_driver.c (qemuDomainSnapshotDelete): Fix condition.
>
> Signed-off-by: Eric Blake <eblake at redhat.com>
> ---
> src/qemu/qemu_driver.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index cd8d3c7..5eccacc 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -14812,7 +14812,8 @@ qemuDomainSnapshotDelete(virDomainSnapshotPtr snapshot,
> if (!(flags & VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN_ONLY) &&
> virDomainSnapshotIsExternal(snap))
> external++;
> - if (flags & VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN)
> + if (flags & (VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN |
> + VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN_ONLY))
> virDomainSnapshotForEachDescendant(snap,
> qemuDomainSnapshotCountExternal,
> &external);
FWIW, Tested-By: Kashyap Chamarthy <kchamart at redhat.com>
I used the same method as you, after applying the patch manually from
the list (and made RPMs):
$ virsh start vm1
Domain vm1 started
$ virsh snapshot-create-as vm1 internal
Domain snapshot internal created
$ virsh snapshot-create-as vm1 external --disk-only
Domain snapshot external created
$ virsh snapshot-list vm1
Name Creation Time State
------------------------------------------------------------
external 2014-10-27 16:05:51 +0100 disk-snapshot
internal 2014-10-27 16:05:39 +0100 running
$ virsh snapshot-delete vm1 external
error: Failed to delete snapshot external
error: unsupported configuration: deletion of 1 external disk snapshots not supported yet
$ virsh snapshot-delete vm1 internal --children
error: Failed to delete snapshot internal
error: unsupported configuration: deletion of 1 external disk snapshots not supported yet
$ virsh snapshot-delete vm1 internal --children-only
error: Failed to delete snapshot internal
error: unsupported configuration: deletion of 1 external disk snapshots not supported yet
$ virsh snapshot-list vm1
Name Creation Time State
------------------------------------------------------------
external 2014-10-27 16:05:51 +0100 disk-snapshot
internal 2014-10-27 16:05:39 +0100 running
--
/kashyap
More information about the libvir-list
mailing list