[libvirt] [PATCH 6/8] backup: Introduce virDomainBackup APIs

Kashyap Chamarthy kchamart at redhat.com
Tue Jun 19 15:48:23 UTC 2018


On Wed, Jun 13, 2018 at 11:42:27AM -0500, Eric Blake wrote:
> Introduce a few more new public APIs related to incremental backups.
> This builds on the previous notion of a checkpoint (without an
> existing checkpoint, the new API is a full backup, differing only
> from virDomainCopy in the point of time chosen); and also allows
> creation of a new checkpoint at the same time as starting the backup
> (after all, an incremental backup is only useful if it covers the
> state since the previous backup).  It also enhances event reporting
> for signaling when a push model backup completes (where the
> hypervisor creates the backup); note that the pull model does not
> have an event (starting the backup lets a third party access the
> data, and only the third party knows when it is finished).

First, thanks for the work!  (And for doing the detailed write-ups, as
is your wont.)

A super minor note: I hope you'll also add the API names in the commit
message itself (like you did in the past, for the older APIs); it will
be handy when browsing `git log` later.

So far I see the new APIs are:

    - virDomainBackupBegin()
    - virDomainBackupGetXMLDesc()
    - virDomainBackupEnd()

So, OpenStack Nova currently still uses virDomainBlockRebase(); it
hasn't even moved to the newer virDomainBlockCopy().  But as we know,
currently both of them have the limitation of having to undefine and
then re-define the guest XML.

As you suggested elsewhere, probably I could explore (once they are
'frozen') moving to these proposed APIs, which will work without having
to do the undefine + re-define dance.

> Signed-off-by: Eric Blake <eblake at redhat.com>
> ---
>  include/libvirt/libvirt-domain-checkpoint.h |  11 ++
>  include/libvirt/libvirt-domain.h            |  14 +-
>  src/driver-hypervisor.h                     |  14 ++
>  src/libvirt-domain-checkpoint.c             | 200 ++++++++++++++++++++++++++++
>  src/libvirt-domain.c                        |   8 +-
>  src/libvirt_public.syms                     |   3 +
>  tools/virsh-domain.c                        |   3 +-
>  7 files changed, 249 insertions(+), 4 deletions(-)
> 
> diff --git a/include/libvirt/libvirt-domain-checkpoint.h b/include/libvirt/libvirt-domain-checkpoint.h
> index 4a7dc73089..c1d382fddc 100644
> --- a/include/libvirt/libvirt-domain-checkpoint.h
> +++ b/include/libvirt/libvirt-domain-checkpoint.h
> @@ -144,4 +144,15 @@ int virDomainCheckpointDelete(virDomainCheckpointPtr checkpoint,
>  int virDomainCheckpointRef(virDomainCheckpointPtr checkpoint);
>  int virDomainCheckpointFree(virDomainCheckpointPtr checkpoint);
> 
> +/* Begin an incremental backup job, possibly creating a checkpoint. */
> +int virDomainBackupBegin(virDomainPtr domain, const char *diskXml,
> +                         const char *checkpointXml, unsigned int flags);
> +
> +/* Learn about an ongoing backup job. */
> +char *virDomainBackupGetXMLDesc(virDomainPtr domain, int id,
> +                                unsigned int flags);
> +
> +/* Complete an incremental backup job. */
> +int virDomainBackupEnd(virDomainPtr domain, int id, unsigned int flags);

[...]

-- 
/kashyap




More information about the libvir-list mailing list