Allon Mureinik has uploaded a new change for review.

Change subject: core: Refactor SP validation out of ImagesHandler
......................................................................

core: Refactor SP validation out of ImagesHandler

Moved the validation on the SP's status from
ImagesHandler.PerformImagesChecks to StoragePoolValidator, where it
belongs.

In all the cases where this validation was performed by an ImagesHandler
call a call to StoragePoolValidator was added in order to keep backwards
consistency, even though it is probably useless in many (most?) cases.
E.g., there is little point in checking if the SP is UP if we already
know we have an UP domain on it.
However, these changes are left for future patches in order not to "rock
the boat" too much in a single patch.

Change-Id: I5caa3724fb73c8fa8932c8071f6d27a78d681bb3
Signed-off-by: Allon Mureinik <amure...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.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/ImagesHandler.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/RemoveDiskCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RestoreAllSnapshotsCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/TryBackToAllSnapshotsOfVmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmPoolCommandBase.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/StoragePoolValidator.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AddDiskToVmCommandTest.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RemoveSnapshotCommandTest.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RestoreAllSnapshotCommandTest.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RunVmCommandTest.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/StoragePoolValidatorTest.java
19 files changed, 141 insertions(+), 25 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/23/11323/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java
index 5648e7c..7ecee77 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java
@@ -13,6 +13,7 @@
 import org.ovirt.engine.core.bll.quota.QuotaStorageDependent;
 import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator;
 import org.ovirt.engine.core.bll.storage.StorageDomainCommandBase;
+import org.ovirt.engine.core.bll.storage.StoragePoolValidator;
 import org.ovirt.engine.core.bll.utils.PermissionSubject;
 import org.ovirt.engine.core.bll.utils.VmDeviceUtils;
 import org.ovirt.engine.core.bll.utils.WipeAfterDeleteUtils;
@@ -41,6 +42,7 @@
 import org.ovirt.engine.core.common.businessentities.VolumeType;
 import org.ovirt.engine.core.common.businessentities.permissions;
 import org.ovirt.engine.core.common.businessentities.storage_domains;
+import org.ovirt.engine.core.common.businessentities.storage_pool;
 import org.ovirt.engine.core.common.config.Config;
 import org.ovirt.engine.core.common.config.ConfigValues;
 import org.ovirt.engine.core.common.locks.LockingGroup;
@@ -140,7 +142,10 @@
                 canAddShareableDisk();
 
         if (returnValue && vm != null) {
-            returnValue = isStoragePoolMatching(vm) &&
+            storage_pool sp = getStoragePool(); // Note this is done according 
to the VM's spId.
+            returnValue =
+                    validate(new StoragePoolValidator(sp).isUp()) &&
+                    isStoragePoolMatching(vm) &&
                     performImagesChecks(vm.getStoragePoolId()) &&
                     
validate(getSnapshotValidator().vmNotDuringSnapshot(vm.getId())) &&
                     
validate(getSnapshotValidator().vmNotInPreview(vm.getId())) &&
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
index 2d0a7ac..c657148 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
@@ -14,6 +14,7 @@
 import org.ovirt.engine.core.bll.quota.QuotaStorageConsumptionParameter;
 import org.ovirt.engine.core.bll.quota.QuotaStorageDependent;
 import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator;
+import org.ovirt.engine.core.bll.storage.StoragePoolValidator;
 import org.ovirt.engine.core.bll.utils.PermissionSubject;
 import org.ovirt.engine.core.bll.utils.VmDeviceUtils;
 import org.ovirt.engine.core.bll.validator.StorageDomainValidator;
@@ -198,6 +199,11 @@
             }
         }
 
+        // Check storage pool (spId was set in the constructor
+        if (!validate(new StoragePoolValidator(getStoragePool()).isUp())) {
+            return false;
+        }
+
         for (Guid srcStorageDomainId : sourceImageDomainsImageMap.keySet()) {
             boolean checkIsValid = true;
             if (!ImagesHandler.PerformImagesChecks(
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java
index 736219f..786f3bf 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java
@@ -12,6 +12,7 @@
 import org.ovirt.engine.core.bll.quota.QuotaStorageDependent;
 import org.ovirt.engine.core.bll.snapshots.SnapshotsManager;
 import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator;
+import org.ovirt.engine.core.bll.storage.StoragePoolValidator;
 import org.ovirt.engine.core.bll.validator.VmValidator;
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.VdcObjectType;
@@ -286,9 +287,11 @@
         }
         List<DiskImage> disksList = getDisksList();
         if (disksList.size() > 0) {
+            StoragePoolValidator spValidator = new 
StoragePoolValidator(getStoragePool());
             VmValidator vmValidator = new VmValidator(getVm());
             SnapshotsValidator snapshotValidator = new SnapshotsValidator();
-            result = validate(snapshotValidator.vmNotDuringSnapshot(getVmId()))
+            result = validate(spValidator.isUp())
+                    && 
validate(snapshotValidator.vmNotDuringSnapshot(getVmId()))
                     && validate(snapshotValidator.vmNotInPreview(getVmId()))
                     && validate(vmValidator.vmNotDuringMigration())
                     && validate(vmValidator.vmNotRunningStateless())
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 bcd11f5..0c2b66d 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
@@ -12,6 +12,7 @@
 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;
 import org.ovirt.engine.core.bll.utils.VmDeviceUtils;
 import org.ovirt.engine.core.bll.validator.StorageDomainValidator;
 import org.ovirt.engine.core.bll.validator.VmValidator;
@@ -154,6 +155,7 @@
 
         SnapshotsValidator snapshotValidator = new SnapshotsValidator();
         if (!(checkVmInStorageDomain()
+                && validate(new StoragePoolValidator(getStoragePool()).isUp())
                 && validate(snapshotValidator.vmNotDuringSnapshot(getVmId()))
                 && validate(snapshotValidator.vmNotInPreview(getVmId()))
                 && validate(new VmValidator(getVm()).vmDown())
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java
index a5b0430..df786e1 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java
@@ -24,7 +24,6 @@
 import org.ovirt.engine.core.common.businessentities.LUNs;
 import org.ovirt.engine.core.common.businessentities.LunDisk;
 import org.ovirt.engine.core.common.businessentities.StorageDomainStatic;
-import org.ovirt.engine.core.common.businessentities.StoragePoolStatus;
 import org.ovirt.engine.core.common.businessentities.StorageServerConnections;
 import org.ovirt.engine.core.common.businessentities.StorageType;
 import org.ovirt.engine.core.common.businessentities.VM;
@@ -34,7 +33,6 @@
 import org.ovirt.engine.core.common.businessentities.VolumeType;
 import org.ovirt.engine.core.common.businessentities.image_storage_domain_map;
 import org.ovirt.engine.core.common.businessentities.storage_domains;
-import org.ovirt.engine.core.common.businessentities.storage_pool;
 import org.ovirt.engine.core.common.errors.VdcBLLException;
 import org.ovirt.engine.core.common.errors.VdcBllErrors;
 import org.ovirt.engine.core.common.utils.ListUtils;
@@ -440,16 +438,6 @@
         return result;
     }
 
-
-    public static boolean isStoragePoolValid(Guid storagePoolId) {
-        storage_pool pool = 
DbFacade.getInstance().getStoragePoolDao().get(storagePoolId);
-        if (pool == null || pool.getstatus() != StoragePoolStatus.Up) {
-             return false;
-        }
-        return true;
-    }
-
-
     public static boolean PerformImagesChecks(
             List<String> messages,
             Guid storagePoolId,
@@ -463,12 +451,6 @@
             Collection<? extends Disk> diskImageList) {
 
         boolean returnValue = true;
-
-        if (checkIsValid && !isStoragePoolValid(storagePoolId)) {
-                returnValue = false;
-                ListUtils.nullSafeAdd(messages, 
VdcBllMessages.ACTION_TYPE_FAILED_IMAGE_REPOSITORY_NOT_FOUND.toString());
-        }
-
         List<DiskImage> images = filterImageDisks(diskImageList, true, false);
         if (returnValue && checkImagesLocked) {
             returnValue = checkImagesLocked(messages, images);
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 c552ddb..be63a0d 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
@@ -6,6 +6,7 @@
 
 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.VmValidator;
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.action.MoveVmParameters;
@@ -69,7 +70,9 @@
         // CheckTemplateInStorageDomain later
         VmHandler.updateDisksFromDb(getVm());
         List<DiskImage> diskImages = 
ImagesHandler.filterImageDisks(getVm().getDiskMap().values(), false, false);
-        retValue = retValue && ImagesHandler.PerformImagesChecks(
+        retValue = retValue &&
+                validate(new StoragePoolValidator(getStoragePool()).isUp()) &&
+                ImagesHandler.PerformImagesChecks(
                                 getReturnValue().getCanDoActionMessages(),
                                 getVm().getStoragePoolId(),
                                 Guid.Empty,
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveDiskCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveDiskCommand.java
index f663707..287d24e 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveDiskCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveDiskCommand.java
@@ -13,6 +13,7 @@
 import org.ovirt.engine.core.bll.quota.QuotaStorageConsumptionParameter;
 import org.ovirt.engine.core.bll.quota.QuotaStorageDependent;
 import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator;
+import org.ovirt.engine.core.bll.storage.StoragePoolValidator;
 import org.ovirt.engine.core.bll.utils.PermissionSubject;
 import org.ovirt.engine.core.bll.validator.StorageDomainValidator;
 import org.ovirt.engine.core.common.AuditLogType;
@@ -34,6 +35,7 @@
 import org.ovirt.engine.core.common.businessentities.VmEntityType;
 import org.ovirt.engine.core.common.businessentities.VmTemplate;
 import org.ovirt.engine.core.common.businessentities.VmTemplateStatus;
+import org.ovirt.engine.core.common.businessentities.storage_pool;
 import org.ovirt.engine.core.common.locks.LockingGroup;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.compat.TransactionScopeOption;
@@ -226,6 +228,14 @@
         boolean firstTime = true;
         SnapshotsValidator snapshotsValidator = new SnapshotsValidator();
         List<Disk> diskList = Arrays.asList(getDisk());
+
+        if (!listVms.isEmpty()) {
+            storage_pool sp = 
getStoragePoolDAO().get(listVms.get(0).getStoragePoolId());
+            if (!validate(new StoragePoolValidator(sp).isUp())) {
+                return false;
+            }
+        }
+
         for (VM vm : listVms) {
             if (!validate(snapshotsValidator.vmNotDuringSnapshot(vm.getId())) 
||
                     !validate(snapshotsValidator.vmNotInPreview(vm.getId())) ||
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommand.java
index 3c62495..534a9a3 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommand.java
@@ -11,6 +11,7 @@
 import org.ovirt.engine.core.bll.quota.QuotaManager;
 import org.ovirt.engine.core.bll.quota.QuotaStorageDependent;
 import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator;
+import org.ovirt.engine.core.bll.storage.StoragePoolValidator;
 import org.ovirt.engine.core.bll.validator.VmValidator;
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.VdcObjectType;
@@ -50,6 +51,7 @@
                 setSnapshotName(snapshot.getDescription());
             }
         }
+        setStoragePoolId(getVm().getStoragePoolId());
     }
 
     @Override
@@ -161,7 +163,8 @@
     protected boolean canDoAction() {
         initializeObjectState();
 
-        if (!validateVmNotDuringSnapshot() ||
+        if (!validate(new StoragePoolValidator(getStoragePool()).isUp()) ||
+                !validateVmNotDuringSnapshot() ||
                 !validateVmNotInPreview() ||
                 !validateSnapshotExists() ||
                 !validate(new VmValidator(getVm()).vmDown()) ||
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVmCommand.java
index 8bdb1b4..a925ff2 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVmCommand.java
@@ -12,6 +12,7 @@
 import org.ovirt.engine.core.bll.quota.QuotaStorageDependent;
 import org.ovirt.engine.core.bll.snapshots.SnapshotsManager;
 import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator;
+import org.ovirt.engine.core.bll.storage.StoragePoolValidator;
 import org.ovirt.engine.core.bll.utils.PermissionSubject;
 import org.ovirt.engine.core.bll.validator.VmValidator;
 import org.ovirt.engine.core.common.AuditLogType;
@@ -147,6 +148,10 @@
             return false;
         }
 
+        if (!validate(new StoragePoolValidator(getStoragePool()).isUp())) {
+            return false;
+        }
+
         if (!ImagesHandler.PerformImagesChecks(
                 getReturnValue().getCanDoActionMessages(),
                 getVm().getStoragePoolId(),
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RestoreAllSnapshotsCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RestoreAllSnapshotsCommand.java
index e7bdbd7..d101948 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RestoreAllSnapshotsCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RestoreAllSnapshotsCommand.java
@@ -12,6 +12,7 @@
 import org.ovirt.engine.core.bll.quota.QuotaStorageConsumptionParameter;
 import org.ovirt.engine.core.bll.quota.QuotaStorageDependent;
 import org.ovirt.engine.core.bll.snapshots.SnapshotsManager;
+import org.ovirt.engine.core.bll.storage.StoragePoolValidator;
 import org.ovirt.engine.core.bll.utils.PermissionSubject;
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.VdcObjectType;
@@ -301,7 +302,7 @@
         if (!getSnapshotDao().exists(getVmId(), 
getParameters().getDstSnapshotId())) {
             
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_VM_SNAPSHOT_DOES_NOT_EXIST);
         } else {
-            result = performImagesChecks();
+            result = validate(new 
StoragePoolValidator(getStoragePool()).isUp()) && performImagesChecks();
             if (result && (getVm().getStatus() != VMStatus.Down)) {
                 result = false;
                 
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_VM_IS_NOT_DOWN);
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/TryBackToAllSnapshotsOfVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/TryBackToAllSnapshotsOfVmCommand.java
index 71b40a5..5808d75 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/TryBackToAllSnapshotsOfVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/TryBackToAllSnapshotsOfVmCommand.java
@@ -8,6 +8,7 @@
 import org.ovirt.engine.core.bll.job.ExecutionHandler;
 import org.ovirt.engine.core.bll.snapshots.SnapshotsManager;
 import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator;
+import org.ovirt.engine.core.bll.storage.StoragePoolValidator;
 import org.ovirt.engine.core.bll.validator.VmValidator;
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.VdcObjectType;
@@ -217,6 +218,7 @@
         if (vmDisk != null) {
             result =
                     result
+                            && validate(new 
StoragePoolValidator(getStoragePool()).isUp())
                             && ImagesHandler.PerformImagesChecks(
                                     getReturnValue().getCanDoActionMessages(),
                                     getVm().getStoragePoolId(),
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmPoolCommandBase.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmPoolCommandBase.java
index bd78384..0f1ee92 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmPoolCommandBase.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmPoolCommandBase.java
@@ -4,6 +4,7 @@
 import java.util.List;
 
 import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator;
+import org.ovirt.engine.core.bll.storage.StoragePoolValidator;
 import org.ovirt.engine.core.bll.utils.PermissionSubject;
 import org.ovirt.engine.core.bll.validator.VmValidator;
 import org.ovirt.engine.core.common.VdcObjectType;
@@ -17,6 +18,7 @@
 import org.ovirt.engine.core.common.businessentities.VmDynamic;
 import org.ovirt.engine.core.common.businessentities.VmPoolMap;
 import org.ovirt.engine.core.common.businessentities.VmType;
+import org.ovirt.engine.core.common.businessentities.storage_pool;
 import org.ovirt.engine.core.common.businessentities.tags;
 import org.ovirt.engine.core.common.businessentities.vm_pools;
 import org.ovirt.engine.core.compat.Guid;
@@ -174,7 +176,7 @@
      * @return <c>true</c> if [is vm free] [the specified vm id]; otherwise, 
<c>false</c>.
      */
     protected static boolean isVmFree(Guid vmId, java.util.ArrayList<String> 
messages) {
-        boolean returnValue;
+        boolean returnValue = true;
 
         // check that there isn't another user already attached to this VM:
         if (vmAssignedToUser(vmId, messages)) {
@@ -202,7 +204,16 @@
                 List<DiskImage> vmImages = 
ImagesHandler.filterImageDisks(disks, true, true);
                 Guid storageDomainId = vmImages.size() > 0 ? 
vmImages.get(0).getstorage_ids().get(0) : Guid.Empty;
                 VM vm = DbFacade.getInstance().getVmDao().get(vmId);
-                returnValue =
+                storage_pool sp = 
DbFacade.getInstance().getStoragePoolDao().get(vm.getStoragePoolId());
+
+                ValidationResult spUpResult = new 
StoragePoolValidator(sp).isUp();
+                if (!spUpResult.isValid()) {
+                    messages.add(spUpResult.getMessage().name());
+                    returnValue = false;
+                }
+
+                if (returnValue) {
+                    returnValue =
                         ImagesHandler.PerformImagesChecks(
                                 messages,
                                 vm.getStoragePoolId(),
@@ -214,6 +225,7 @@
                                 !Guid.Empty.equals(storageDomainId),
                                 true,
                                 disks);
+                }
 
                 if (returnValue) {
                     ValidationResult vmNotLockResult = new 
VmValidator(vm).vmNotLocked();
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 2757e08..344caf4 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
@@ -11,6 +11,7 @@
 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.VmValidator;
 import org.ovirt.engine.core.common.VdcActionUtils;
 import org.ovirt.engine.core.common.action.RunVmParams;
@@ -27,6 +28,7 @@
 import org.ovirt.engine.core.common.businessentities.VMStatus;
 import org.ovirt.engine.core.common.businessentities.VmDevice;
 import org.ovirt.engine.core.common.businessentities.storage_domains;
+import org.ovirt.engine.core.common.businessentities.storage_pool;
 import org.ovirt.engine.core.common.config.Config;
 import org.ovirt.engine.core.common.config.ConfigValues;
 import org.ovirt.engine.core.common.queries.GetAllIsoImagesListParameters;
@@ -40,6 +42,7 @@
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.dao.DiskDao;
 import org.ovirt.engine.core.dao.StorageDomainDAO;
+import org.ovirt.engine.core.dao.StoragePoolDAO;
 import org.ovirt.engine.core.dao.VmDeviceDAO;
 import org.ovirt.engine.core.utils.log.Log;
 import org.ovirt.engine.core.utils.log.LogFactory;
@@ -105,6 +108,15 @@
                         if (!vmDuringSnapshotResult.isValid()) {
                             
message.add(vmDuringSnapshotResult.getMessage().name());
                             retValue = false;
+                        }
+
+                        if (retValue) {
+                            storage_pool sp = 
getStoragePoolDAO().get(vm.getStoragePoolId());
+                            ValidationResult spUpResult = new 
StoragePoolValidator(sp).isUp();
+                            if (!spUpResult.isValid()) {
+                                message.add(spUpResult.getMessage().name());
+                                retValue = false;
+                            }
                         }
 
                         if (retValue && !performImageChecksForRunningVm(vm, 
message, runParams, vmDisks)) {
@@ -356,4 +368,8 @@
     protected StorageDomainDAO getStorageDomainDAO() {
         return DbFacade.getInstance().getStorageDomainDao();
     }
+
+    protected StoragePoolDAO getStoragePoolDAO() {
+        return DbFacade.getInstance().getStoragePoolDao();
+    }
 }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StoragePoolValidator.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StoragePoolValidator.java
index a712b4b..87fab15 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StoragePoolValidator.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StoragePoolValidator.java
@@ -3,6 +3,7 @@
 import java.util.List;
 
 import org.ovirt.engine.core.bll.ValidationResult;
+import org.ovirt.engine.core.common.businessentities.StoragePoolStatus;
 import org.ovirt.engine.core.common.businessentities.StorageType;
 import org.ovirt.engine.core.common.businessentities.VDSGroup;
 import org.ovirt.engine.core.common.businessentities.storage_pool;
@@ -60,4 +61,12 @@
         return hasDefaultCluster;
     }
 
+    public ValidationResult isUp() {
+        if (storagePool == null || storagePool.getstatus() != 
StoragePoolStatus.Up) {
+            return new 
ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_IMAGE_REPOSITORY_NOT_FOUND);
+        }
+
+        return ValidationResult.VALID;
+    }
+
 }
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AddDiskToVmCommandTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AddDiskToVmCommandTest.java
index e94e2d6..9b473c5 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AddDiskToVmCommandTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AddDiskToVmCommandTest.java
@@ -31,6 +31,7 @@
 import org.ovirt.engine.core.common.businessentities.StorageDomainStatus;
 import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMap;
 import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMapId;
+import org.ovirt.engine.core.common.businessentities.StoragePoolStatus;
 import org.ovirt.engine.core.common.businessentities.StorageServerConnections;
 import org.ovirt.engine.core.common.businessentities.StorageType;
 import org.ovirt.engine.core.common.businessentities.VM;
@@ -425,6 +426,7 @@
         storage_pool storagePool = new storage_pool();
         storagePool.setId(storagePoolId);
         storagePool.setcompatibility_version(compatibilityVersion);
+        storagePool.setstatus(StoragePoolStatus.Up);
         when(storagePoolDAO.get(storagePoolId)).thenReturn(storagePool);
 
         return storagePool;
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RemoveSnapshotCommandTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RemoveSnapshotCommandTest.java
index 5d84635..b143162 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RemoveSnapshotCommandTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RemoveSnapshotCommandTest.java
@@ -17,12 +17,15 @@
 import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator;
 import org.ovirt.engine.core.common.action.RemoveSnapshotParameters;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
+import org.ovirt.engine.core.common.businessentities.StoragePoolStatus;
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VMStatus;
 import org.ovirt.engine.core.common.businessentities.VmTemplate;
+import org.ovirt.engine.core.common.businessentities.storage_pool;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.dal.VdcBllMessages;
 import org.ovirt.engine.core.dao.DiskImageDAO;
+import org.ovirt.engine.core.dao.StoragePoolDAO;
 import org.ovirt.engine.core.dao.VmTemplateDAO;
 
 /** A test case for the {@link RemoveSnapshotCommand} class. */
@@ -39,6 +42,9 @@
     private DiskImageDAO diskImageDAO;
 
     @Mock
+    private StoragePoolDAO spDao;
+
+    @Mock
     private SnapshotsValidator snapshotValidator;
 
     @Before
@@ -48,6 +54,7 @@
 
         RemoveSnapshotParameters params = new 
RemoveSnapshotParameters(snapGuid, vmGuid);
         cmd = spy(new RemoveSnapshotCommand<RemoveSnapshotParameters>(params));
+        doReturn(spDao).when(cmd).getStoragePoolDAO();
         doReturn(vmTemplateDAO).when(cmd).getVmTemplateDAO();
         doReturn(diskImageDAO).when(cmd).getDiskImageDao();
         doReturn(snapshotValidator).when(cmd).createSnapshotValidator();
@@ -79,9 +86,15 @@
 
     @Test
     public void testCanDoActionVmUp() {
+        Guid spId = Guid.NewGuid();
         VM vm = new VM();
         vm.setId(Guid.NewGuid());
         vm.setStatus(VMStatus.Up);
+        vm.setStoragePoolId(spId);
+
+        storage_pool sp = new storage_pool();
+        sp.setId(spId);
+        sp.setstatus(StoragePoolStatus.Up);
 
         cmd.setSnapshotName("someSnapshot");
         
doReturn(ValidationResult.VALID).when(snapshotValidator).vmNotDuringSnapshot(any(Guid.class));
@@ -89,6 +102,7 @@
         
doReturn(ValidationResult.VALID).when(snapshotValidator).snapshotExists(any(Guid.class),
 any(Guid.class));
         doReturn(true).when(cmd).validateImagesAndVMStates();
         doReturn(vm).when(cmd).getVm();
+        doReturn(sp).when(spDao).get(spId);
         doReturn(Collections.emptyList()).when(cmd).getSourceImages();
         CanDoActionTestUtils.runAndAssertCanDoActionFailure(cmd, 
VdcBllMessages.ACTION_TYPE_FAILED_VM_IS_NOT_DOWN);
     }
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RestoreAllSnapshotCommandTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RestoreAllSnapshotCommandTest.java
index 1903744..9a2fa02 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RestoreAllSnapshotCommandTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RestoreAllSnapshotCommandTest.java
@@ -26,10 +26,12 @@
 import org.ovirt.engine.core.common.businessentities.Snapshot.SnapshotStatus;
 import org.ovirt.engine.core.common.businessentities.Snapshot.SnapshotType;
 import org.ovirt.engine.core.common.businessentities.StorageDomainStatus;
+import org.ovirt.engine.core.common.businessentities.StoragePoolStatus;
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VMStatus;
 import org.ovirt.engine.core.common.businessentities.VmDynamic;
 import org.ovirt.engine.core.common.businessentities.storage_domains;
+import org.ovirt.engine.core.common.businessentities.storage_pool;
 import org.ovirt.engine.core.common.config.ConfigValues;
 import org.ovirt.engine.core.common.interfaces.VDSBrokerFrontend;
 import org.ovirt.engine.core.compat.Guid;
@@ -38,6 +40,7 @@
 import org.ovirt.engine.core.dao.DiskDao;
 import org.ovirt.engine.core.dao.SnapshotDao;
 import org.ovirt.engine.core.dao.StorageDomainDAO;
+import org.ovirt.engine.core.dao.StoragePoolDAO;
 import org.ovirt.engine.core.dao.VmDAO;
 import org.ovirt.engine.core.dao.VmDynamicDAO;
 import org.ovirt.engine.core.dao.network.VmNetworkInterfaceDao;
@@ -71,6 +74,9 @@
     private StorageDomainDAO storageDomainDAO;
 
     @Mock
+    private StoragePoolDAO storagePoolDAO;
+
+    @Mock
     private SnapshotDao snapshotDao;
 
     @Mock
@@ -80,6 +86,7 @@
     private Guid diskImageId = Guid.NewGuid();
     private Guid storageDomainId = Guid.NewGuid();
     private Guid dstSnapshotId = Guid.NewGuid();
+    private Guid spId = Guid.NewGuid();
     private VmDynamic mockDynamicVm;
     private Snapshot mockSnapshot;
     private RestoreAllSnapshotsCommand<RestoreAllSnapshotsParameters> 
spyCommand;
@@ -148,6 +155,7 @@
     private void mockDaos() {
         mockDiskImageDao();
         mockStorageDomainDao();
+        mockStoragePoolDao();
         mockDynamicVmDao();
         doReturn(snapshotDao).when(spyCommand).getSnapshotDao();
         
doReturn(vmNetworkInterfaceDAO).when(spyCommand).getVmNetworkInterfaceDao();
@@ -183,12 +191,21 @@
         when(storageDomainDAO.get(storageDomainId)).thenReturn(storageDomains);
     }
 
+    private void mockStoragePoolDao() {
+        storage_pool sp = new storage_pool();
+        sp.setId(spId);
+        sp.setstatus(StoragePoolStatus.Up);
+        when(storagePoolDAO.get(spId)).thenReturn(sp);
+        doReturn(storagePoolDAO).when(spyCommand).getStoragePoolDAO();
+    }
+
     /**
      * Mock a VM.
      */
     private VM mockVm() {
         VM vm = new VM();
         vm.setId(vmId);
+        vm.setStoragePoolId(spId);
         vm.setStatus(VMStatus.Down);
         AuditLogableBaseMockUtils.mockVmDao(spyCommand, vmDAO);
         when(vmDAO.get(vmId)).thenReturn(vm);
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RunVmCommandTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RunVmCommandTest.java
index 377228c..3bf448d 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RunVmCommandTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RunVmCommandTest.java
@@ -36,12 +36,14 @@
 import org.ovirt.engine.core.common.businessentities.Disk;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
 import org.ovirt.engine.core.common.businessentities.IVdsAsyncCommand;
+import org.ovirt.engine.core.common.businessentities.StoragePoolStatus;
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VMStatus;
 import org.ovirt.engine.core.common.businessentities.VmDevice;
 import org.ovirt.engine.core.common.businessentities.VmDeviceId;
 import org.ovirt.engine.core.common.businessentities.VmStatic;
 import org.ovirt.engine.core.common.businessentities.storage_domains;
+import org.ovirt.engine.core.common.businessentities.storage_pool;
 import org.ovirt.engine.core.common.config.ConfigValues;
 import org.ovirt.engine.core.common.interfaces.VDSBrokerFrontend;
 import org.ovirt.engine.core.common.utils.VmDeviceType;
@@ -56,6 +58,7 @@
 import 
org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableBaseMockUtils;
 import org.ovirt.engine.core.dao.DiskDao;
 import org.ovirt.engine.core.dao.StorageDomainDAO;
+import org.ovirt.engine.core.dao.StoragePoolDAO;
 import org.ovirt.engine.core.dao.VmDAO;
 import org.ovirt.engine.core.dao.VmDeviceDAO;
 import org.ovirt.engine.core.utils.MockConfigRule;
@@ -81,6 +84,9 @@
 
     @Mock
     private VmDAO vmDAO;
+
+    @Mock
+    private StoragePoolDAO spDao;
 
     @Spy
     private final VmRunHandler vmRunHandler = VmRunHandler.getInstance();
@@ -321,7 +327,13 @@
     }
 
     protected void mockVmRunHandler() {
+        storage_pool sp = new storage_pool();
+        sp.setstatus(StoragePoolStatus.Up);
+        when(spDao.get(any(Guid.class))).thenReturn(sp);
+        doReturn(spDao).when(vmRunHandler).getStoragePoolDAO();
+
         doReturn(vmRunHandler).when(command).getVmRunHandler();
+
 
         
doReturn(true).when(vmRunHandler).performImageChecksForRunningVm(any(VM.class),
                 anyListOf(String.class),
@@ -351,6 +363,7 @@
         initDAOMocks(disks, Collections.singletonList(vmDevice));
         final VM vm = new VM();
         vm.setStatus(VMStatus.Up);
+        vm.setStoragePoolId(Guid.NewGuid());
         doReturn(vm).when(command).getVm();
         doReturn(new VdsSelector(vm, new NGuid(), true, new 
VdsFreeMemoryChecker(command))).when(command)
                 .getVdsSelector();
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/StoragePoolValidatorTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/StoragePoolValidatorTest.java
index 2f518d9..71f9ff4 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/StoragePoolValidatorTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/StoragePoolValidatorTest.java
@@ -82,6 +82,17 @@
         assertMessage(result, 
VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_POOL_WITH_DEFAULT_VDS_GROUP_CANNOT_BE_LOCALFS);
     }
 
+    @Test
+    public void testIsUpdValid() {
+        assertTrue("Storage pool should be up", validator.isUp().isValid());
+    }
+
+    @Test
+    public void testIsUpdInvalid() {
+        storagePool.setstatus(StoragePoolStatus.Problematic);
+        assertMessage(validator.isUp(), 
VdcBllMessages.ACTION_TYPE_FAILED_IMAGE_REPOSITORY_NOT_FOUND);
+    }
+
     private static void assertMessage(ValidationResult result, VdcBllMessages 
bllMsg) {
         assertEquals("Wrong canDoAction message is returned", bllMsg, 
result.getMessage());
     }


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

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

Reply via email to