[Libvirt-cim] [PATCH 1 of 3] Add VirtualSystemSnapshotService

Kaitlin Rupert kaitlin at linux.vnet.ibm.com
Wed Feb 27 01:13:07 UTC 2008


Dan Smith wrote:
> # HG changeset patch
> # User Dan Smith <danms at us.ibm.com>
> # Date 1204053596 28800
> # Node ID fce1a31a53090b42dbfbd788a6db2a1164636197
> # Parent  bb0530f50ea8d4a75ec34cd54f3bc2daebbda556
> Add VirtualSystemSnapshotService
> 
> Changes:
>  - Added header block
> 
> Signed-off-by: Dan Smith <danms at us.ibm.com>
> 
> diff -r bb0530f50ea8 -r fce1a31a5309 src/Virt_VirtualSystemSnapshotService.c


> +static CMPI_THREAD_RETURN snapshot_thread(struct snap_context *ctx)
> +{
> +        CMPIStatus s;

We don't use this, which is fine.  However, leads to a question.. why 
the decision to have do_snapshot() return void?

> +
> +char *vsss_get_save_path(const char *domname)

The function is defined as vss_get_save_path() here, but called as 
get_save_path() later on.

> +{
> +        int ret;
> +        char *path = NULL;
> +
> +        ret = asprintf(&path,
> +                       "/var/lib/libvirt/%s.save", domname);

I assume this path will be valid on all systems / distros?

> +
> +static struct snap_context *new_context(const char *name,
> +                                        CMPIStatus *s)
> +{
> +        struct snap_context *ctx;
> +        uuid_t uuid;
> +
> +        ctx = calloc(1, sizeof(*ctx));
> +        if (ctx == NULL) {
> +                CU_DEBUG("Failed to alloc snapshot context");
> +                goto out;
> +        }
> +
> +        ctx->domain = strdup(name);
> +
> +        uuid_generate(uuid);
> +        uuid_unparse(uuid, ctx->uuid);
> +
> +        ctx->save_path = get_save_path(ctx->domain);

Needs to be vsss_get_save_path()

> +        if (ctx->save_path == NULL) {
> +                cu_statusf(_BROKER, s,
> +                           CMPI_RC_ERR_FAILED,
> +                           "Unable to get save_path");
> +                goto out;
> +        }
> +
> +        cu_statusf(_BROKER, s,
> +                   CMPI_RC_OK,
> +                   "");
> + out:
> +        if (s->rc != CMPI_RC_OK) {
> +                snap_job_free(ctx);
> +                ctx = NULL;
> +        }
> +
> +        return ctx;
> +}
> +
> +static CMPIStatus start_snapshot_job(const CMPIObjectPath *ref,
> +                                     const CMPIContext *context,
> +                                     const char *name,
> +                                     uint16_t type)
> +{
> +        struct snap_context *ctx;
> +        CMPIStatus s;

Need to initialize s here.  Or make sure to set the status when the 
calloc fails in new_context().

> +        CMPIObjectPath *job;
> +
> +        ctx = new_context(name, &s);
> +        if (ctx == NULL)
> +                goto out;
> +
> +        ctx->save = (type != 0);
> +        ctx->restore = (type != VIR_VSSS_SNAPSHOT_MEM);
> +
> +        s = create_job(context, ref, ctx, &job);
> +
> + out:
> +        return s;
> +}
> +

> +
> +static CMPIStatus destroy_snapshot(CMPIMethodMI *self,
> +                                   const CMPIContext *context,
> +                                   const CMPIResult *results,
> +                                   const CMPIObjectPath *reference,
> +                                   const CMPIArgs *argsin,
> +                                   CMPIArgs *argsout)
> +{
> +        CMPIStatus s = {CMPI_RC_OK, NULL};
> +        CMPIObjectPath *snap;
> +        char *name = NULL;
> +        char *path = NULL;

> +        path = get_save_path(name);

Needs to be vsss_get_save_path()

-- 
Kaitlin Rupert
IBM Linux Technology Center
kaitlin at linux.vnet.ibm.com




More information about the Libvirt-cim mailing list