Vered Volansky has uploaded a new change for review.

Change subject: core: Import image from glance storage allocation
......................................................................

core: Import image from glance storage allocation

This patch is a part of a series of patches, adding storage allocation
validations to the system when they're missing, and replacing old
verification usage with unified, new, correct and tested verification.
This patch did this for ImportRepoImageCommand, using only existing
validations.
Reorganized sparse/preallocated determination as part of the CDA flow as
to have the correct storage allocation validation.

Change-Id: I60b7f13d8f64608f97e4eeebe2f9eef3087d9920
Bug-Url: https://bugzilla.redhat.com/1053750
Signed-off-by: Vered Volansky <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportRepoImageCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportRepoImageCreateTaskHandler.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/ImportRepoImageCommandTest.java
3 files changed, 28 insertions(+), 24 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/44/33844/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportRepoImageCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportRepoImageCommand.java
index c33e60d..02e6099 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportRepoImageCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportRepoImageCommand.java
@@ -10,6 +10,7 @@
 import org.ovirt.engine.core.bll.tasks.SPMAsyncTaskHandler;
 import org.ovirt.engine.core.bll.tasks.TaskHandlerCommand;
 import org.ovirt.engine.core.bll.utils.PermissionSubject;
+import org.ovirt.engine.core.bll.validator.StorageDomainValidator;
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.FeatureSupported;
 import org.ovirt.engine.core.common.VdcObjectType;
@@ -19,6 +20,8 @@
 import org.ovirt.engine.core.common.businessentities.ActionGroup;
 import org.ovirt.engine.core.common.businessentities.ArchitectureType;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
+import org.ovirt.engine.core.common.businessentities.VolumeFormat;
+import org.ovirt.engine.core.common.businessentities.VolumeType;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
 import org.ovirt.engine.core.compat.Guid;
 
@@ -147,8 +150,16 @@
 
     protected DiskImage getDiskImage() {
         if (getParameters().getDiskImage() == null) {
-            getParameters().setDiskImage(
-                    
getProviderProxy().getImageAsDiskImage(getParameters().getSourceRepoImageId()));
+            DiskImage diskImage = 
getProviderProxy().getImageAsDiskImage(getParameters().getSourceRepoImageId());
+            if (diskImage != null) {
+                if (diskImage.getVolumeFormat() == VolumeFormat.RAW &&
+                        getStorageDomain().getStorageType().isBlockDomain()) {
+                    diskImage.setVolumeType(VolumeType.Preallocated);
+                } else {
+                    diskImage.setVolumeType(VolumeType.Sparse);
+                }
+            }
+            getParameters().setDiskImage(diskImage);
         }
         return getParameters().getDiskImage();
     }
@@ -236,6 +247,17 @@
             return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_DISK_NOT_EXIST);
         }
 
-        return true;
+        return validateSpaceRequirements(diskImage);
+    }
+
+    protected boolean validateSpaceRequirements(DiskImage diskImage) {
+        StorageDomainValidator sdValidator = createStorageDomainValidator();
+        return (validate(sdValidator.isDomainExistAndActive())
+                && validate(sdValidator.isDomainWithinThresholds()))
+                && validate(sdValidator.hasSpaceForClonedDisk(diskImage));
+    }
+
+    protected StorageDomainValidator createStorageDomainValidator() {
+        return new StorageDomainValidator(getStorageDomain());
     }
 }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportRepoImageCreateTaskHandler.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportRepoImageCreateTaskHandler.java
index bbf3530..7e727b7 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportRepoImageCreateTaskHandler.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportRepoImageCreateTaskHandler.java
@@ -16,18 +16,12 @@
 import org.ovirt.engine.core.common.businessentities.DiskInterface;
 import org.ovirt.engine.core.common.businessentities.ImageStatus;
 import org.ovirt.engine.core.common.businessentities.Permissions;
-import org.ovirt.engine.core.common.businessentities.StorageDomain;
-import org.ovirt.engine.core.common.businessentities.VolumeFormat;
-import org.ovirt.engine.core.common.businessentities.VolumeType;
 import org.ovirt.engine.core.compat.Guid;
-import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 
 
 public class ImportRepoImageCreateTaskHandler implements SPMAsyncTaskHandler {
 
     private final CommandBase<? extends ImportRepoImageParameters> 
enclosingCommand;
-
-    private StorageDomain destinationStorageDomain;
 
     public ImportRepoImageCreateTaskHandler(CommandBase<? extends 
ImportRepoImageParameters> enclosingCommand) {
         this.enclosingCommand = enclosingCommand;
@@ -50,13 +44,6 @@
             
diskImage.setId(enclosingCommand.getParameters().getImageGroupID());
             diskImage.setDiskInterface(DiskInterface.VirtIO);
 
-            if (diskImage.getVolumeFormat() == VolumeFormat.RAW &&
-                    
getDestinationStorageDomain().getStorageType().isBlockDomain()) {
-                diskImage.setVolumeType(VolumeType.Preallocated);
-            } else {
-                diskImage.setVolumeType(VolumeType.Sparse);
-            }
-
             VdcReturnValueBase vdcReturnValue =
                     
Backend.getInstance().runInternalAction(VdcActionType.AddImageFromScratch,
                             getAddImageFromScratchParameters(),
@@ -76,14 +63,6 @@
             
ExecutionHandler.setAsyncJob(enclosingCommand.getExecutionContext(), true);
             enclosingCommand.getReturnValue().setSucceeded(true);
         }
-    }
-
-    protected StorageDomain getDestinationStorageDomain() {
-        if (destinationStorageDomain == null) {
-            destinationStorageDomain = 
DbFacade.getInstance().getStorageDomainDao().get(
-                    enclosingCommand.getParameters().getStorageDomainId());
-        }
-        return destinationStorageDomain;
     }
 
     protected AddImageFromScratchParameters getAddImageFromScratchParameters() 
{
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/ImportRepoImageCommandTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/ImportRepoImageCommandTest.java
index 7f2d0ab..70f357e 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/ImportRepoImageCommandTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/ImportRepoImageCommandTest.java
@@ -5,9 +5,11 @@
 import org.junit.runner.RunWith;
 import org.mockito.runners.MockitoJUnitRunner;
 import org.ovirt.engine.core.common.action.ImportRepoImageParameters;
+import org.ovirt.engine.core.common.businessentities.DiskImage;
 import org.ovirt.engine.core.common.businessentities.StoragePoolStatus;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
 
+import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
@@ -35,6 +37,7 @@
         doReturn(getStorageDomainDao()).when(cmd).getStorageDomainDAO();
         doReturn(getStoragePoolDao()).when(cmd).getStoragePoolDAO();
         doReturn(getProviderProxy()).when(cmd).getProviderProxy();
+        
doReturn(true).when(cmd).validateSpaceRequirements(any(DiskImage.class));
     }
 
     @Test


-- 
To view, visit http://gerrit.ovirt.org/33844
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I60b7f13d8f64608f97e4eeebe2f9eef3087d9920
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Vered Volansky <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to