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

Reply via email to