[PATCH] esx: Fetch snapshot info directly for filtering

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



When fetching domains with virConnectListAllDomains() and when filtering
by snapshot existence is requested the ESX driver first lists all the
domains and then check one-by-one for snapshot existence. This process
takes unnecessarily long time.

To significantly improve the time necessary to finish the query we can
request the snapshot related info directly when querying the list of
domains from VMware.

Signed-off-by: Tomáš Golembiovský <tgolembi@xxxxxxxxxx>
---
 src/esx/esx_driver.c | 22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c
index eae015a..3d90b69 100644
--- a/src/esx/esx_driver.c
+++ b/src/esx/esx_driver.c
@@ -4924,6 +4924,7 @@ esxConnectListAllDomains(virConnectPtr conn,
     int count = 0;
     bool autostart;
     int state;
+    esxVI_DynamicProperty *dynamicProperty = NULL;
 
     virCheckFlags(VIR_CONNECT_LIST_DOMAINS_FILTERS_ALL, -1);
 
@@ -4985,6 +4986,13 @@ esxConnectListAllDomains(virConnectPtr conn,
         }
     }
 
+    if (MATCH(VIR_CONNECT_LIST_DOMAINS_FILTERS_SNAPSHOT)) {
+        if (esxVI_String_AppendValueToList(&propertyNameList,
+                                           "snapshot.rootSnapshotList") < 0) {
+            goto cleanup;
+        }
+    }
+
     if (esxVI_LookupVirtualMachineList(priv->primary, propertyNameList,
                                        &virtualMachineList) < 0)
         goto cleanup;
@@ -5023,11 +5031,19 @@ esxConnectListAllDomains(virConnectPtr conn,
 
         /* filter by snapshot existence */
         if (MATCH(VIR_CONNECT_LIST_DOMAINS_FILTERS_SNAPSHOT)) {
+
             esxVI_VirtualMachineSnapshotTree_Free(&rootSnapshotTreeList);
 
-            if (esxVI_LookupRootSnapshotTreeList(priv->primary, uuid,
-                                                 &rootSnapshotTreeList) < 0) {
-                goto cleanup;
+            for (dynamicProperty = virtualMachine->propSet; dynamicProperty;
+                dynamicProperty = dynamicProperty->_next) {
+                if (STREQ(dynamicProperty->name, "snapshot.rootSnapshotList")) {
+                    if (esxVI_VirtualMachineSnapshotTree_CastListFromAnyType
+                        (dynamicProperty->val, &rootSnapshotTreeList) < 0) {
+                        goto cleanup;
+                    }
+
+                    break;
+                }
             }
 
             if (!((MATCH(VIR_CONNECT_LIST_DOMAINS_HAS_SNAPSHOT) &&
-- 
2.9.0


--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]