The first 7 patches are technically v2 of [RFC PATCH 00/16] qemu: checkpoint: Add support for deleting checkpoints accross snapshots https://www.redhat.com/archives/libvir-list/2020-January/msg00430.html as they were not reviewed, but the handling of block copy would conflict with them I'm reposting them with two simple bugfixes. The rest of the series implements handling of bitmaps when doing a block copy. Peter Krempa (19): tests: qemublock: Add test for checkpoint deletion bitmap merge tests: qemublock: Add few more test cases for checkpoint deletion tests: qemublock: Add synthetic snapshot+checkpoint test data qemu: checkpoint: Introduce support for deleting checkpoints accross snapshots tests: qemublock: Add checkpoint deletion test for deep backing chain tests: qemublock: Add checkpoint deletion tests for some special cases qemu: checkpoint: Track and relabel images for bitmap merging qemu: block: Extract calls of qemuBlockGetNamedNodeData into a helper function util: json: Introduce virJSONValueArrayConcat virJSONValueNewArray: Use g_new0 to allocate and remove NULL checks from callers virhash: Make sure that hash key is always copied virHashAddOrUpdateEntry: Simplify allocation of new entry qemu: blockjob: Store 'jobflags' with block job data qemu: blockjob: Store 'flags' for all the block job types qemu: block: Add validator for bitmap chains accross backing chains tests: qemublocktest: Add another synthetic test case for broken bitmaps qemu: block: Introduce function to calculate bitmap handling for block-copy tests: qemublock: Add tests for qemuBlockBitmapsHandleBlockcopy qemuDomainBlockPivot: Copy bitmaps backing checkpoints for virDomainBlockCopy src/conf/domain_addr.c | 5 +- src/libvirt_private.syms | 1 + src/locking/lock_daemon.c | 4 +- src/logging/log_handler.c | 3 +- src/network/leaseshelper.c | 6 +- src/qemu/qemu_agent.c | 6 +- src/qemu/qemu_backup.c | 11 +- src/qemu/qemu_block.c | 208 ++++- src/qemu/qemu_block.h | 16 + src/qemu/qemu_blockjob.c | 16 +- src/qemu/qemu_blockjob.h | 12 +- src/qemu/qemu_checkpoint.c | 146 +++- src/qemu/qemu_checkpoint.h | 6 +- src/qemu/qemu_domain.c | 7 + src/qemu/qemu_driver.c | 54 +- src/qemu/qemu_firmware.c | 12 +- src/qemu/qemu_migration_params.c | 3 +- src/qemu/qemu_monitor_json.c | 3 +- src/rpc/virnetserver.c | 6 +- src/rpc/virnetserverservice.c | 3 +- src/util/virhash.c | 13 +- src/util/virhash.h | 3 +- src/util/virjson.c | 44 +- src/util/virjson.h | 2 + src/util/virlockspace.c | 6 +- src/util/virmacmap.c | 8 +- tests/qemublocktest.c | 250 +++++- .../bitmap/snapshots-synthetic-broken.json | 819 +++++++++++++++++ .../bitmap/snapshots-synthetic-broken.out | 12 + .../snapshots-synthetic-checkpoint.json | 827 ++++++++++++++++++ .../bitmap/snapshots-synthetic-checkpoint.out | 13 + .../bitmapblockcopy/basic-deep-out.json | 117 +++ .../bitmapblockcopy/basic-shallow-out.json | 117 +++ .../bitmapblockcopy/snapshots-deep-out.json | 133 +++ .../snapshots-shallow-out.json | 48 + .../checkpointdelete/basic-current-out.json | 29 + .../basic-intermediate1-out.json | 22 + .../basic-intermediate2-out.json | 22 + .../basic-intermediate3-out.json | 22 + .../checkpointdelete/basic-noparent-out.json | 9 + .../snapshots-current-out.json | 29 + .../snapshots-intermediate1-out.json | 24 + .../snapshots-intermediate2-out.json | 62 ++ .../snapshots-intermediate3-out.json | 61 ++ .../snapshots-noparent-out.json | 27 + ...hots-synthetic-checkpoint-current-out.json | 29 + ...ynthetic-checkpoint-intermediate1-out.json | 31 + ...ynthetic-checkpoint-intermediate2-out.json | 34 + ...ynthetic-checkpoint-intermediate3-out.json | 61 ++ ...ots-synthetic-checkpoint-noparent-out.json | 27 + tests/qemumonitorjsontest.c | 5 +- .../qemustatusxml2xmldata/backup-pull-in.xml | 2 +- .../blockjob-blockdev-in.xml | 8 +- 53 files changed, 3293 insertions(+), 151 deletions(-) create mode 100644 tests/qemublocktestdata/bitmap/snapshots-synthetic-broken.json create mode 100644 tests/qemublocktestdata/bitmap/snapshots-synthetic-broken.out create mode 100644 tests/qemublocktestdata/bitmap/snapshots-synthetic-checkpoint.json create mode 100644 tests/qemublocktestdata/bitmap/snapshots-synthetic-checkpoint.out create mode 100644 tests/qemublocktestdata/bitmapblockcopy/basic-deep-out.json create mode 100644 tests/qemublocktestdata/bitmapblockcopy/basic-shallow-out.json create mode 100644 tests/qemublocktestdata/bitmapblockcopy/snapshots-deep-out.json create mode 100644 tests/qemublocktestdata/bitmapblockcopy/snapshots-shallow-out.json create mode 100644 tests/qemublocktestdata/checkpointdelete/basic-current-out.json create mode 100644 tests/qemublocktestdata/checkpointdelete/basic-intermediate1-out.json create mode 100644 tests/qemublocktestdata/checkpointdelete/basic-intermediate2-out.json create mode 100644 tests/qemublocktestdata/checkpointdelete/basic-intermediate3-out.json create mode 100644 tests/qemublocktestdata/checkpointdelete/basic-noparent-out.json create mode 100644 tests/qemublocktestdata/checkpointdelete/snapshots-current-out.json create mode 100644 tests/qemublocktestdata/checkpointdelete/snapshots-intermediate1-out.json create mode 100644 tests/qemublocktestdata/checkpointdelete/snapshots-intermediate2-out.json create mode 100644 tests/qemublocktestdata/checkpointdelete/snapshots-intermediate3-out.json create mode 100644 tests/qemublocktestdata/checkpointdelete/snapshots-noparent-out.json create mode 100644 tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-current-out.json create mode 100644 tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate1-out.json create mode 100644 tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate2-out.json create mode 100644 tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate3-out.json create mode 100644 tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-noparent-out.json -- 2.24.1