Vered Volansky has uploaded a new change for review. Change subject: core: Storage validation when running stateless VM ......................................................................
core: Storage validation when running stateless VM When a VM is run as stateless, temporary volumes are created for each disk leaf. Up till now there were no storage validations in this case. These were added in this patch, along with some new functionality to the MultipleStorageDomainsValidator. Change-Id: Id04203119cce475afeef7658db50e132b0c7036a Bug-Url: https://bugzilla.redhat.com/1054175 Signed-off-by: Vered Volansky <vvola...@redhat.com> --- 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/RunVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/MultipleStorageDomainsValidator.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/StorageDomainValidatorFreeSpaceTest.java 4 files changed, 40 insertions(+), 10 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/76/30776/1 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 3f810ff..dad2002 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 @@ -534,11 +534,6 @@ return new DiskImagesValidator(disksList); } - protected MultipleStorageDomainsValidator createMultipleStorageDomainsValidator(List<DiskImage> disksList) { - return new MultipleStorageDomainsValidator(getVm().getStoragePoolId(), - ImagesHandler.getAllStorageIdsForImageIds(disksList)); - } - protected VmValidator createVmValidator() { return new VmValidator(getVm()); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java index ce26b6c..5c33b38 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java @@ -23,6 +23,7 @@ import org.ovirt.engine.core.bll.scheduling.VdsFreeMemoryChecker; import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.bll.utils.VmDeviceUtils; +import org.ovirt.engine.core.bll.validator.MultipleStorageDomainsValidator; import org.ovirt.engine.core.bll.validator.RunVmValidator; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.FeatureSupported; @@ -38,6 +39,7 @@ import org.ovirt.engine.core.common.businessentities.ActionGroup; import org.ovirt.engine.core.common.businessentities.BootSequence; import org.ovirt.engine.core.common.businessentities.Disk; +import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.DisplayType; import org.ovirt.engine.core.common.businessentities.Entities; import org.ovirt.engine.core.common.businessentities.ImageFileType; @@ -851,6 +853,10 @@ return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_RNG_SOURCE_NOT_SUPPORTED); } + if (isRunAsStateless()) { + return validateSpaceRequirements(); + } + return true; } @@ -875,6 +881,13 @@ return true; } + protected boolean validateSpaceRequirements() { + fetchVmDisksFromDb(); + List<DiskImage> disksList = getVm().getDiskList(); + MultipleStorageDomainsValidator msdValidator = createMultipleStorageDomainsValidator(disksList); + return validate(msdValidator.allDomainsHaveSpaceForNewDisks(disksList)); + } + @Override protected List<Class<?>> getValidationGroups() { addValidationGroup(StartEntity.class); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/MultipleStorageDomainsValidator.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/MultipleStorageDomainsValidator.java index 0929e4a..84407f9 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/MultipleStorageDomainsValidator.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/MultipleStorageDomainsValidator.java @@ -83,6 +83,23 @@ * Validates that all the domains have enough space for the request * @return {@link ValidationResult#VALID} if all the domains have enough free space, or a {@link ValidationResult} with the first low-on-space domain encountered. */ + public ValidationResult allDomainsHaveSpaceForNewDisks(List<DiskImage> disksList) { + final Map<Guid, List<DiskImage>> disksMap = getDomainsDisksMap(disksList); + + return validOrFirstFailure(new ValidatorPredicate() { + @Override + public ValidationResult evaluate(Map.Entry<Guid, StorageDomainValidator> entry) { + Guid sdId = entry.getKey(); + List<DiskImage> disksList = disksMap.get(sdId); + return getStorageDomainValidator(entry).hasSpaceForNewDisks(disksList); + } + }); + } + + /** + * Validates that all the domains have enough space for the request + * @return {@link ValidationResult#VALID} if all the domains have enough free space, or a {@link ValidationResult} with the first low-on-space domain encountered. + */ public ValidationResult allDomainsHaveSpaceForAllDisks(List<DiskImage> newDisksList, List<DiskImage> clonedDisksList) { final Map<Guid, List<DiskImage>> domainsNewDisksMap = getDomainsDisksMap(newDisksList); final Map<Guid, List<DiskImage>> domainsClonedDisksMap = getDomainsDisksMap(clonedDisksList); diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/StorageDomainValidatorFreeSpaceTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/StorageDomainValidatorFreeSpaceTest.java index 32690ea..eead8f8 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/StorageDomainValidatorFreeSpaceTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/StorageDomainValidatorFreeSpaceTest.java @@ -88,11 +88,16 @@ @Test public void testValidateAllDisks() { StorageDomainValidator sdValidator = new StorageDomainValidator(sd); - String assertData = disk.getVolumeFormat() + ", " + disk.getVolumeType() + ", " + sd.getStorageType() + ", " + - isValidForNew + ", " + isValidForCloned; + String assertData = disk.getVolumeFormat() + ", " + disk.getVolumeType() + ", " + sd.getStorageType(); List<DiskImage> disksList = Collections.singletonList(disk); - assertEquals(assertData, sdValidator.hasSpaceForAllDisks(disksList, null).isValid()); - assertEquals(assertData, sdValidator.hasSpaceForAllDisks(null, disksList).isValid()); - assertEquals(assertData, sdValidator.hasSpaceForAllDisks(disksList, Collections.singletonList(disk)).isValid()); + assertEquals(assertData, + isValidForNew, + sdValidator.hasSpaceForAllDisks(disksList, null).isValid()); + assertEquals(assertData, + isValidForCloned, + sdValidator.hasSpaceForAllDisks(null, disksList).isValid()); + assertEquals(assertData, + isValidForNew && isValidForCloned, + sdValidator.hasSpaceForAllDisks(disksList, disksList).isValid()); } } -- To view, visit http://gerrit.ovirt.org/30776 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Id04203119cce475afeef7658db50e132b0c7036a Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Vered Volansky <vvola...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches