On 2012年05月25日 11:33, Eric Blake wrote:
The two APIs are rather trivial; based on bits and pieces of other
existing APIs. Rather than blindly return 0 or 1 for HasMetadata,
I chose to first validate that the snapshot in question in fact
exists.
* src/qemu/qemu_driver.c (qemuDomainSnapshotIsCurrent)
(qemuDomainSnapshotHasMetadata): New functions.
* src/esx/esx_driver.c (esxDomainSnapshotIsCurrent)
(esxDomainSnapshotHasMetadata): Likewise.
* src/vbox/vbox_tmpl.c (vboxDomainSnapshotIsCurrent)
(vboxDomainSnapshotHasMetadata): Likewise.
---
src/esx/esx_driver.c | 71 +++++++++++++++++++++++++++++++++++
src/qemu/qemu_driver.c | 83 +++++++++++++++++++++++++++++++++++++++++
src/vbox/vbox_tmpl.c | 97 ++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 251 insertions(+), 0 deletions(-)
diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c
index b3f1948..7de86ab 100644
--- a/src/esx/esx_driver.c
+++ b/src/esx/esx_driver.c
@@ -4707,6 +4707,75 @@ esxDomainSnapshotCurrent(virDomainPtr domain, unsigned int flags)
}
+static int
+esxDomainSnapshotIsCurrent(virDomainSnapshotPtr snapshot, unsigned int flags)
+{
+ esxPrivate *priv = snapshot->domain->conn->privateData;
+ esxVI_VirtualMachineSnapshotTree *currentSnapshotTree = NULL;
+ esxVI_VirtualMachineSnapshotTree *rootSnapshotList = NULL;
+ esxVI_VirtualMachineSnapshotTree *snapshotTree = NULL;
+ int ret = -1;
+
+ virCheckFlags(0, -1);
+
+ if (esxVI_EnsureSession(priv->primary)< 0) {
+ return -1;
+ }
+
+ /* Check that snapshot exists. */
+ if (esxVI_LookupRootSnapshotTreeList(priv->primary,
snapshot->domain->uuid,
+&rootSnapshotList)< 0 ||
+ esxVI_GetSnapshotTreeByName(rootSnapshotList, snapshot->name,
+&snapshotTree, NULL,
+ esxVI_Occurrence_RequiredItem)< 0) {
+ goto cleanup;
+ }
+
+ if (esxVI_LookupCurrentSnapshotTree(priv->primary, snapshot->domain->uuid,
+¤tSnapshotTree,
+ esxVI_Occurrence_RequiredItem)< 0) {
+ goto cleanup;
+ }
+
+ ret = STREQ(snapshot->name, currentSnapshotTree->name);
+
+cleanup:
+ esxVI_VirtualMachineSnapshotTree_Free(¤tSnapshotTree);
+ esxVI_VirtualMachineSnapshotTree_Free(&rootSnapshotList);
+ return ret;
+}
+
+
+static int
+esxDomainSnapshotHasMetadata(virDomainSnapshotPtr snapshot, unsigned int flags)
+{
+ esxPrivate *priv = snapshot->domain->conn->privateData;
+ esxVI_VirtualMachineSnapshotTree *rootSnapshotList = NULL;
+ esxVI_VirtualMachineSnapshotTree *snapshotTree = NULL;
+ int ret = -1;
+
+ virCheckFlags(0, -1);
+
+ if (esxVI_EnsureSession(priv->primary)< 0) {
+ return -1;
+ }
+
+ /* Check that snapshot exists. If so, there is no metadata. */
+ if (esxVI_LookupRootSnapshotTreeList(priv->primary,
snapshot->domain->uuid,
+&rootSnapshotList)< 0 ||
+ esxVI_GetSnapshotTreeByName(rootSnapshotList, snapshot->name,
+&snapshotTree, NULL,
+ esxVI_Occurrence_RequiredItem)< 0) {
+ goto cleanup;
+ }
+
+ ret = 0;
+
Looks like it doesn't have metadata anyway for esx and vbox driver,
is it useful then?
Osier