While looking at my work on incremental backups, Nir raised a good point: if we want to recreate a set of known checkpoints on one machine that will be taking over a domain from another machine, my initial proposal required making multiple API calls to list the XML for each checkpoint on the source, and then more API calls to redefine each checkpoint on the destination; it also had the drawback that the list has to be presented in topological order (the API won't let you define a child checkpoint if the parent is not defined first). He asked if I could instead add bulk APIs, for getting the XML for all checkpoints at once, and then for redefining all checkpoints at once. Since my checkpoint code borrows heavily from concepts in the snapshot code, I chose to tackle the problem by starting with this series, which does the same thing for snapshots as what I plan to do for checkpoints. That is, since this patch series adds 2 new APIs, the checkpoint series will do likewise with very similar code. I'm also toying with the idea of followup patches that store all snapshots alongside the persistent <domain> XML in a single file, rather than in one snapshot per <domainsnapshot> file (we'd still support reading from the old method at libvirtd startup, but would not need to output in that manner any more). Based-on: <20190308060512.17733-1-eblake@xxxxxxxxxx> [0/5 snapshots: topological sorting] Changes from v3: - introduce 2 new API instead of flags to 2 existing API [Jan] - rebase on top of minor changes that already landed in the non-controversial first half of the v3 series [John] git backport-diff gets confused by patch renames, but this is quite obviously more or less a rewrite: 001/8:[down] 'snapshot: Add new API for bulk dumpxml/redefine' 002/8:[down] 'snapshot: Support topological virDomainSnapshotForEach()' 003/8:[down] 'snapshot: Tweaks to support new bulk dumpxml/import API' 004/8:[down] 'remote: Wire up snapshot bulk dumpxml/import' 005/8:[down] 'virsh: Expose bulk snapshot dumpxml/import' 006/8:[0087] [FC] 'test: Implement bulk snapshot operations' 007/8:[0040] [FC] 'qemu: Factor out qemuDomainSnapshotValidate() helper' 008/8:[0152] [FC] 'qemu: Implement bulk snapshot operations' Eric Blake (8): snapshot: Add new API for bulk dumpxml/redefine snapshot: Support topological virDomainSnapshotForEach() snapshot: Tweaks to support new bulk dumpxml/import API remote: Wire up snapshot bulk dumpxml/import virsh: Expose bulk snapshot dumpxml/import test: Implement bulk snapshot operations qemu: Factor out qemuDomainSnapshotValidate() helper qemu: Implement bulk snapshot operations include/libvirt/libvirt-domain-snapshot.h | 16 +- src/conf/snapshot_conf.h | 1 + src/driver-hypervisor.h | 13 +- src/conf/snapshot_conf.c | 34 ++-- src/libvirt-domain-snapshot.c | 122 ++++++++++- src/libvirt_public.syms | 2 + src/qemu/qemu_domain.c | 2 +- src/qemu/qemu_driver.c | 236 +++++++++++++++++----- src/remote/remote_driver.c | 6 +- src/remote/remote_protocol.x | 38 +++- src/remote_protocol-structs | 17 ++ src/test/test_driver.c | 62 +++++- src/vz/vz_driver.c | 3 +- tools/virsh-snapshot.c | 111 ++++++++-- tools/virsh.pod | 15 +- 15 files changed, 584 insertions(+), 94 deletions(-) -- 2.20.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list