This implements virDomainSnapshotDelete API to support external
snapshots. The support doesn't include flags
VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN and
VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN_ONLY as it would add more complexity
and IMHO these flags should not existed at all.

Gitlab repo with the patches:
https://gitlab.com/phrdina/libvirt/-/commits/snapshot-delete-external

Changes in v2:
    - qemuBlockCommit properly unrefs job by calling qemuBlockJobStartupFinalize
    - added comment to various functions
    - renamed some functions as suggested in review of v1 patches
    - improved error messages
    - introduced  virStorageSourceChainLookupBySource()
    - use virStorageSourceIsBacking()
    - properly cleanup qemuSnapshotDeleteExternalData
    - don't allow deleting snapshot if there is another block job

Pavel Hrdina (31):
  libvirt: introduce VIR_DOMAIN_JOB_OPERATION_SNAPSHOT_DELETE
  qemu_block: extract block commit code to separate function
  qemu_block: move qemuDomainBlockPivot out of qemu_driver
  qemu_block: add async domain job support to qemuBlockCommit
  qemu_block: add async domain job support to qemuBlockPivot
  qemu_monitor: introduce qemuMonitorJobFinalize
  qemu_monitor_json: allow configuring autofinalize for block commit
  qemu_block: allow configuring autofinalize for block commit
  qemu_block: introduce qemuBlockFinalize
  qemu_block: change qemuBlockCommit to return job pointer
  qemu_blockjob: process QEMU_MONITOR_JOB_STATUS_PENDING signal
  storage_source: introduce virStorageSourceChainLookupBySource
  qemu_snapshot: refactor qemuSnapshotDelete
  qemu_snapshot: introduce qemuSnapshotDeleteSingle
  qemu_snapshot: introduce qemuSnapshotDeleteChildren
  qemu_snapshot: rework snapshot children deletion
  qemu_snapshot: move snapshot discard out of qemu_domain.c
  qemu_snapshot: move snapshot metadata reparent code
  qemu_snapshot: introduce qemuSnapshotDiscardMetadata
  qemu_snapshot: introduce qemuSnapshotDeleteValidate function
  qemu_snapshot: refactor validation of snapshot delete
  qemu_snapshot: error out when deleting internal snapshot on non-active
    disk
  qemu_snapshot: convert snapshot delete to async domain job
  qemu_snapshot: prepare data for external snapshot deletion
  qemu_snapshot: implement deletion of external snapshot
  qemu_snapshot: update metadata when deleting snapshots
  qemu_snapshot: when deleting snapshot invalidate parent snapshot
  qemu_process: abort snapshot delete when daemon starts
  qemu_snapshot: enable deletion of external snapshots
  api: document support for external snapshot deletion
  NEWS: document support for external snapshot deletion

 NEWS.rst                          |   6 +
 include/libvirt/libvirt-domain.h  |   1 +
 src/conf/snapshot_conf.c          |   8 +
 src/conf/snapshot_conf.h          |   1 +
 src/libvirt-domain-snapshot.c     |   7 +
 src/libvirt_private.syms          |   1 +
 src/qemu/qemu_backup.c            |   1 +
 src/qemu/qemu_block.c             | 364 +++++++++++
 src/qemu/qemu_block.h             |  22 +
 src/qemu/qemu_blockjob.c          |  21 +-
 src/qemu/qemu_blockjob.h          |   1 +
 src/qemu/qemu_domain.c            |  95 +--
 src/qemu/qemu_domain.h            |   9 -
 src/qemu/qemu_driver.c            | 292 +--------
 src/qemu/qemu_monitor.c           |  21 +-
 src/qemu/qemu_monitor.h           |   8 +-
 src/qemu/qemu_monitor_json.c      |  26 +-
 src/qemu/qemu_monitor_json.h      |   8 +-
 src/qemu/qemu_process.c           |  32 +
 src/qemu/qemu_snapshot.c          | 973 +++++++++++++++++++++++++++---
 src/qemu/qemu_snapshot.h          |   4 +
 src/storage_file/storage_source.c |  39 ++
 src/storage_file/storage_source.h |   6 +
 tests/qemumonitorjsontest.c       |   4 +-
 tools/virsh-domain.c              |   1 +
 25 files changed, 1475 insertions(+), 476 deletions(-)

-- 
2.39.0

Reply via email to