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