Arik Hadas has uploaded a new change for review.

Change subject: core: minor refactoring in RunVmValidator
......................................................................

core: minor refactoring in RunVmValidator

- rename methods which are validating network related stuff to being
  with 'validate'
- moved CanRunVm to the top of the class
- organized the class methods order such that the validation methods
  would be grouped together and the utility method be in the buttom

Change-Id: I80ac05cb4028578364ef710603a674834a33a1a2
Signed-off-by: Arik Hadas <aha...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/RunVmValidator.java
1 file changed, 183 insertions(+), 176 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/40/18240/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/RunVmValidator.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/RunVmValidator.java
index df9944f..8d5a925 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/RunVmValidator.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/RunVmValidator.java
@@ -72,6 +72,52 @@
     protected RunVmValidator() {
     }
 
+    /**
+     * A general method for run vm validations. used in runVmCommand and in 
VmPoolCommandBase
+     * @param messages
+     * @param vmDisks
+     * @param storagePool
+     * @param vdsBlackList
+     *            - hosts that we already tried to run on
+     * @param destVds
+     * @param vdsGroup
+     * @return
+     */
+    public boolean canRunVm(List<String> messages, List<Disk> vmDisks,
+            StoragePool storagePool, List<Guid> vdsBlackList, Guid destVds, 
VDSGroup vdsGroup) {
+
+        if (!validateVmProperties(vm, messages) ||
+                !validate(validateBootSequence(vm, 
runVmParam.getBootSequence(), vmDisks), messages) ||
+                !validate(new VmValidator(vm).vmNotLocked(), messages) ||
+                
!validate(getSnapshotValidator().vmNotDuringSnapshot(vm.getId()), messages) ||
+                !validate(validateVmStatusUsingMatrix(vm), messages) ||
+                !validate(validateIsoPath(vm, runVmParam.getDiskPath(), 
runVmParam.getFloppyPath()), messages)  ||
+                !validate(vmDuringInitialization(vm), messages) ||
+                !validate(validateVdsStatus(vm), messages) ||
+                !validate(validateStatelessVm(vm, vmDisks, 
runVmParam.getRunAsStateless()), messages)) {
+            return false;
+        }
+
+        List<DiskImage> images = ImagesHandler.filterImageDisks(vmDisks, true, 
false);
+        if (!images.isEmpty() && (
+                !validate(validateStoragePoolUp(vm, storagePool), messages) ||
+                !validate(validateStorageDomains(vm, isInternalExecution, 
images), messages) ||
+                !validate(validateImagesForRunVm(vm, images), messages))) {
+            return false;
+        }
+
+        if (!SchedulingManager.getInstance().canSchedule(
+                vdsGroup, vm, vdsBlackList, null, destVds, messages)) {
+            return false;
+        }
+
+        return true;
+    }
+
+    //////////////////////////
+    /// Validation methods ///
+    //////////////////////////
+
     public boolean validateVmProperties(VM vm, List<String> messages) {
         List<ValidationError> validationErrors =
                 getVmPropertiesUtils().validateVMProperties(
@@ -177,36 +223,13 @@
         return ValidationResult.VALID;
     }
 
-    @SuppressWarnings("unchecked")
-    private boolean isRepoImageExists(String repoImagePath, Guid 
storageDomainId, ImageFileType imageFileType) {
-        VdcQueryReturnValue ret = getBackend().runInternalQuery(
-                VdcQueryType.GetImagesList,
-                new GetImagesListParameters(storageDomainId, imageFileType));
-
-        if (ret != null && ret.getReturnValue() != null && ret.getSucceeded()) 
{
-            for (RepoImage isoFileMetaData : (List<RepoImage>) 
ret.getReturnValue()) {
-                if (repoImagePath.equals(isoFileMetaData.getRepoImageId())) {
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-
     public ValidationResult vmDuringInitialization(VM vm) {
         if (vm.isRunning() || vm.getStatus() == VMStatus.NotResponding ||
                 isVmDuringInitiating(vm)) {
             return new 
ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_VM_IS_RUNNING);
         }
-        return ValidationResult.VALID;
-    }
 
-    protected boolean isVmDuringInitiating(VM vm) {
-        return (Boolean) getBackend()
-                .getResourceManager()
-                .RunVdsCommand(VDSCommandType.IsVmDuringInitiating,
-                        new 
IsVmDuringInitiatingVDSCommandParameters(vm.getId()))
-                .getReturnValue();
+        return ValidationResult.VALID;
     }
 
     public ValidationResult validateVdsStatus(VM vm) {
@@ -241,6 +264,7 @@
         if (!hasSpaceValidation.isValid()) {
             return hasSpaceValidation;
         }
+
         return ValidationResult.VALID;
     }
 
@@ -249,11 +273,8 @@
                 VdcActionType.RunVm)) {
             return new 
ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_VM_STATUS_ILLEGAL);
         }
-        return ValidationResult.VALID;
-    }
 
-    protected SnapshotsValidator getSnapshotValidator() {
-        return new SnapshotsValidator();
+        return ValidationResult.VALID;
     }
 
     /**
@@ -271,6 +292,7 @@
                 return validationResult;
             }
         }
+
         return ValidationResult.VALID;
     }
 
@@ -280,20 +302,110 @@
     }
 
     /**
-     * map the VM number of pluggable and snapable disks from their domain.
-     * @param vm
-     * @return
+     * @return true if all VM network interfaces are valid
      */
-    public Map<StorageDomain, Integer> mapStorageDomainsToNumOfDisks(VM vm, 
List<Disk> plugDisks) {
-        Map<StorageDomain, Integer> map = new HashMap<StorageDomain, 
Integer>();
-        for (Disk disk : plugDisks) {
-            if (disk.isAllowSnapshot()) {
-                for (StorageDomain domain : 
getStorageDomainDAO().getAllStorageDomainsByImageId(((DiskImage) 
disk).getImageId())) {
-                    map.put(domain, map.containsKey(domain) ? 
Integer.valueOf(map.get(domain) + 1) : Integer.valueOf(1));
+    public ValidationResult validateNetworkInterfaces() {
+        Map<String, VmNetworkInterface> interfaceNetworkMap = 
Entities.vmInterfacesByNetworkName(vm.getInterfaces());
+        Set<String> interfaceNetworkNames = interfaceNetworkMap.keySet();
+        List<Network> clusterNetworks = 
getNetworkDao().getAllForCluster(vm.getVdsGroupId());
+        Set<String> clusterNetworksNames = 
Entities.objectNames(clusterNetworks);
+
+        ValidationResult validationResult = validateInterfacesConfigured(vm);
+        if (!validationResult.isValid()) {
+            return validationResult;
+        }
+
+        validationResult = validateInterfacesAttachedToClusterNetworks(vm, 
clusterNetworksNames, interfaceNetworkNames);
+        if (!validationResult.isValid()) {
+            return validationResult;
+        }
+
+        validationResult = 
validateInterfacesAttachedToVmNetworks(clusterNetworks, interfaceNetworkNames);
+        if (!validationResult.isValid()) {
+            return validationResult;
+        }
+
+        return ValidationResult.VALID;
+    }
+
+    /**
+     * Checking that the interfaces are all configured, interfaces with no 
network are allowed only if network linking
+     * is supported.
+     *
+     * @return true if all VM network interfaces are attached to existing 
cluster networks, or to no network (when
+     *         network linking is supported).
+     */
+    protected ValidationResult validateInterfacesConfigured(VM vm) {
+        for (VmNetworkInterface nic : vm.getInterfaces()) {
+            if (nic.getVnicProfileId() == null) {
+                return 
!FeatureSupported.networkLinking(vm.getVdsGroupCompatibilityVersion()) ?
+                        new 
ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_INTERFACE_NETWORK_NOT_CONFIGURED)
 :
+                            ValidationResult.VALID;
+            }
+        }
+
+        return ValidationResult.VALID;
+    }
+
+    /**
+     * @param clusterNetworksNames
+     *            cluster logical networks names
+     * @param interfaceNetworkNames
+     *            VM interface network names
+     * @return true if all VM network interfaces are attached to existing 
cluster networks
+     */
+    protected ValidationResult validateInterfacesAttachedToClusterNetworks(VM 
vm,
+            final Set<String> clusterNetworkNames, final Set<String> 
interfaceNetworkNames) {
+
+        Set<String> result = new HashSet<String>(interfaceNetworkNames);
+        result.removeAll(clusterNetworkNames);
+        if 
(FeatureSupported.networkLinking(vm.getVdsGroupCompatibilityVersion())) {
+            result.remove(null);
+        }
+
+        // If after removing the cluster network names we still have objects, 
then we have interface on networks that
+        // aren't
+        // attached to the cluster
+        return result.isEmpty() ?
+                ValidationResult.VALID
+                : new ValidationResult(
+                        
VdcBllMessages.ACTION_TYPE_FAILED_NETWORK_NOT_IN_CLUSTER,
+                        String.format("$networks %1$s", 
StringUtils.join(result, ",")));
+    }
+
+    /**
+     * @param clusterNetworks
+     *            cluster logical networks
+     * @param interfaceNetworkNames
+     *            VM interface network names
+     * @return true if all VM network interfaces are attached to VM networks
+     */
+    protected ValidationResult validateInterfacesAttachedToVmNetworks(final 
List<Network> clusterNetworks,
+            Set<String> interfaceNetworkNames) {
+        List<String> nonVmNetworkNames =
+                NetworkUtils.filterNonVmNetworkNames(clusterNetworks, 
interfaceNetworkNames);
+
+        return nonVmNetworkNames.isEmpty() ?
+                ValidationResult.VALID
+                : new ValidationResult(
+                        VdcBllMessages.ACTION_TYPE_FAILED_NOT_A_VM_NETWORK,
+                        String.format("$networks %1$s", 
StringUtils.join(nonVmNetworkNames, ",")));
+    }
+
+    ///////////////////////
+    /// Utility methods ///
+    ///////////////////////
+
+    protected boolean validate(ValidationResult validationResult, List<String> 
message) {
+        if (!validationResult.isValid()) {
+            message.add(validationResult.getMessage().name());
+            if (validationResult.getVariableReplacements() != null) {
+                for (String variableReplacement : 
validationResult.getVariableReplacements()) {
+                    message.add(variableReplacement);
                 }
             }
         }
-        return map;
+        return validationResult.isValid();
     }
 
     protected NetworkDao getNetworkDao() {
@@ -324,153 +436,48 @@
         return VmPropertiesUtils.getInstance();
     }
 
-    protected boolean validate(ValidationResult validationResult, List<String> 
message) {
-        if (!validationResult.isValid()) {
-            message.add(validationResult.getMessage().name());
-            if (validationResult.getVariableReplacements() != null) {
-                for (String variableReplacement : 
validationResult.getVariableReplacements()) {
-                    message.add(variableReplacement);
+    @SuppressWarnings("unchecked")
+    private boolean isRepoImageExists(String repoImagePath, Guid 
storageDomainId, ImageFileType imageFileType) {
+        VdcQueryReturnValue ret = getBackend().runInternalQuery(
+                VdcQueryType.GetImagesList,
+                new GetImagesListParameters(storageDomainId, imageFileType));
+
+        if (ret != null && ret.getReturnValue() != null && ret.getSucceeded()) 
{
+            for (RepoImage isoFileMetaData : (List<RepoImage>) 
ret.getReturnValue()) {
+                if (repoImagePath.equals(isoFileMetaData.getRepoImageId())) {
+                    return true;
                 }
             }
         }
-        return validationResult.isValid();
+        return false;
+    }
+
+    protected boolean isVmDuringInitiating(VM vm) {
+        return (Boolean) getBackend()
+                .getResourceManager()
+                .RunVdsCommand(VDSCommandType.IsVmDuringInitiating,
+                        new 
IsVmDuringInitiatingVDSCommandParameters(vm.getId()))
+                .getReturnValue();
+    }
+
+    protected SnapshotsValidator getSnapshotValidator() {
+        return new SnapshotsValidator();
     }
 
     /**
-     * A general method for run vm validations. used in runVmCommand and in 
VmPoolCommandBase
-     * @param messages
-     * @param vmDisks
-     * @param storagePool
-     * @param vdsBlackList
-     *            - hosts that we already tried to run on
-     * @param destVds
-     * @param vdsGroup
+     * map the VM number of pluggable and snapable disks from their domain.
+     * @param vm
      * @return
      */
-    public boolean canRunVm(
-            List<String> messages,
-            List<Disk> vmDisks,
-            StoragePool storagePool,
-            List<Guid> vdsBlackList,
-            Guid destVds,
-            VDSGroup vdsGroup) {
-
-        if (!validateVmProperties(vm, messages) ||
-                !validate(validateBootSequence(vm, 
runVmParam.getBootSequence(), vmDisks), messages) ||
-                !validate(new VmValidator(vm).vmNotLocked(), messages) ||
-                
!validate(getSnapshotValidator().vmNotDuringSnapshot(vm.getId()), messages) ||
-                !validate(validateVmStatusUsingMatrix(vm), messages) ||
-                !validate(validateIsoPath(vm, runVmParam.getDiskPath(), 
runVmParam.getFloppyPath()), messages)  ||
-                !validate(vmDuringInitialization(vm), messages) ||
-                !validate(validateVdsStatus(vm), messages) ||
-                !validate(validateStatelessVm(vm, vmDisks, 
runVmParam.getRunAsStateless()), messages)) {
-            return false;
-        }
-
-        List<DiskImage> images = ImagesHandler.filterImageDisks(vmDisks, true, 
false);
-        if (!images.isEmpty() && (
-                !validate(validateStoragePoolUp(vm, storagePool), messages) ||
-                !validate(validateStorageDomains(vm, isInternalExecution, 
images), messages) ||
-                !validate(validateImagesForRunVm(vm, images), messages))) {
-            return false;
-        }
-
-        if (!SchedulingManager.getInstance().canSchedule(
-                vdsGroup, vm, vdsBlackList, null, destVds, messages)) {
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * @return true if all VM network interfaces are valid
-     */
-    public ValidationResult validateNetworkInterfaces() {
-        Map<String, VmNetworkInterface> interfaceNetworkMap = 
Entities.vmInterfacesByNetworkName(vm.getInterfaces());
-        Set<String> interfaceNetworkNames = interfaceNetworkMap.keySet();
-        List<Network> clusterNetworks = 
getNetworkDao().getAllForCluster(vm.getVdsGroupId());
-        Set<String> clusterNetworksNames = 
Entities.objectNames(clusterNetworks);
-
-        ValidationResult validationResult = isVmInterfacesConfigured(vm);
-        if (!validationResult.isValid()) {
-            return validationResult;
-        }
-
-        validationResult = isVmInterfacesAttachedToClusterNetworks(vm, 
clusterNetworksNames, interfaceNetworkNames);
-        if (!validationResult.isValid()) {
-            return validationResult;
-        }
-
-        validationResult = isVmInterfacesAttachedToVmNetworks(clusterNetworks, 
interfaceNetworkNames);
-        if (!validationResult.isValid()) {
-            return validationResult;
-        }
-
-        return ValidationResult.VALID;
-    }
-
-    /**
-     * Checking that the interfaces are all configured, interfaces with no 
network are allowed only if network linking
-     * is supported.
-     *
-     * @return true if all VM network interfaces are attached to existing 
cluster networks, or to no network (when
-     *         network linking is supported).
-     */
-    protected ValidationResult isVmInterfacesConfigured(VM vm) {
-        for (VmNetworkInterface nic : vm.getInterfaces()) {
-            if (nic.getVnicProfileId() == null) {
-                return 
!FeatureSupported.networkLinking(vm.getVdsGroupCompatibilityVersion()) ?
-                        new 
ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_INTERFACE_NETWORK_NOT_CONFIGURED)
 :
-                            ValidationResult.VALID;
+    public Map<StorageDomain, Integer> mapStorageDomainsToNumOfDisks(VM vm, 
List<Disk> plugDisks) {
+        Map<StorageDomain, Integer> map = new HashMap<StorageDomain, 
Integer>();
+        for (Disk disk : plugDisks) {
+            if (disk.isAllowSnapshot()) {
+                for (StorageDomain domain : 
getStorageDomainDAO().getAllStorageDomainsByImageId(((DiskImage) 
disk).getImageId())) {
+                    map.put(domain, map.containsKey(domain) ? 
Integer.valueOf(map.get(domain) + 1) : Integer.valueOf(1));
+                }
             }
         }
-        return ValidationResult.VALID;
+        return map;
     }
-
-    /**
-     * @param clusterNetworksNames
-     *            cluster logical networks names
-     * @param interfaceNetworkNames
-     *            VM interface network names
-     * @return true if all VM network interfaces are attached to existing 
cluster networks
-     */
-    protected ValidationResult isVmInterfacesAttachedToClusterNetworks(VM vm,
-            final Set<String> clusterNetworkNames, final Set<String> 
interfaceNetworkNames) {
-
-        Set<String> result = new HashSet<String>(interfaceNetworkNames);
-        result.removeAll(clusterNetworkNames);
-        if 
(FeatureSupported.networkLinking(vm.getVdsGroupCompatibilityVersion())) {
-            result.remove(null);
-        }
-
-        // If after removing the cluster network names we still have objects, 
then we have interface on networks that
-        // aren't
-        // attached to the cluster
-        return result.isEmpty() ?
-                ValidationResult.VALID
-                : new ValidationResult(
-                        
VdcBllMessages.ACTION_TYPE_FAILED_NETWORK_NOT_IN_CLUSTER,
-                        String.format("$networks %1$s", 
StringUtils.join(result, ",")));
-    }
-
-    /**
-     * @param clusterNetworks
-     *            cluster logical networks
-     * @param interfaceNetworkNames
-     *            VM interface network names
-     * @return true if all VM network interfaces are attached to VM networks
-     */
-    protected ValidationResult isVmInterfacesAttachedToVmNetworks(final 
List<Network> clusterNetworks,
-            Set<String> interfaceNetworkNames) {
-        List<String> nonVmNetworkNames =
-                NetworkUtils.filterNonVmNetworkNames(clusterNetworks, 
interfaceNetworkNames);
-
-        return nonVmNetworkNames.isEmpty() ?
-                ValidationResult.VALID
-                : new ValidationResult(
-                        VdcBllMessages.ACTION_TYPE_FAILED_NOT_A_VM_NETWORK,
-                        String.format("$networks %1$s", 
StringUtils.join(nonVmNetworkNames, ",")));
-    }
-
 }


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

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

Reply via email to