From 6536fa9a3c4c036774ba8a7f707c86d2638a64a1 Mon Sep 17 00:00:00 2001 From: Benny Zlotnik Date: Wed, 2 Nov 2022 17:51:59 +0200 Subject: [PATCH] core: fail storage domain attach if getImagesList fails If getImagesList fails due to an error we should not continue with attaching the SD assuming there no disks on the storage as this will corrupt the OVF stores. Instead fail the attach operation and have the user retry once the issue is resolved. Bug-Url: https://bugzilla.redhat.com/2126602 Signed-off-by: Benny Zlotnik --- .../bll/storage/StorageHandlingCommandBase.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageHandlingCommandBase.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageHandlingCommandBase.java index 8344c23aab4..fe8344074cc 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageHandlingCommandBase.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageHandlingCommandBase.java @@ -60,6 +60,7 @@ import org.ovirt.engine.core.common.errors.EngineException; import org.ovirt.engine.core.common.errors.EngineMessage; import org.ovirt.engine.core.common.queries.GetUnregisteredDisksQueryParameters; +import org.ovirt.engine.core.common.queries.QueryReturnValue; import org.ovirt.engine.core.common.queries.QueryType; import org.ovirt.engine.core.common.utils.Pair; import org.ovirt.engine.core.common.vdscommands.IrsBaseVDSCommandParameters; @@ -431,16 +432,23 @@ protected List getAllOVFDisks(Guid storageDomainId, Guid storagePoolI ovfDisks = new ArrayList<>(); // Get all unregistered disks. - List disksFromStorage = backend.runInternalQuery(QueryType.GetUnregisteredDisks, + QueryReturnValue queryReturnValue = backend.runInternalQuery(QueryType.GetUnregisteredDisks, new GetUnregisteredDisksQueryParameters(storageDomainId, - storagePoolId)).getReturnValue(); - if (disksFromStorage == null) { + storagePoolId)); + StorageDomain sd = storageDomainDao.get(storageDomainId); + if (sd.getStorageDomainType() == StorageDomainType.Data && !queryReturnValue.getSucceeded()) { log.error("An error occurred while fetching unregistered disks from Storage Domain id '{}'", storageDomainId); + throw new RuntimeException("Failed to retrieve unregistered disks"); + } + + List disksFromStorage = queryReturnValue.getReturnValue(); + if (disksFromStorage == null) { return ovfDisks; } else { castDiskImagesToUnregisteredDisks(disksFromStorage, storageDomainId); } + for (Disk disk : disksFromStorage) { DiskImage ovfStoreDisk = (DiskImage) disk; String diskDescription = ovfStoreDisk.getDescription();