Next version which includes feedback from V1:
https://www.redhat.com/archives/libvir-list/2019-November/msg01315.html
and also few features and bugs fixed based on offline requests:
- The flag VIR_DOMAIN_BACKUP_BEGIN_REUSE_EXTERNAL was added to
facilitate users who wish to provide their own files.
- The schema was fixed as many legitimate uses were not described:
- format for the scratch file was not supported
- security labels for the scratch file were not supported
- tests were insufficient
- backup XML 2 XML testing was added
- scratch files created by libvirt are now removed after the job
finishes
- domain capability feature entry was added
- the code for determining bitmaps for incremental backup was slightly
optimized
- documentation now documents our behaviour towards the scratch file and
the relationship to the new flag.
I might have forgotten to apply some reviewed-by tags though. I'm sorry
for that. Most patches changed though (including the API patches which
add the flag) so a review is welcome even there.
You can fetch the new version at:
git fetch
https://gitlab.com/pipo.sk/libvirt.git blockdev-backup-v2
Note that the branch also contains commit to enable block commit for
easier testing. With the posted code the following approach can be
used to enable it (new qemu required):
<domain type='kvm'
xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
...
<qemu:capabilities>
<qemu:add capability='incremental-backup'/>
</qemu:capabilities>
</domain>
Eric Blake (5):
backup: Document new XML for backups
backup: Introduce virDomainBackup APIs
backup: Implement backup APIs for remote driver
backup: Parse and output backup XML
backup: Implement virsh support for backup
Peter Krempa (20):
qemu: domain: Export qemuDomainGetImageIds
API: Introduce field for reporting temporary disk space usage of a
domain job
virsh: Implement VIR_DOMAIN_JOB_DISK_TEMP_(USED|TOTAL) in
cmdDomjobinfo
API: Add domain job operation for backups
tests: genericxml2xml: Add testing of backup XML files
qemu: Add infrastructure for statistics of a backup job
qemu: domain: Introduce QEMU_ASYNC_JOB_BACKUP async job type
Add 'backup' block job type
qemu: monitor: Add support for blockdev-backup via 'transaction'
qemu: domain: Track backup job data in the status XML
qemu: blockjob: Track internal data for 'backup' blockjob
tests: qemustatusxml2xml: Add test for 'pull' type backup job
conf: backup: Add fields for tracking stats of completed sub-jobs
doc: Document quirk of getting block job info for a 'backup' blockjob
qemu: Implement backup job APIs and qemu handling
qemu: backup: Implement stats gathering while the job is running
qemu: driver: Allow cancellation of the backup job
qemu: blockjob: Implement concluded blockjob handler for backup
blockjobs
conf: domaincaps: Add 'backup' feature flag
qemu: Add support for VIR_DOMAIN_CAPS_FEATURE_BACKUP
docs/docs.html.in | 3 +-
docs/format.html.in | 1 +
docs/formatbackup.html.in | 175 +++
docs/formatcheckpoint.html.in | 12 +-
docs/formatdomaincaps.html.in | 8 +
docs/index.html.in | 3 +-
docs/schemas/domainbackup.rng | 223 ++++
docs/schemas/domaincaps.rng | 9 +
examples/c/misc/event-test.c | 3 +
include/libvirt/libvirt-domain.h | 37 +-
libvirt.spec.in | 1 +
mingw-libvirt.spec.in | 2 +
po/POTFILES.in | 3 +
src/conf/Makefile.inc.am | 2 +
src/conf/backup_conf.c | 499 ++++++++
src/conf/backup_conf.h | 108 ++
src/conf/domain_capabilities.c | 1 +
src/conf/domain_capabilities.h | 1 +
src/conf/domain_conf.c | 2 +-
src/conf/virconftypes.h | 3 +
src/driver-hypervisor.h | 12 +
src/libvirt-domain-checkpoint.c | 7 +-
src/libvirt-domain.c | 147 +++
src/libvirt_private.syms | 8 +
src/libvirt_public.syms | 6 +
src/qemu/Makefile.inc.am | 2 +
src/qemu/qemu_backup.c | 1039 +++++++++++++++++
src/qemu/qemu_backup.h | 46 +
src/qemu/qemu_blockjob.c | 111 +-
src/qemu/qemu_blockjob.h | 19 +
src/qemu/qemu_capabilities.c | 1 +
src/qemu/qemu_domain.c | 150 ++-
src/qemu/qemu_domain.h | 21 +
src/qemu/qemu_driver.c | 68 +-
src/qemu/qemu_migration.c | 2 +
src/qemu/qemu_monitor.c | 13 +
src/qemu/qemu_monitor.h | 15 +
src/qemu/qemu_monitor_json.c | 33 +
src/qemu/qemu_monitor_json.h | 8 +
src/qemu/qemu_process.c | 25 +
src/remote/remote_driver.c | 2 +
src/remote/remote_protocol.x | 33 +-
src/remote_protocol-structs | 15 +
tests/Makefile.am | 2 +
.../backup-pull-seclabel.xml | 18 +
tests/domainbackupxml2xmlin/backup-pull.xml | 10 +
.../backup-push-seclabel.xml | 17 +
tests/domainbackupxml2xmlin/backup-push.xml | 10 +
tests/domainbackupxml2xmlin/empty.xml | 1 +
.../backup-pull-seclabel.xml | 18 +
tests/domainbackupxml2xmlout/backup-pull.xml | 10 +
.../backup-push-seclabel.xml | 17 +
tests/domainbackupxml2xmlout/backup-push.xml | 10 +
tests/domainbackupxml2xmlout/empty.xml | 1 +
.../domaincapsdata/qemu_1.5.3-q35.x86_64.xml | 1 +
.../domaincapsdata/qemu_1.5.3-tcg.x86_64.xml | 1 +
tests/domaincapsdata/qemu_1.5.3.x86_64.xml | 1 +
.../domaincapsdata/qemu_1.6.0-q35.x86_64.xml | 1 +
.../domaincapsdata/qemu_1.6.0-tcg.x86_64.xml | 1 +
tests/domaincapsdata/qemu_1.6.0.x86_64.xml | 1 +
.../domaincapsdata/qemu_1.7.0-q35.x86_64.xml | 1 +
.../domaincapsdata/qemu_1.7.0-tcg.x86_64.xml | 1 +
tests/domaincapsdata/qemu_1.7.0.x86_64.xml | 1 +
.../domaincapsdata/qemu_2.1.1-q35.x86_64.xml | 1 +
.../domaincapsdata/qemu_2.1.1-tcg.x86_64.xml | 1 +
tests/domaincapsdata/qemu_2.1.1.x86_64.xml | 1 +
.../domaincapsdata/qemu_2.10.0-q35.x86_64.xml | 1 +
.../domaincapsdata/qemu_2.10.0-tcg.x86_64.xml | 1 +
.../qemu_2.10.0-virt.aarch64.xml | 1 +
tests/domaincapsdata/qemu_2.10.0.aarch64.xml | 1 +
tests/domaincapsdata/qemu_2.10.0.ppc64.xml | 1 +
tests/domaincapsdata/qemu_2.10.0.s390x.xml | 1 +
tests/domaincapsdata/qemu_2.10.0.x86_64.xml | 1 +
.../domaincapsdata/qemu_2.11.0-q35.x86_64.xml | 1 +
.../domaincapsdata/qemu_2.11.0-tcg.x86_64.xml | 1 +
tests/domaincapsdata/qemu_2.11.0.s390x.xml | 1 +
tests/domaincapsdata/qemu_2.11.0.x86_64.xml | 1 +
.../domaincapsdata/qemu_2.12.0-q35.x86_64.xml | 1 +
.../domaincapsdata/qemu_2.12.0-tcg.x86_64.xml | 1 +
.../qemu_2.12.0-virt.aarch64.xml | 1 +
tests/domaincapsdata/qemu_2.12.0.aarch64.xml | 1 +
tests/domaincapsdata/qemu_2.12.0.ppc64.xml | 1 +
tests/domaincapsdata/qemu_2.12.0.s390x.xml | 1 +
tests/domaincapsdata/qemu_2.12.0.x86_64.xml | 1 +
.../domaincapsdata/qemu_2.4.0-q35.x86_64.xml | 1 +
.../domaincapsdata/qemu_2.4.0-tcg.x86_64.xml | 1 +
tests/domaincapsdata/qemu_2.4.0.x86_64.xml | 1 +
.../domaincapsdata/qemu_2.5.0-q35.x86_64.xml | 1 +
.../domaincapsdata/qemu_2.5.0-tcg.x86_64.xml | 1 +
tests/domaincapsdata/qemu_2.5.0.x86_64.xml | 1 +
.../domaincapsdata/qemu_2.6.0-q35.x86_64.xml | 1 +
.../domaincapsdata/qemu_2.6.0-tcg.x86_64.xml | 1 +
.../qemu_2.6.0-virt.aarch64.xml | 1 +
tests/domaincapsdata/qemu_2.6.0.aarch64.xml | 1 +
tests/domaincapsdata/qemu_2.6.0.ppc64.xml | 1 +
tests/domaincapsdata/qemu_2.6.0.x86_64.xml | 1 +
.../domaincapsdata/qemu_2.7.0-q35.x86_64.xml | 1 +
.../domaincapsdata/qemu_2.7.0-tcg.x86_64.xml | 1 +
tests/domaincapsdata/qemu_2.7.0.s390x.xml | 1 +
tests/domaincapsdata/qemu_2.7.0.x86_64.xml | 1 +
.../domaincapsdata/qemu_2.8.0-q35.x86_64.xml | 1 +
.../domaincapsdata/qemu_2.8.0-tcg.x86_64.xml | 1 +
tests/domaincapsdata/qemu_2.8.0.s390x.xml | 1 +
tests/domaincapsdata/qemu_2.8.0.x86_64.xml | 1 +
.../domaincapsdata/qemu_2.9.0-q35.x86_64.xml | 1 +
.../domaincapsdata/qemu_2.9.0-tcg.x86_64.xml | 1 +
tests/domaincapsdata/qemu_2.9.0.ppc64.xml | 1 +
tests/domaincapsdata/qemu_2.9.0.s390x.xml | 1 +
tests/domaincapsdata/qemu_2.9.0.x86_64.xml | 1 +
.../domaincapsdata/qemu_3.0.0-q35.x86_64.xml | 1 +
.../domaincapsdata/qemu_3.0.0-tcg.x86_64.xml | 1 +
tests/domaincapsdata/qemu_3.0.0.ppc64.xml | 1 +
tests/domaincapsdata/qemu_3.0.0.s390x.xml | 1 +
tests/domaincapsdata/qemu_3.0.0.x86_64.xml | 1 +
.../domaincapsdata/qemu_3.1.0-q35.x86_64.xml | 1 +
.../domaincapsdata/qemu_3.1.0-tcg.x86_64.xml | 1 +
tests/domaincapsdata/qemu_3.1.0.ppc64.xml | 1 +
tests/domaincapsdata/qemu_3.1.0.x86_64.xml | 1 +
.../domaincapsdata/qemu_4.0.0-q35.x86_64.xml | 1 +
.../domaincapsdata/qemu_4.0.0-tcg.x86_64.xml | 1 +
.../qemu_4.0.0-virt.aarch64.xml | 1 +
tests/domaincapsdata/qemu_4.0.0.aarch64.xml | 1 +
tests/domaincapsdata/qemu_4.0.0.ppc64.xml | 1 +
tests/domaincapsdata/qemu_4.0.0.s390x.xml | 1 +
tests/domaincapsdata/qemu_4.0.0.x86_64.xml | 1 +
.../domaincapsdata/qemu_4.1.0-q35.x86_64.xml | 1 +
.../domaincapsdata/qemu_4.1.0-tcg.x86_64.xml | 1 +
tests/domaincapsdata/qemu_4.1.0.x86_64.xml | 1 +
.../domaincapsdata/qemu_4.2.0-q35.x86_64.xml | 1 +
.../domaincapsdata/qemu_4.2.0-tcg.x86_64.xml | 1 +
.../qemu_4.2.0-virt.aarch64.xml | 1 +
tests/domaincapsdata/qemu_4.2.0.aarch64.xml | 1 +
tests/domaincapsdata/qemu_4.2.0.ppc64.xml | 1 +
tests/domaincapsdata/qemu_4.2.0.s390x.xml | 1 +
tests/domaincapsdata/qemu_4.2.0.x86_64.xml | 1 +
tests/genericxml2xmltest.c | 46 +
tests/qemumonitorjsontest.c | 8 +-
.../qemustatusxml2xmldata/backup-pull-in.xml | 608 ++++++++++
.../qemustatusxml2xmldata/backup-pull-out.xml | 1 +
tests/qemuxml2xmltest.c | 2 +
tests/virschematest.c | 2 +
tools/Makefile.am | 1 +
tools/virsh-backup.c | 151 +++
tools/virsh-backup.h | 21 +
tools/virsh-domain.c | 26 +-
tools/virsh.c | 2 +
tools/virsh.h | 1 +
tools/virsh.pod | 35 +
148 files changed, 3952 insertions(+), 26 deletions(-)
create mode 100644 docs/formatbackup.html.in
create mode 100644 docs/schemas/domainbackup.rng
create mode 100644 src/conf/backup_conf.c
create mode 100644 src/conf/backup_conf.h
create mode 100644 src/qemu/qemu_backup.c
create mode 100644 src/qemu/qemu_backup.h
create mode 100644 tests/domainbackupxml2xmlin/backup-pull-seclabel.xml
create mode 100644 tests/domainbackupxml2xmlin/backup-pull.xml
create mode 100644 tests/domainbackupxml2xmlin/backup-push-seclabel.xml
create mode 100644 tests/domainbackupxml2xmlin/backup-push.xml
create mode 100644 tests/domainbackupxml2xmlin/empty.xml
create mode 100644 tests/domainbackupxml2xmlout/backup-pull-seclabel.xml
create mode 100644 tests/domainbackupxml2xmlout/backup-pull.xml
create mode 100644 tests/domainbackupxml2xmlout/backup-push-seclabel.xml
create mode 100644 tests/domainbackupxml2xmlout/backup-push.xml
create mode 100644 tests/domainbackupxml2xmlout/empty.xml
create mode 100644 tests/qemustatusxml2xmldata/backup-pull-in.xml
create mode 120000 tests/qemustatusxml2xmldata/backup-pull-out.xml
create mode 100644 tools/virsh-backup.c
create mode 100644 tools/virsh-backup.h
--
2.23.0