Maor Lipchuk has uploaded a new change for review.

Change subject: core: Use validate instead using space checker
......................................................................

core: Use validate instead using space checker

Use validate instead storage domain space checker for all the rest of
the commands which use validation for storage free space.

Change-Id: I2efe75b59a0890c3349b9927e677a4eac3323e9a
Signed-off-by: Maor Lipchuk <mlipc...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommonVmPoolWithVmsCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HibernateVmCommand.java
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/MoveOrCopyDiskCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyTemplateCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveVmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmRunHandler.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageDomainCommandBase.java
10 files changed, 57 insertions(+), 46 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/88/11588/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommonVmPoolWithVmsCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommonVmPoolWithVmsCommand.java
index 8bb2d9f..f154741 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommonVmPoolWithVmsCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommonVmPoolWithVmsCommand.java
@@ -5,13 +5,13 @@
 import java.util.List;
 import java.util.Map;
 
-import org.ovirt.engine.core.bll.command.utils.StorageDomainSpaceChecker;
 import org.ovirt.engine.core.bll.context.CommandContext;
 import org.ovirt.engine.core.bll.job.ExecutionContext;
 import org.ovirt.engine.core.bll.job.ExecutionHandler;
-import org.ovirt.engine.core.bll.quota.QuotaStorageDependent;
-import org.ovirt.engine.core.bll.quota.QuotaStorageConsumptionParameter;
 import org.ovirt.engine.core.bll.quota.QuotaConsumptionParameter;
+import org.ovirt.engine.core.bll.quota.QuotaStorageConsumptionParameter;
+import org.ovirt.engine.core.bll.quota.QuotaStorageDependent;
+import org.ovirt.engine.core.bll.validator.StorageDomainValidator;
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.VdcObjectType;
 import org.ovirt.engine.core.common.action.AddVmAndAttachToPoolParameters;
@@ -314,11 +314,9 @@
                     retValue = false;
                     break;
                 }
-                if (!StorageDomainSpaceChecker.hasSpaceForRequest(domain, 
numOfDisksOnDomain
+                if (!doesStorageDomainhaveSpaceForRequest(domain, 
numOfDisksOnDomain
                         * getBlockSparseInitSizeInGB() * 
getParameters().getVmsCount())) {
-                    
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_DISK_SPACE_LOW);
-                    retValue = false;
-                    break;
+                    return false;
                 }
             }
             validDomains.add(domainId);
@@ -326,6 +324,10 @@
         return retValue;
     }
 
+    protected boolean doesStorageDomainhaveSpaceForRequest(storage_domains 
storageDomain, long sizeRequested) {
+        return validate(new 
StorageDomainValidator(storageDomain).isDomainHasSpaceForRequest(sizeRequested));
+    }
+
     private int getBlockSparseInitSizeInGB() {
         return Config.<Integer> 
GetValue(ConfigValues.InitStorageSparseSizeInGB).intValue();
     }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmCommand.java
index cd5fb10..a6f6769 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmCommand.java
@@ -9,7 +9,6 @@
 import java.util.Map;
 
 import org.apache.commons.lang.StringUtils;
-import org.ovirt.engine.core.bll.command.utils.StorageDomainSpaceChecker;
 import org.ovirt.engine.core.bll.job.ExecutionHandler;
 import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator;
 import org.ovirt.engine.core.bll.storage.StoragePoolValidator;
@@ -33,6 +32,7 @@
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VmTemplate;
 import org.ovirt.engine.core.common.businessentities.VolumeFormat;
+import org.ovirt.engine.core.common.businessentities.storage_domains;
 import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
 import org.ovirt.engine.core.common.errors.VdcBLLException;
 import org.ovirt.engine.core.common.locks.LockingGroup;
@@ -147,8 +147,7 @@
         }
         // check destination storage have free space
         int sizeInGB = (int) getVm().getActualDiskWithSnapshotsSize();
-        if (!StorageDomainSpaceChecker.hasSpaceForRequest(getStorageDomain(), 
sizeInGB)) {
-            
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_DISK_SPACE_LOW);
+        if (!doesStorageDomainhaveSpaceForRequest(getStorageDomain(), 
sizeInGB)) {
             return false;
         }
 
@@ -175,6 +174,10 @@
         return true;
     }
 
+    protected boolean doesStorageDomainhaveSpaceForRequest(storage_domains 
storageDomain, long sizeRequested) {
+        return validate(new 
StorageDomainValidator(storageDomain).isDomainHasSpaceForRequest(sizeRequested));
+    }
+
     @Override
     protected void setActionMessageParameters() {
         addCanDoActionMessage(VdcBllMessages.VAR__ACTION__EXPORT);
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HibernateVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HibernateVmCommand.java
index 2a8b6ab..c894581 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HibernateVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HibernateVmCommand.java
@@ -5,7 +5,7 @@
 import java.util.List;
 import java.util.Map;
 
-import org.ovirt.engine.core.bll.command.utils.StorageDomainSpaceChecker;
+import org.ovirt.engine.core.bll.validator.StorageDomainValidator;
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.VdcObjectType;
 import org.ovirt.engine.core.common.action.HibernateVmParameters;
@@ -14,11 +14,11 @@
 import org.ovirt.engine.core.common.asynctasks.AsyncTaskType;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
 import org.ovirt.engine.core.common.businessentities.Snapshot.SnapshotType;
+import org.ovirt.engine.core.common.businessentities.StorageDomainStatic;
 import org.ovirt.engine.core.common.businessentities.StorageDomainType;
 import org.ovirt.engine.core.common.businessentities.VMStatus;
 import org.ovirt.engine.core.common.businessentities.VolumeFormat;
 import org.ovirt.engine.core.common.businessentities.VolumeType;
-import org.ovirt.engine.core.common.businessentities.StorageDomainStatic;
 import org.ovirt.engine.core.common.businessentities.storage_domains;
 import org.ovirt.engine.core.common.errors.VdcBLLException;
 import org.ovirt.engine.core.common.locks.LockingGroup;
@@ -269,10 +269,9 @@
                     storage_domains domain =
                             
DbFacade.getInstance().getStorageDomainDao().get(getStorageDomainId().getValue());
                     if (retValue
-                            && 
!StorageDomainSpaceChecker.hasSpaceForRequest(domain, (getImageSizeInBytes()
+                            && !doesStorageDomainhaveSpaceForRequest(domain, 
(getImageSizeInBytes()
                                     + getMetaDataSizeInBytes())/BYTES_IN_GB)) {
-                        retValue = false;
-                        
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_DISK_SPACE_LOW);
+                        return false;
                     }
                 }
             }
@@ -280,6 +279,10 @@
         return retValue;
     }
 
+    protected boolean doesStorageDomainhaveSpaceForRequest(storage_domains 
storageDomain, long sizeRequested) {
+        return validate(new 
StorageDomainValidator(storageDomain).isDomainHasSpaceForRequest(sizeRequested));
+    }
+
     @Override
     protected void setActionMessageParameters() {
         addCanDoActionMessage(VdcBllMessages.VAR__TYPE__VM);
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 4068af4..ca7d20a 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
@@ -11,7 +11,6 @@
 import java.util.Set;
 
 import org.apache.commons.lang.StringUtils;
-import org.ovirt.engine.core.bll.command.utils.StorageDomainSpaceChecker;
 import org.ovirt.engine.core.bll.job.ExecutionHandler;
 import org.ovirt.engine.core.bll.network.MacPoolManager;
 import org.ovirt.engine.core.bll.network.VmInterfaceManager;
@@ -338,8 +337,8 @@
         Map<storage_domains, Integer> domainMap = 
getSpaceRequirementsForStorageDomains(imageList);
 
         for (Map.Entry<storage_domains, Integer> entry : domainMap.entrySet()) 
{
-            if (!StorageDomainSpaceChecker.hasSpaceForRequest(entry.getKey(), 
entry.getValue())) {
-                return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_DISK_SPACE_LOW);
+            if (!doesStorageDomainhaveSpaceForRequest(entry.getKey(), 
entry.getValue())) {
+                return false;
             }
         }
 
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 608cd67..7eafcf2 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
@@ -6,7 +6,6 @@
 import java.util.List;
 import java.util.Map;
 
-import org.ovirt.engine.core.bll.command.utils.StorageDomainSpaceChecker;
 import org.ovirt.engine.core.bll.job.ExecutionHandler;
 import org.ovirt.engine.core.bll.network.VmInterfaceManager;
 import org.ovirt.engine.core.bll.quota.QuotaConsumptionParameter;
@@ -175,10 +174,8 @@
                 domainMap.put(getStorageDomain(), sz);
             }
             for (Map.Entry<storage_domains, Integer> entry : 
domainMap.entrySet()) {
-                retVal = 
StorageDomainSpaceChecker.hasSpaceForRequest(entry.getKey(), entry.getValue());
-                if (!retVal) {
-                    
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_DISK_SPACE_LOW);
-                    break;
+                if (!doesStorageDomainhaveSpaceForRequest(entry.getKey(), 
entry.getValue())) {
+                    return false;
                 }
             }
         }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommand.java
index f17dad3..0745e2b 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommand.java
@@ -8,7 +8,6 @@
 import java.util.Map;
 
 import org.apache.commons.lang.StringUtils;
-import org.ovirt.engine.core.bll.command.utils.StorageDomainSpaceChecker;
 import org.ovirt.engine.core.bll.job.ExecutionHandler;
 import org.ovirt.engine.core.bll.quota.QuotaConsumptionParameter;
 import org.ovirt.engine.core.bll.quota.QuotaStorageConsumptionParameter;
@@ -171,7 +170,7 @@
     }
 
     protected boolean doesStorageDomainHaveSpaceForRequest(long size) {
-        return 
StorageDomainSpaceChecker.hasSpaceForRequest(getStorageDomain(), size);
+        return validate(new 
StorageDomainValidator(getStorageDomain()).isDomainHasSpaceForRequest(size));
     }
 
     protected boolean checkIfNeedToBeOverride() {
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 a0efdbf..b968477 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
@@ -10,7 +10,6 @@
 import java.util.regex.Pattern;
 
 import org.apache.commons.lang.StringUtils;
-import org.ovirt.engine.core.bll.command.utils.StorageDomainSpaceChecker;
 import org.ovirt.engine.core.bll.job.ExecutionHandler;
 import org.ovirt.engine.core.bll.network.MacPoolManager;
 import org.ovirt.engine.core.bll.storage.StorageDomainCommandBase;
@@ -146,11 +145,7 @@
     }
 
     private boolean checkFreeSpaceOnDestinationDomain(storage_domains domain, 
int requestedSizeGB) {
-        if (!StorageDomainSpaceChecker.hasSpaceForRequest(domain, 
requestedSizeGB)) {
-            
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_DISK_SPACE_LOW);
-            return false;
-        }
-        return true;
+        return validate(new 
StorageDomainValidator(domain).isDomainHasSpaceForRequest(requestedSizeGB));
     }
 
     @Override
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveVmCommand.java
index be63a0d..06af138 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveVmCommand.java
@@ -4,9 +4,9 @@
 import java.util.List;
 import java.util.Map;
 
-import org.ovirt.engine.core.bll.command.utils.StorageDomainSpaceChecker;
 import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator;
 import org.ovirt.engine.core.bll.storage.StoragePoolValidator;
+import org.ovirt.engine.core.bll.validator.StorageDomainValidator;
 import org.ovirt.engine.core.bll.validator.VmValidator;
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.action.MoveVmParameters;
@@ -111,12 +111,7 @@
     }
 
     private boolean destinationHasSpace() {
-        if (!StorageDomainSpaceChecker.hasSpaceForRequest(getStorageDomain(),
-                (int) getVm().getActualDiskWithSnapshotsSize())) {
-            
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_DISK_SPACE_LOW);
-            return false;
-        }
-        return true;
+        return validate(new 
StorageDomainValidator(getStorageDomain()).isDomainHasSpaceForRequest((long) 
getVm().getActualDiskWithSnapshotsSize()));
     }
 
     protected boolean checkTemplateInStorageDomain(List<DiskImage> diskImages) 
{
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmRunHandler.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmRunHandler.java
index 344caf4..3872a06 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmRunHandler.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmRunHandler.java
@@ -8,10 +8,10 @@
 import java.util.Map.Entry;
 
 import org.apache.commons.lang.StringUtils;
-import org.ovirt.engine.core.bll.command.utils.StorageDomainSpaceChecker;
 import org.ovirt.engine.core.bll.interfaces.BackendInternal;
 import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator;
 import org.ovirt.engine.core.bll.storage.StoragePoolValidator;
+import org.ovirt.engine.core.bll.validator.StorageDomainValidator;
 import org.ovirt.engine.core.bll.validator.VmValidator;
 import org.ovirt.engine.core.common.VdcActionUtils;
 import org.ovirt.engine.core.common.action.RunVmParams;
@@ -167,9 +167,8 @@
                                 
message.add(VdcBllMessages.VM_CANNOT_RUN_STATELESS_HA.toString());
                             }
 
-                            if (retValue && isStatelessVm && 
!hasSpaceForSnapthosts(vm)) {
-                                retValue = false;
-                                
message.add(VdcBllMessages.ACTION_TYPE_FAILED_DISK_SPACE_LOW.name());
+                            if (retValue && isStatelessVm && 
!hasSpaceForSnapthosts(vm, message)) {
+                                return false;
                             }
 
                             retValue = retValue == false ? retValue : 
vdsSelector.canFindVdsToRunOn(message, false);
@@ -198,18 +197,32 @@
      * @param vm
      * @return true if all storage domains have enough space to create 
snapshots for this VM plugged disks
      */
-    public boolean hasSpaceForSnapthosts(VM vm) {
+    public boolean hasSpaceForSnapthosts(VM vm, ArrayList<String> message) {
         Integer minSnapshotSize = Config.<Integer> 
GetValue(ConfigValues.InitStorageSparseSizeInGB);
         for (Entry<storage_domains, Integer> e : 
mapStorageDomainsToNumOfDisks(vm).entrySet()) {
-            if (!StorageDomainSpaceChecker.hasSpaceForRequest(e.getKey(),
-                    minSnapshotSize * e.getValue())) {
-                log.error("not enough space to create snapshot on domain " + 
e.getKey().getId());
+            if (!destinationHasSpace(e.getKey(), minSnapshotSize * 
e.getValue(), message)) {
                 return false;
             }
         }
         return true;
     }
 
+    private boolean destinationHasSpace(storage_domains storageDomain, long 
sizeRequested, ArrayList<String> message) {
+        return validate(new 
StorageDomainValidator(storageDomain).isDomainHasSpaceForRequest(sizeRequested),
 message);
+    }
+
+    protected boolean validate(ValidationResult validationResult, 
ArrayList<String> message) {
+        if (!validationResult.isValid()) {
+            message.add(validationResult.getMessage().name());
+            if (validationResult.getVariableReplacements() != null) {
+                for (String variableReplacement : 
validationResult.getVariableReplacements()) {
+                    message.add(variableReplacement);
+                }
+            }
+        }
+        return validationResult.isValid();
+    }
+
     /**
      * map the VM number of pluggable and snapable disks from their domain.
      *
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageDomainCommandBase.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageDomainCommandBase.java
index ade5e90..6762b6a 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageDomainCommandBase.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageDomainCommandBase.java
@@ -7,6 +7,7 @@
 
 import org.ovirt.engine.core.bll.context.CompensationContext;
 import org.ovirt.engine.core.bll.utils.PermissionSubject;
+import org.ovirt.engine.core.bll.validator.StorageDomainValidator;
 import org.ovirt.engine.core.common.VdcObjectType;
 import org.ovirt.engine.core.common.action.StorageDomainParametersBase;
 import 
org.ovirt.engine.core.common.businessentities.LUN_storage_server_connection_map;
@@ -104,6 +105,10 @@
         return returnValue;
     }
 
+    protected boolean doesStorageDomainhaveSpaceForRequest(storage_domains 
storageDomain, long sizeRequested) {
+        return validate(new 
StorageDomainValidator(storageDomain).isDomainHasSpaceForRequest(sizeRequested));
+    }
+
     protected boolean isNotLocalData(final boolean isInternal) {
         boolean returnValue = true;
         if (this.getStoragePool().getstorage_pool_type() == StorageType.LOCALFS


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I2efe75b59a0890c3349b9927e677a4eac3323e9a
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Maor Lipchuk <mlipc...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to