From 5885b92fba652d7da5d3f736e94a28857017a52f Mon Sep 17 00:00:00 2001 From: Stepan Ermakov Date: Wed, 25 Sep 2024 10:15:12 +0300 Subject: [PATCH] ISO images by default are uploaded as Raw/Thin Provision. And if you later move such disk to a block storage (FC/iSCSI) then it will be converted to Cow/Thin Provision. And this might corrupt the disk. To avoid this issue we suggested to always upload ISO images as Raw/Preallocated. In this case no conversion needed while moving to a block storage. And disk works fine in both types (block and non-block) storages. Signed-off-by: Stepan Ermakov --- .../models/storage/UploadImageModel.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/UploadImageModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/UploadImageModel.java index 1dbaf0bc094..b2d512ecbb8 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/UploadImageModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/UploadImageModel.java @@ -22,6 +22,7 @@ import org.ovirt.engine.core.common.businessentities.storage.TransferClientType; import org.ovirt.engine.core.common.businessentities.storage.TransferType; import org.ovirt.engine.core.common.businessentities.storage.VolumeFormat; +import org.ovirt.engine.core.common.businessentities.storage.VolumeType; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.QueryReturnValue; import org.ovirt.engine.core.common.queries.QueryType; @@ -371,12 +372,18 @@ public boolean flush() { DiskImage diskImage = (DiskImage) getDiskModel().getDisk(); diskImage.setSize(getVirtualSize()); diskImage.setActualSizeInBytes(imageInfoModel.getActualSize()); - diskImage.setVolumeFormat(diskModel.getIsIncrementalBackup().getEntity() ? - VolumeFormat.COW : getImageInfoModel().getFormat()); - diskImage.setVolumeType(AsyncDataProvider.getInstance().getVolumeType( - diskImage.getVolumeFormat(), - getDiskModel().getStorageDomain().getSelectedItem().getStorageType(), null, null)); - diskImage.setContentType(getImageInfoModel().getContentType()); + VolumeFormat volumeFormat = diskModel.getIsIncrementalBackup().getEntity() ? + VolumeFormat.COW : getImageInfoModel().getFormat(); + diskImage.setVolumeFormat(volumeFormat); + DiskContentType contentType = getImageInfoModel().getContentType(); + if (volumeFormat != VolumeFormat.COW && contentType == DiskContentType.ISO) { + diskImage.setVolumeType(VolumeType.Preallocated); + } else { + diskImage.setVolumeType(AsyncDataProvider.getInstance().getVolumeType( + volumeFormat, + getDiskModel().getStorageDomain().getSelectedItem().getStorageType(), null, null)); + } + diskImage.setContentType(contentType); return true; } else { setIsValid(false);