From 8ddc56e75109787e99dd8d756cbd1d03e653c857 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Golembiovsk=C3=BD?= Date: Tue, 12 Jul 2016 05:20:03 +0200 Subject: [PATCH] esx: Fetch snapshot info directly for filtering MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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ý --- 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 eae015a26f..3d90b695de 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) && -- GitLab