[libvirt] [PATCHv2 variant 1] snapshot: implement new APIs for esx and vbox
Matthias Bolte
matthias.bolte at googlemail.com
Sun Jun 17 10:29:34 UTC 2012
2012/6/12 Eric Blake <eblake at redhat.com>:
> The two new APIs are rather trivial; based on bits and pieces of
> other existing APIs. But rather than blindly return 0 or 1 for
> HasMetadata, I chose to first validate that the snapshot in
> question in fact exists. In the process, I noticed other APIs
> that were blindly succeeding instead of checking for existence.
>
> * src/esx/esx_driver.c (esxDomainSnapshotIsCurrent)
> (esxDomainSnapshotHasMetadata): New functions.
> (esxDomainIsUpdated, esxDomainIsPersistent): Add existence checks.
> * src/vbox/vbox_tmpl.c (vboxDomainSnapshotIsCurrent)
> (vboxDomainSnapshotHasMetadata): New functions.
> (vboxDomainIsPersistent, vboxDomainIsUpdated): Add existence checks.
> ---
>
> v2: add existence checks to other functions
> I like this version better. However, while it compiles, I'm
> completely unable to runtime test it, so I'd appreciate a
> good review.
>
> src/esx/esx_driver.c | 116 ++++++++++++++++++++++++++++++++++++++--
> src/vbox/vbox_tmpl.c | 145 ++++++++++++++++++++++++++++++++++++++++++++++++--
> 2 files changed, 253 insertions(+), 8 deletions(-)
> diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c
> index 4b0ee2e..8b7415a 100644
> --- a/src/vbox/vbox_tmpl.c
> +++ b/src/vbox/vbox_tmpl.c
> +static int
> +vboxDomainSnapshotHasMetadata(virDomainSnapshotPtr snapshot,
> + unsigned int flags)
> +{
> + virDomainPtr dom = snapshot->domain;
> + VBOX_OBJECT_CHECK(dom->conn, int, -1);
> + vboxIID iid = VBOX_IID_INITIALIZER;
> + IMachine *machine = NULL;
> + ISnapshot *snap = NULL;
> + nsresult rc;
> +
> + virCheckFlags(0, -1);
> +
> + vboxIIDFromUUID(&iid, dom->uuid);
> + rc = VBOX_OBJECT_GET_MACHINE(iid.value, &machine);
> + if (NS_FAILED(rc)) {
> + vboxError(VIR_ERR_NO_DOMAIN, "%s",
> + _("no domain with matching UUID"));
> + goto cleanup;
> + }
> +
> + /* Check that snapshot exists. If so, there is no metadata. */
> + if (!(snap = vboxDomainSnapshotGet(data, dom, machine, snapshot->name)))
> + goto cleanup;
> +
> + ret = 0;
> +
> +cleanup:
VBOX_RELEASE(snap); is missing here.
> + VBOX_RELEASE(machine);
> + vboxIIDUnalloc(&iid);
> + return ret;
> +}
Tested and works. ACK.
--
Matthias Bolte
http://photron.blogspot.com
More information about the libvir-list
mailing list