64 lines
2.6 KiB
Diff
64 lines
2.6 KiB
Diff
From 7caecd5f75f22d6bab74efcb3bc151f8bf441ec9 Mon Sep 17 00:00:00 2001
|
|
Message-ID: <7caecd5f75f22d6bab74efcb3bc151f8bf441ec9.1744876587.git.jdenemar@redhat.com>
|
|
From: Peter Krempa <pkrempa@redhat.com>
|
|
Date: Tue, 25 Mar 2025 07:23:01 +0100
|
|
Subject: [PATCH] esxConnectListAllDomains: Don't propagate failure to lookup a
|
|
single domain
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
In esxConnectListAllDomains if the lookup of the VM name and UUID fails
|
|
for a single VM (possible e.g. with broken storage) the whole API would
|
|
return failure even when there are working VMs.
|
|
|
|
Rework the lookup so that if a subset fails we ignore the failure on
|
|
those. We report an error only if lookup of all of the objects failed.
|
|
Failure is reported from the last one.
|
|
|
|
Resolves: https://issues.redhat.com/browse/RHEL-80606
|
|
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
|
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
|
(cherry picked from commit 7d4de62cfa8c684b2d63a48c71f0ae009acddf62)
|
|
---
|
|
src/esx/esx_driver.c | 22 ++++++++++++----------
|
|
1 file changed, 12 insertions(+), 10 deletions(-)
|
|
|
|
diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c
|
|
index 554fb3e18f..6ae4ef9658 100644
|
|
--- a/src/esx/esx_driver.c
|
|
+++ b/src/esx/esx_driver.c
|
|
@@ -4792,18 +4792,20 @@ esxConnectListAllDomains(virConnectPtr conn,
|
|
virtualMachine = virtualMachine->_next) {
|
|
g_autofree char *name = NULL;
|
|
|
|
- if (needIdentity) {
|
|
- if (esxVI_GetVirtualMachineIdentity(virtualMachine, &id,
|
|
- &name, uuid) < 0) {
|
|
- goto cleanup;
|
|
- }
|
|
- }
|
|
+ /* If the lookup of the required properties fails for some of the machines
|
|
+ * in the list it's preferrable to return the valid objects instead of
|
|
+ * failing outright */
|
|
+ if ((needIdentity && esxVI_GetVirtualMachineIdentity(virtualMachine, &id, &name, uuid) < 0) ||
|
|
+ (needPowerState && esxVI_GetVirtualMachinePowerState(virtualMachine, &powerState) < 0)) {
|
|
|
|
- if (needPowerState) {
|
|
- if (esxVI_GetVirtualMachinePowerState(virtualMachine,
|
|
- &powerState) < 0) {
|
|
+ /* Raise error only if we didn't successfuly fill any domain */
|
|
+ if (count == 0 && !virtualMachine->_next)
|
|
goto cleanup;
|
|
- }
|
|
+
|
|
+ /* failure to fetch information of a single VM must not interrupt
|
|
+ * the lookup of the rest */
|
|
+ virResetLastError();
|
|
+ continue;
|
|
}
|
|
|
|
/* filter by active state */
|
|
--
|
|
2.49.0
|