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