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...
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