[libvirt] [PATCH 1/6] Snapshot API framework.

Matthias Bolte matthias.bolte at googlemail.com
Sat Apr 3 15:28:25 UTC 2010


2010/4/3 Chris Lalancette <clalance at redhat.com>:
> Signed-off-by: Chris Lalancette <clalance at redhat.com>
> ---
>  daemon/remote.c                     |  311 ++++++++++++++++++++++++
>  daemon/remote_dispatch_args.h       |    9 +
>  daemon/remote_dispatch_prototypes.h |   72 ++++++
>  daemon/remote_dispatch_ret.h        |    7 +
>  daemon/remote_dispatch_table.h      |   45 ++++
>  include/libvirt/libvirt.h.in        |   62 +++++
>  include/libvirt/virterror.h         |    5 +-
>  python/generator.py                 |    3 +
>  python/typewrappers.c               |   15 ++
>  python/typewrappers.h               |   10 +
>  src/datatypes.c                     |  122 ++++++++++
>  src/datatypes.h                     |   25 ++
>  src/driver.h                        |   47 ++++
>  src/esx/esx_driver.c                |    9 +
>  src/libvirt.c                       |  456 +++++++++++++++++++++++++++++++++++
>  src/libvirt_private.syms            |    1 +
>  src/libvirt_public.syms             |   10 +
>  src/lxc/lxc_driver.c                |    9 +
>  src/opennebula/one_driver.c         |    9 +
>  src/openvz/openvz_driver.c          |    9 +
>  src/phyp/phyp_driver.c              |    9 +
>  src/qemu/qemu_driver.c              |    9 +
>  src/remote/remote_driver.c          |  309 ++++++++++++++++++++++++
>  src/remote/remote_protocol.c        |  181 ++++++++++++++
>  src/remote/remote_protocol.h        |  145 +++++++++++
>  src/remote/remote_protocol.x        |   97 ++++++++-
>  src/test/test_driver.c              |    9 +
>  src/uml/uml_driver.c                |    9 +
>  src/util/virterror.c                |   15 ++
>  src/vbox/vbox_tmpl.c                |    9 +
>  src/xen/xen_driver.c                |    9 +
>  src/xenapi/xenapi_driver.c          |    9 +
>  32 files changed, 2044 insertions(+), 2 deletions(-)
>

> +/* Get a handle to the current snapshot */
> +virDomainSnapshotPtr virDomainSnapshotCurrent(virDomainPtr domain,
> +                                              unsigned int flags);
> +
> +/* Revert the domain to a point-in-time snapshot.  The
> + * state of the guest after this call will be the state
> + * of the guest when the snapshot in question was taken
> + */
> +int virDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
> +                              unsigned int flags);
> +
> +/* Deactivate a snapshot */

s/Deactivate/Delete/

> +typedef enum {
> +    VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN = (1 << 0),
> +} virDomainSnapshotDeleteFlags;
> +
> +int virDomainSnapshotDelete(virDomainSnapshotPtr snapshot,
> +                            unsigned int flags);
> +
> +int virDomainSnapshotFree(virDomainSnapshotPtr snapshot);
>

> diff --git a/src/libvirt.c b/src/libvirt.c
> index 5247fe7..25e358c 100644
> --- a/src/libvirt.c
> +++ b/src/libvirt.c

> +
> +/**
> + * virDomainSnapshotGetXMLDesc:
> + * @snapshot: a domain snapshot object
> + * @flags: unused flag parameters; callers should pass 0
> + *
> + * Provide an XML description of the domain snapshot.
> + *
> + * Returns a 0 terminated UTF-8 encoded XML instance, or NULL in case of error.
> + *         the caller must free() the returned value.
> + */
> +char *
> +virDomainSnapshotGetXMLDesc(virDomainSnapshotPtr snapshot,
> +                            unsigned int flags)
> +{
> +    virConnectPtr conn;
> +    DEBUG("snapshot=%p, flags=%d", snapshot, flags);
> +
> +    virResetLastError();
> +
> +    if (!VIR_IS_DOMAIN_SNAPSHOT(snapshot)) {
> +        virLibDomainSnapshotError(NULL, VIR_ERR_INVALID_DOMAIN_SNAPSHOT,
> +                                  __FUNCTION__);
> +        virDispatchError(NULL);
> +        return (NULL);
> +    }
> +
> +    conn = snapshot->domain->conn;
> +
> +    if ((conn->flags & VIR_CONNECT_RO) && (flags & VIR_DOMAIN_XML_SECURE)) {
> +        virLibConnError(conn, VIR_ERR_OPERATION_DENIED,
> +                        _("virDomainSnapshotGetXMLDesc with secure flag"));
> +        goto error;
> +    }
> +
> +    flags &= VIR_DOMAIN_XML_FLAGS_MASK;

Copy&paste leftover?

> +    if (conn->driver->domainSnapshotDumpXML) {
> +        char *ret;
> +        ret = conn->driver->domainSnapshotDumpXML(snapshot, flags);
> +        if (!ret)
> +            goto error;
> +        return ret;
> +    }
> +
> +    virLibConnError (conn, VIR_ERR_NO_SUPPORT, __FUNCTION__);
> +error:
> +    virDispatchError(conn);
> +    return NULL;
> +}
> +


> +
> +/**
> + * virDomainSnapshotDelete
> + * @snapshot: a domain snapshot object
> + * @flags: flag parameters
> + *
> + * Delete the snapshot.
> + *
> + * If @flags is 0, then just this snapshot is deleted, and changes from
> + * this snapshot are automatically pushed to children snapshots.  If
> + * flags is VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN, then this snapshot
> + * and any children snapshots are deleted.

s/pushed to/merged into/

> + * Returns 0 if the snapshot was successfully deleted, -1 on error.
> + */

ACK.

Matthias




More information about the libvir-list mailing list