This is a subset of v8 of incremental backup, focusing more on just the checkpoint manipulation code (as this had fewer review comments that still needed addressing). I think there is enough here that even if this lands in 5.5 while the backup APIs slide into 5.6 that we'd still have a reasonably usable set of APIs. I probably still need to double-check that creating checkpoints while an external snapshot exists gives a sane error, and that creating an external snapshot while checkoints exist give a sane error (in both cases, with plans to relax that error later once we finish our design); that can be done as a patch on top of these or if I have to respin this part of the series once more before 5.5. I do plan on tagging a v9 label of the full backup series, but that will be in a separate thread built on top of this one (hence naming this one v8.5). Since v8: - Completely drop the virDomainHasCurrentCheckpoint API (you get the same effect by calling virDomainCheckpointCurrent) - Defer the virDomainCheckpointHasMetadata API for a later day (if we ever want it); for now, all checkpoints require libvirt metadta - Expand the code to implement Checkpoint APIs for the test driver - rebase to master - Defer the Backup API work to a later series - Split out the handling of VIR_DOMAIN_CHECKPOINT_XML_SIZE into its own patch (that one is probably the most likely to need a respin, or even deferring it post-5.5 as adding flag support is different than adding new API) 001/13:[----] [--] 'backup: Document new XML for checkpoints' 002/13:[0121] [FC] 'backup: Introduce virDomainCheckpoint APIs' 003/13:[0004] [FC] 'backup: Document nuances between different state capture APIs' 004/13:[0127] [FC] 'backup: Parse and output checkpoint XML' 005/13:[0111] [FC] 'backup: Allow for lists of checkpoint objects' 006/13:[----] [--] 'backup: Add new domain:checkpoint access control' 007/13:[down] 'backup: Implement checkpoint APIs for remote driver' 008/13:[0065] [FC] 'backup: Implement virsh support for checkpoints' 009/13:[down] 'snapshot: Refactor test to utilize virDomainMoment more' 010/13:[down] 'backup: test: Implement metadata tracking for checkpoint APIs' 011/13:[0184] [FC] 'backup: qemu: Implement metadata tracking for checkpoint APIs' 012/13:[0016] [FC] 'backup: Wire up qemu checkpoint commands over QMP' 013/13:[down] 'backup: qemu: Implement VIR_DOMAIN_CHECKPOINT_XML_SIZE flag' Eric Blake (13): backup: Document new XML for checkpoints backup: Introduce virDomainCheckpoint APIs backup: Document nuances between different state capture APIs backup: Parse and output checkpoint XML backup: Allow for lists of checkpoint objects backup: Add new domain:checkpoint access control backup: Implement checkpoint APIs for remote driver backup: Implement virsh support for checkpoints snapshot: Refactor test to utilize virDomainMoment more backup: test: Implement metadata tracking for checkpoint APIs backup: qemu: Implement metadata tracking for checkpoint APIs backup: Wire up qemu checkpoint commands over QMP backup: qemu: Implement VIR_DOMAIN_CHECKPOINT_XML_SIZE flag include/libvirt/libvirt-domain-checkpoint.h | 149 ++ include/libvirt/libvirt-domain.h | 6 + include/libvirt/libvirt.h | 5 +- src/access/viraccessperm.h | 6 + src/conf/checkpoint_conf.h | 101 ++ src/conf/domain_conf.h | 2 + src/conf/virconftypes.h | 9 + src/conf/virdomaincheckpointobjlist.h | 66 + src/conf/virdomainmomentobjlist.h | 5 +- src/conf/virdomainobjlist.h | 7 +- src/driver-hypervisor.h | 48 + src/qemu/qemu_block.h | 3 + src/qemu/qemu_conf.h | 2 + src/qemu/qemu_domain.h | 15 + src/qemu/qemu_monitor.h | 4 + src/qemu/qemu_monitor_json.h | 3 + tools/virsh-checkpoint.h | 26 + tools/virsh-completer.h | 4 + tools/virsh-util.h | 3 + tools/virsh.h | 1 + docs/Makefile.am | 3 + docs/apibuild.py | 2 + docs/docs.html.in | 9 +- docs/domainstatecapture.html.in | 315 ++++ docs/format.html.in | 1 + docs/formatcheckpoint.html.in | 204 +++ docs/formatsnapshot.html.in | 2 + docs/index.html.in | 3 +- docs/schemas/domaincheckpoint.rng | 87 ++ libvirt.spec.in | 2 + mingw-libvirt.spec.in | 4 + po/POTFILES | 3 + src/Makefile.am | 2 + src/access/viraccessperm.c | 3 +- src/conf/Makefile.inc.am | 4 + src/conf/checkpoint_conf.c | 662 ++++++++ src/conf/domain_conf.c | 6 + src/conf/virdomaincheckpointobjlist.c | 219 +++ src/conf/virdomainmomentobjlist.c | 2 +- src/conf/virdomainobjlist.c | 11 + src/libvirt-domain-checkpoint.c | 670 ++++++++ src/libvirt-domain.c | 18 +- src/libvirt_private.syms | 26 + src/libvirt_public.syms | 25 +- src/qemu/qemu_block.c | 12 + src/qemu/qemu_conf.c | 5 + src/qemu/qemu_domain.c | 183 +++ src/qemu/qemu_driver.c | 868 +++++++++++ src/qemu/qemu_monitor.c | 11 + src/qemu/qemu_monitor_json.c | 76 + src/remote/remote_daemon_dispatch.c | 20 + src/remote/remote_driver.c | 26 +- src/remote/remote_protocol.x | 155 +- src/remote_protocol-structs | 85 ++ src/rpc/gendispatch.pl | 32 +- src/test/test_driver.c | 461 +++++- tests/Makefile.am | 11 +- tests/domaincheckpointxml2xmlin/empty.xml | 1 + tests/domaincheckpointxml2xmlin/sample.xml | 7 + tests/domaincheckpointxml2xmlin/size.xml | 4 + tests/domaincheckpointxml2xmlout/empty.xml | 7 + .../internal-active-invalid.xml | 53 + .../internal-inactive-invalid.xml | 53 + tests/domaincheckpointxml2xmlout/redefine.xml | 63 + tests/domaincheckpointxml2xmlout/sample.xml | 12 + tests/domaincheckpointxml2xmlout/size.xml | 11 + tests/domaincheckpointxml2xmltest.c | 223 +++ tests/virschematest.c | 2 + tools/Makefile.am | 1 + tools/virsh-checkpoint.c | 1342 +++++++++++++++++ tools/virsh-completer.c | 51 + tools/virsh-domain-monitor.c | 23 + tools/virsh-domain.c | 9 + tools/virsh-util.c | 11 + tools/virsh.c | 2 + tools/virsh.pod | 238 ++- 76 files changed, 6745 insertions(+), 61 deletions(-) create mode 100644 include/libvirt/libvirt-domain-checkpoint.h create mode 100644 src/conf/checkpoint_conf.h create mode 100644 src/conf/virdomaincheckpointobjlist.h create mode 100644 tools/virsh-checkpoint.h create mode 100644 docs/domainstatecapture.html.in create mode 100644 docs/formatcheckpoint.html.in create mode 100644 docs/schemas/domaincheckpoint.rng create mode 100644 src/conf/checkpoint_conf.c create mode 100644 src/conf/virdomaincheckpointobjlist.c create mode 100644 src/libvirt-domain-checkpoint.c create mode 100644 tests/domaincheckpointxml2xmlin/empty.xml create mode 100644 tests/domaincheckpointxml2xmlin/sample.xml create mode 100644 tests/domaincheckpointxml2xmlin/size.xml create mode 100644 tests/domaincheckpointxml2xmlout/empty.xml create mode 100644 tests/domaincheckpointxml2xmlout/internal-active-invalid.xml create mode 100644 tests/domaincheckpointxml2xmlout/internal-inactive-invalid.xml create mode 100644 tests/domaincheckpointxml2xmlout/redefine.xml create mode 100644 tests/domaincheckpointxml2xmlout/sample.xml create mode 100644 tests/domaincheckpointxml2xmlout/size.xml create mode 100644 tests/domaincheckpointxml2xmltest.c create mode 100644 tools/virsh-checkpoint.c -- 2.20.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list