Sergey Gotliv has uploaded a new change for review. Change subject: engine: Illegal images should be skipped when validating duplicates ......................................................................
engine: Illegal images should be skipped when validating duplicates Before starting to import VM from Template Engine validates that template images don't exist on the storage, if at least one of them exists its probably would be better to clone VM instead of import, just to prevent potential data loss. Engine assumes that its database correctly represents the storage so this validation is done against database values. The problem is that currently Engine takes in consideration also ILLEGAL images although they are illegal. Change-Id: I7b43e4b4e8e04dfb644a33ea9ce2a474987c5e3c Signed-off-by: Sergey Gotliv <sgot...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyTemplateCommand.java 3 files changed, 36 insertions(+), 21 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/46/19246/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java index 12dcb42..0ed6e0f 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java @@ -25,7 +25,6 @@ import org.ovirt.engine.core.bll.tasks.TaskHandlerCommand; import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.bll.utils.VmDeviceUtils; -import org.ovirt.engine.core.bll.validator.DiskImagesValidator; import org.ovirt.engine.core.bll.validator.StorageDomainValidator; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.FeatureSupported; @@ -476,15 +475,6 @@ !FeatureSupported.virtIoScsi(getVdsGroup().getcompatibility_version())) { return failCanDoAction(VdcBllMessages.VIRTIO_SCSI_INTERFACE_IS_NOT_AVAILABLE_FOR_CLUSTER_LEVEL); } - } - - return true; - } - - protected boolean validateNoDuplicateDiskImages(Iterable<DiskImage> images) { - if (!getParameters().isImportAsNewEntity()) { - DiskImagesValidator diskImagesValidator = new DiskImagesValidator(images); - return validate(diskImagesValidator.diskImagesAlreadyExist()); } return true; diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateCommand.java index b3a3d6b..ddc8294 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateCommand.java @@ -12,7 +12,6 @@ import org.ovirt.engine.core.bll.quota.QuotaStorageConsumptionParameter; import org.ovirt.engine.core.bll.quota.QuotaStorageDependent; import org.ovirt.engine.core.bll.utils.VmDeviceUtils; -import org.ovirt.engine.core.bll.validator.DiskImagesValidator; import org.ovirt.engine.core.bll.validator.StorageDomainValidator; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.VdcObjectType; @@ -168,7 +167,7 @@ } } - if (retVal) { + if (retVal && !getParameters().isImportAsNewEntity()) { retVal = validateNoDuplicateDiskImages(getParameters().getImages()); } @@ -220,15 +219,6 @@ image.setImageId(Guid.newGuid()); } } - } - - protected boolean validateNoDuplicateDiskImages(Iterable<DiskImage> images) { - if (!getParameters().isImportAsNewEntity()) { - DiskImagesValidator diskImagesValidator = new DiskImagesValidator(images); - return validate(diskImagesValidator.diskImagesAlreadyExist()); - } - - return true; } /** diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyTemplateCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyTemplateCommand.java index d95c7ec..a8a7831 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyTemplateCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyTemplateCommand.java @@ -27,6 +27,7 @@ import org.ovirt.engine.core.common.asynctasks.EntityInfo; import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.ImageOperation; +import org.ovirt.engine.core.common.businessentities.ImageStatus; import org.ovirt.engine.core.common.businessentities.Snapshot; import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.StorageDomainStatus; @@ -364,4 +365,38 @@ } return true; } + + protected boolean validateNoDuplicateDiskImages(Iterable<DiskImage> diskImages) { + List<String> existingLegalDisksAliases = new ArrayList<String>(); + List<DiskImage> duplicateDiskImages = getDuplicateDiskImagesFromDB(diskImages); + + if (duplicateDiskImages.isEmpty()) { + return true; + } + + for (DiskImage diskImage : diskImages) { + if (diskImage.getImageStatus() != ImageStatus.ILLEGAL) { + existingLegalDisksAliases.add(diskImage.getDiskAlias()); + } + } + + if (!existingLegalDisksAliases.isEmpty()) { + return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_IMPORT_DISKS_ALREADY_EXIST, + String.format("$diskAliases %s", StringUtils.join(existingLegalDisksAliases, ", "))); + } + + getParameters().setForceOverride(true); + return true; + } + + private List<DiskImage> getDuplicateDiskImagesFromDB(Iterable<DiskImage> images) { + List<DiskImage> duplicateImages = new ArrayList<>(); + for (DiskImage image : images) { + DiskImage diskImage = getDiskImageDao().get(image.getId()); + if (diskImage != null) { + duplicateImages.add(diskImage); + } + } + return duplicateImages; + } } -- To view, visit http://gerrit.ovirt.org/19246 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I7b43e4b4e8e04dfb644a33ea9ce2a474987c5e3c Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Sergey Gotliv <sgot...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches