
On Wed, Feb 06, 2019 at 01:17:58PM -0600, Eric Blake wrote:
The following is the latest version of my API proposal for incremental backups, and follows along from the demo I presented as part of my KVM Forum 2018 talk: https://kvmforum2018.sched.com/event/FzuB/facilitating-incremental-backup-er...
The patches are also available via https://repo.or.cz/libvirt/ericb.git at the tag backup-v4.
Integration with external snapshots is still not included in these patches, although I have been playing more with that locally, and I still haven't gotten a working demonstration of a push-mode incremental backup.
At this point, I'm posting mainly because there have been enough changes in qemu (the backup APIs are now stable! and in qemu.git in time for 4.0) and libvirt (several releases and code cleanups in between, such that the v3 no longer applies easily), while I continue to work locally on more features, addressing the review comments I got on v3, and remove the 'wip' tag on several of the later patches.
Among other things, I still haven't determined how we want to integrate checkpoints with external snapshots; we could either have:
virDomainSnapshotCreateXML("<domainsnapshot>...") # existing virDomainBackupBegin("<domainbackup>...", "<domaincheckpoint>...") # this series virDomainSnapshotCheckpointCreateXML("<domainsnapshot>...", "<domaincheckpoint>...") # new
A slightly related question: when these new APIs (thanks for working on them!) are merged, am I right in assuming that they should be able to "replace" the existing (and provide additional): virDomainBlockRebase(); and virDomainBlockCopy() ... _provided_ that an application is adjusted to using libvirt that is new enough to drive QEMU's '-blockdev', QMP `blockdev-add` et al? Or is that (the new APIs being backward-compatible with blockRebase() and blockCopy()) an explicit non-goal? I'm only this out of curiosity.
or to make checkpoint creation part of the snapshot and backup XML, as in:
virDomainSnapshotCreateXML("<domainsnapshot><domaincheckpoint>...</domainsnapshot>") # extension of existing virDomainBackupBegin("<domainbackup><domaincheckpoint>...</domainbackup>") # tweak to this series
I'm also planning to add an API to query which job ids are currently running (right now, the code only supports one job at a time, and always calls it job 1, but that is not future-friendly) and an update to the redefine XML command to make it easier to redefine multiple checkpoints in one API call.
[...] -- /kashyap