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(a)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(a)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