Arik Hadas has uploaded a new change for review. Change subject: core: extensive refactoring in RunVmValidtor ......................................................................
core: extensive refactoring in RunVmValidtor As a first stage in fixing regressions that were found in RunVmValidator, this patch refactor this class to be more concise and readable: - use RunVmValidator#validate within #canRunVm method to make it shorter and more organized. - changed #validateStorageDomains, #validateImagesForRunVm and #validateVdsStatus methods to return ValidationResult instead of boolean as the other validation methods - reduced the number of nested level in #validateBootSequence method by removing unnecessary 'else' blocks Change-Id: Ib18c7582a0b1b5686c35259be3aed5d399871a15 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, 56 insertions(+), 101 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/96/17896/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 35a01d8..59efbd1 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 @@ -68,28 +68,25 @@ Guid storagePoolId = vm.getStoragePoolId(); // Block from running a VM with no HDD when its first boot device is // HD and no other boot devices are configured - if (boot_sequence == BootSequence.C && vmDisks.size() == 0) { + if (boot_sequence == BootSequence.C && vmDisks.isEmpty()) { return new ValidationResult(VdcBllMessages.VM_CANNOT_RUN_FROM_DISK_WITHOUT_DISK); - } else { - // If CD appears as first and there is no ISO in storage - // pool/ISO inactive - - // you cannot run this VM - - if (boot_sequence == BootSequence.CD - && getIsoDomainListSyncronizer().findActiveISODomain(storagePoolId) == null) { - return new ValidationResult(VdcBllMessages.VM_CANNOT_RUN_FROM_CD_WITHOUT_ACTIVE_STORAGE_DOMAIN_ISO); - } else { - // if there is network in the boot sequence, check that the - // vm has network, - // otherwise the vm cannot be run in vdsm - if (boot_sequence == BootSequence.N - && getVmNicDao().getAllForVm(vm.getId()).size() == 0) { - return new ValidationResult(VdcBllMessages.VM_CANNOT_RUN_FROM_NETWORK_WITHOUT_NETWORK); - } - } } - return ValidationResult.VALID; + // If CD appears as first and there is no ISO in storage + // pool/ISO inactive - you cannot run this VM + if (boot_sequence == BootSequence.CD + && getIsoDomainListSyncronizer().findActiveISODomain(storagePoolId) == null) { + return new ValidationResult(VdcBllMessages.VM_CANNOT_RUN_FROM_CD_WITHOUT_ACTIVE_STORAGE_DOMAIN_ISO); + } + + // if there is network in the boot sequence, check that the + // vm has network, otherwise the vm cannot be run in vdsm + if (boot_sequence == BootSequence.N + && getVmNicDao().getAllForVm(vm.getId()).isEmpty()) { + return new ValidationResult(VdcBllMessages.VM_CANNOT_RUN_FROM_NETWORK_WITHOUT_NETWORK); + } + + return ValidationResult.VALID; } /** @@ -105,40 +102,38 @@ * The VM's image disks * @return <code>true</code> if the VM can be run, <code>false</code> if not */ - public boolean validateStorageDomains(VM vm, - List<String> message, - boolean isInternalExecution, + public ValidationResult validateStorageDomains(VM vm, boolean isInternalExecution, List<DiskImage> vmImages) { if (!vm.isAutoStartup() || !isInternalExecution) { Set<Guid> storageDomainIds = ImagesHandler.getAllStorageIdsForImageIds(vmImages); MultipleStorageDomainsValidator storageDomainValidator = new MultipleStorageDomainsValidator(vm.getStoragePoolId(), storageDomainIds); - if (!validate(storageDomainValidator.allDomainsExistAndActive(), message)) { - return false; + + ValidationResult result = storageDomainValidator.allDomainsExistAndActive(); + if (!result.isValid()) { + return result; } - if (!vm.isAutoStartup() - && !validate(storageDomainValidator.allDomainsWithinThresholds(), message)) { - return false; + result = !vm.isAutoStartup() ? storageDomainValidator.allDomainsWithinThresholds() + : ValidationResult.VALID; + if (!result.isValid()) { + return result; } } - return true; + return ValidationResult.VALID; } /** * Check isValid only if VM is not HA VM */ - public boolean validateImagesForRunVm(List<String> message, List<DiskImage> vmDisks) { - DiskImagesValidator diskImagesValidator = new DiskImagesValidator(vmDisks); - return validate(diskImagesValidator.diskImagesNotLocked(), message); + public ValidationResult validateImagesForRunVm(List<DiskImage> vmDisks) { + return new DiskImagesValidator(vmDisks).diskImagesNotLocked(); } @SuppressWarnings("unchecked") - public ValidationResult validateIsoPath(boolean isAutoStartup, - Guid storagePoolId, - String diskPath, - String floppyPath) { + public ValidationResult validateIsoPath(boolean isAutoStartup, Guid storagePoolId, + String diskPath, String floppyPath) { if (isAutoStartup) { return ValidationResult.VALID; } @@ -203,24 +198,23 @@ } protected boolean isVmDuringInitiating(VM vm) { - return ((Boolean) getBackend() + return (Boolean) getBackend() .getResourceManager() .RunVdsCommand(VDSCommandType.IsVmDuringInitiating, new IsVmDuringInitiatingVDSCommandParameters(vm.getId())) - .getReturnValue()).booleanValue(); + .getReturnValue(); } - public boolean validateVdsStatus(VM vm, List<String> messages) { + public ValidationResult validateVdsStatus(VM vm) { if (vm.getStatus() == VMStatus.Paused && vm.getRunOnVds() != null) { - VDS vds = getVdsDao().get( - new Guid(vm.getRunOnVds().toString())); + VDS vds = getVdsDao().get(new Guid(vm.getRunOnVds().toString())); if (vds.getStatus() != VDSStatus.Up) { - messages.add(VdcBllMessages.VAR__HOST_STATUS__UP.toString()); - messages.add(VdcBllMessages.ACTION_TYPE_FAILED_VDS_STATUS_ILLEGAL.toString()); - return false; + return new ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_VDS_STATUS_ILLEGAL, + VdcBllMessages.VAR__HOST_STATUS__UP.toString()); } } - return true; + + return ValidationResult.VALID; } public ValidationResult validateStatelessVm(VM vm, List<Disk> plugDisks, Boolean stateless) { @@ -357,71 +351,32 @@ List<Guid> vdsBlackList, Guid destVds, VDSGroup vdsGroup) { - if (!validateVmProperties(vm, messages)) { + + if (!validateVmProperties(vm, messages) || + !validate(validateBootSequence(vm, bootSequence, vmDisks), messages) || + !validate(new VmValidator(vm).vmNotLocked(), messages) || + !validate(getSnapshotValidator().vmNotDuringSnapshot(vm.getId()), messages) || + !validate(validateVmStatusUsingMatrix(vm), messages)) { return false; } - ValidationResult result = validateBootSequence(vm, bootSequence, vmDisks); - if (!result.isValid()) { - messages.add(result.getMessage().toString()); - return false; - } - result = new VmValidator(vm).vmNotLocked(); - if (!result.isValid()) { - messages.add(result.getMessage().toString()); - return false; - } - result = getSnapshotValidator().vmNotDuringSnapshot(vm.getId()); - if (!result.isValid()) { - messages.add(result.getMessage().toString()); - return false; - } + List<DiskImage> images = ImagesHandler.filterImageDisks(vmDisks, true, false); - if (!images.isEmpty()) { - result = new StoragePoolValidator(storagePool).isUp(); - if (!result.isValid()) { - messages.add(result.getMessage().toString()); - return false; - } - if (!validateStorageDomains(vm, messages, isInternalExecution, images)) { - return false; - } - if (!validateImagesForRunVm(messages, images)) { - return false; - } - result = validateIsoPath(vm.isAutoStartup(), vm.getStoragePoolId(), diskPath, floppyPath); - if (!result.isValid()) { - messages.add(result.getMessage().toString()); - return false; - } - result = vmDuringInitialization(vm); - if (!result.isValid()) { - messages.add(result.getMessage().toString()); - return false; - } - if (!validateVdsStatus(vm, messages)) { - return false; - } - result = validateStatelessVm(vm, vmDisks, runAsStateless); - if (!result.isValid()) { - messages.add(result.getMessage().toString()); - return false; - } - } - if (!SchedulingManager.getInstance().canSchedule(vdsGroup, - vm, - vdsBlackList, - null, - destVds, - messages)) { + if (!images.isEmpty() && ( + !validate(new StoragePoolValidator(storagePool).isUp(), messages) || + !validate(validateStorageDomains(vm, isInternalExecution, images), messages) || + !validate(validateImagesForRunVm(images), messages) || + !validate(validateIsoPath(vm.isAutoStartup(), vm.getStoragePoolId(), diskPath, floppyPath), messages) || + !validate(vmDuringInitialization(vm), messages) || + !validate(validateVdsStatus(vm), messages) || + !validate(validateStatelessVm(vm, vmDisks, runAsStateless), messages))) { return false; } - result = validateVmStatusUsingMatrix(vm); - if (!result.isValid()) { - messages.add(result.getMessage().toString()); + + if (!SchedulingManager.getInstance().canSchedule( + vdsGroup, vm, vdsBlackList, null, destVds, messages)) { return false; } return true; } - } -- To view, visit http://gerrit.ovirt.org/17896 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ib18c7582a0b1b5686c35259be3aed5d399871a15 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