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(a)redhat.com>
[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