[libvirt] [PATCH v10 06/19] backup: Introduce virDomainCheckpoint APIs
Daniel P. Berrangé
berrange at redhat.com
Wed Jul 24 16:02:54 UTC 2019
On Wed, Jul 24, 2019 at 12:55:56AM -0500, Eric Blake wrote:
> Introduce a bunch of new public APIs related to backup checkpoints.
> Checkpoints are modeled heavily after virDomainSnapshotPtr (both
> represent a point in time of the guest), although a snapshot exists
> with the intent of rolling back to that state, while a checkpoint
> exists to make it possible to create an incremental backup at a later
> time. We may have a future hypervisor that can completely manage
> checkpoints without libvirt metadata, but the first two planned
> hypervisors (qemu and test) both always use libvirt for tracking
> metadata relations between checkpoints, so for now, I've deferred
> the counterpart of virDomainSnapshotHasMetadata for a separate
> API addition at a later date if there is ever a need for it.
>
> Note that until we allow snapshots and checkpoints to exist
> simultaneously on the same domain (although the actual prevention of
> this will be in a separate patch for the sake of an easier revert down
> the road), that it is not possible to branch out to create more than
> one checkpoint child to a given parent, although it may become
> possible later when we revert to a snapshot that coincides with a
> checkpoint. This also means that for now, the decision of which
> checkpoint becomes the parent of a newly created one is the only
> checkpoint with no child (so while there are APIs for dealing with a
> current snapshot, we do not need those for checkpoints). We may end
> up exposing a notion of a current checkpoint later, but it's easier to
> add stuff when proven needed than to blindly support it now and wish
> we hadn't exposed it.
>
> The following map shows the API relations to snapshots, with new APIs
> on the right:
>
> Operate on a domain object to create/redefine a child:
> virDomainSnapshotCreateXML virDomainCheckpointCreateXML
>
> Operate on a child object for lifetime management:
> virDomainSnapshotDelete virDomainCheckpointDelete
> virDomainSnapshotFree virDomainCheckpointFree
> virDomainSnapshotRef virDomainCheckpointRef
>
> Operate on a child object to learn more about it:
> virDomainSnapshotGetXMLDesc virDomainCheckpointGetXMLDesc
> virDomainSnapshotGetConnect virDomainCheckpointGetConnect
> virDomainSnapshotGetDomain virDomainCheckpointGetDomain
> virDomainSnapshotGetName virDomainCheckpiontGetName
> virDomainSnapshotGetParent virDomainCheckpiontGetParent
> virDomainSnapshotHasMetadata (deferred for later)
> virDomainSnapshotIsCurrent (no counterpart, see note above)
>
> Operate on a domain object to list all children:
> virDomainSnapshotNum (no counterparts, these are the old
> virDomainSnapshotListNames racy interfaces)
> virDomainSnapshotListAllSnapshots virDomainListAllCheckpoints
>
> Operate on a child object to list descendents:
> virDomainSnapshotNumChildren (no counterparts, these are the old
> virDomainSnapshotListChildrenNames racy interfaces)
> virDomainSnapshotListAllChildren virDomainCheckpointListAllChildren
>
> Operate on a domain to locate a particular child:
> virDomainSnapshotLookupByName virDomainCheckpointLookupByName
> virDomainSnapshotCurrent (no counterpart, see note above)
> virDomainHasCurrentSnapshot (no counterpart, old racy interface)
>
> Operate on a snapshot to roll back to earlier state:
> virDomainSnapshotRevert (no counterpart, instead checkpoints
> are used in incremental backups via
> XML to virDomainBackupBegin)
>
> Signed-off-by: Eric Blake <eblake at redhat.com>
> ---
> include/libvirt/libvirt-domain-checkpoint.h | 137 +++++
> include/libvirt/libvirt-domain.h | 6 +
> include/libvirt/libvirt.h | 5 +-
> src/conf/virdomainmomentobjlist.h | 5 +-
> src/driver-hypervisor.h | 38 ++
> docs/Makefile.am | 3 +
> docs/apibuild.py | 2 +
> docs/docs.html.in | 1 +
> libvirt.spec.in | 1 +
> mingw-libvirt.spec.in | 2 +
> po/POTFILES | 1 +
> src/Makefile.am | 2 +
> src/libvirt-domain-checkpoint.c | 567 ++++++++++++++++++++
> src/libvirt-domain.c | 19 +-
> src/libvirt_public.syms | 16 +
> 15 files changed, 796 insertions(+), 9 deletions(-)
> create mode 100644 include/libvirt/libvirt-domain-checkpoint.h
> create mode 100644 src/libvirt-domain-checkpoint.c
Reviewed-by: Daniel P. Berrangé <berrange at redhat.com>
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
More information about the libvir-list
mailing list