• E
    backup: Introduce virDomainCheckpoint APIs · 0d44788f
    Eric Blake 提交于
    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: NEric Blake <eblake@redhat.com>
    Reviewed-by: NDaniel P. Berrangé <berrange@redhat.com>
    0d44788f
apibuild.py 98.1 KB