Vered Volansky has uploaded a new change for review. Change subject: core: Import image from glance storage allocation ......................................................................
core: Import image from glance storage allocation This patch is a part of a series of patches, adding storage allocation validations to the system when they're missing, and replacing old verification usage with unified, new, correct and tested verification. This patch did this for ImportRepoImageCommand, using only existing validations. Reorganized sparse/preallocated determination as part of the CDA flow as to have the correct storage allocation validation. Change-Id: I60b7f13d8f64608f97e4eeebe2f9eef3087d9920 Bug-Url: https://bugzilla.redhat.com/1053750 Signed-off-by: Vered Volansky <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportRepoImageCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportRepoImageCreateTaskHandler.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/ImportRepoImageCommandTest.java 3 files changed, 28 insertions(+), 24 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/44/33844/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportRepoImageCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportRepoImageCommand.java index c33e60d..02e6099 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportRepoImageCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportRepoImageCommand.java @@ -10,6 +10,7 @@ import org.ovirt.engine.core.bll.tasks.SPMAsyncTaskHandler; import org.ovirt.engine.core.bll.tasks.TaskHandlerCommand; import org.ovirt.engine.core.bll.utils.PermissionSubject; +import org.ovirt.engine.core.bll.validator.StorageDomainValidator; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.FeatureSupported; import org.ovirt.engine.core.common.VdcObjectType; @@ -19,6 +20,8 @@ import org.ovirt.engine.core.common.businessentities.ActionGroup; import org.ovirt.engine.core.common.businessentities.ArchitectureType; import org.ovirt.engine.core.common.businessentities.DiskImage; +import org.ovirt.engine.core.common.businessentities.VolumeFormat; +import org.ovirt.engine.core.common.businessentities.VolumeType; import org.ovirt.engine.core.common.errors.VdcBllMessages; import org.ovirt.engine.core.compat.Guid; @@ -147,8 +150,16 @@ protected DiskImage getDiskImage() { if (getParameters().getDiskImage() == null) { - getParameters().setDiskImage( - getProviderProxy().getImageAsDiskImage(getParameters().getSourceRepoImageId())); + DiskImage diskImage = getProviderProxy().getImageAsDiskImage(getParameters().getSourceRepoImageId()); + if (diskImage != null) { + if (diskImage.getVolumeFormat() == VolumeFormat.RAW && + getStorageDomain().getStorageType().isBlockDomain()) { + diskImage.setVolumeType(VolumeType.Preallocated); + } else { + diskImage.setVolumeType(VolumeType.Sparse); + } + } + getParameters().setDiskImage(diskImage); } return getParameters().getDiskImage(); } @@ -236,6 +247,17 @@ return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_DISK_NOT_EXIST); } - return true; + return validateSpaceRequirements(diskImage); + } + + protected boolean validateSpaceRequirements(DiskImage diskImage) { + StorageDomainValidator sdValidator = createStorageDomainValidator(); + return (validate(sdValidator.isDomainExistAndActive()) + && validate(sdValidator.isDomainWithinThresholds())) + && validate(sdValidator.hasSpaceForClonedDisk(diskImage)); + } + + protected StorageDomainValidator createStorageDomainValidator() { + return new StorageDomainValidator(getStorageDomain()); } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportRepoImageCreateTaskHandler.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportRepoImageCreateTaskHandler.java index bbf3530..7e727b7 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportRepoImageCreateTaskHandler.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportRepoImageCreateTaskHandler.java @@ -16,18 +16,12 @@ import org.ovirt.engine.core.common.businessentities.DiskInterface; import org.ovirt.engine.core.common.businessentities.ImageStatus; import org.ovirt.engine.core.common.businessentities.Permissions; -import org.ovirt.engine.core.common.businessentities.StorageDomain; -import org.ovirt.engine.core.common.businessentities.VolumeFormat; -import org.ovirt.engine.core.common.businessentities.VolumeType; import org.ovirt.engine.core.compat.Guid; -import org.ovirt.engine.core.dal.dbbroker.DbFacade; public class ImportRepoImageCreateTaskHandler implements SPMAsyncTaskHandler { private final CommandBase<? extends ImportRepoImageParameters> enclosingCommand; - - private StorageDomain destinationStorageDomain; public ImportRepoImageCreateTaskHandler(CommandBase<? extends ImportRepoImageParameters> enclosingCommand) { this.enclosingCommand = enclosingCommand; @@ -50,13 +44,6 @@ diskImage.setId(enclosingCommand.getParameters().getImageGroupID()); diskImage.setDiskInterface(DiskInterface.VirtIO); - if (diskImage.getVolumeFormat() == VolumeFormat.RAW && - getDestinationStorageDomain().getStorageType().isBlockDomain()) { - diskImage.setVolumeType(VolumeType.Preallocated); - } else { - diskImage.setVolumeType(VolumeType.Sparse); - } - VdcReturnValueBase vdcReturnValue = Backend.getInstance().runInternalAction(VdcActionType.AddImageFromScratch, getAddImageFromScratchParameters(), @@ -76,14 +63,6 @@ ExecutionHandler.setAsyncJob(enclosingCommand.getExecutionContext(), true); enclosingCommand.getReturnValue().setSucceeded(true); } - } - - protected StorageDomain getDestinationStorageDomain() { - if (destinationStorageDomain == null) { - destinationStorageDomain = DbFacade.getInstance().getStorageDomainDao().get( - enclosingCommand.getParameters().getStorageDomainId()); - } - return destinationStorageDomain; } protected AddImageFromScratchParameters getAddImageFromScratchParameters() { diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/ImportRepoImageCommandTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/ImportRepoImageCommandTest.java index 7f2d0ab..70f357e 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/ImportRepoImageCommandTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/ImportRepoImageCommandTest.java @@ -5,9 +5,11 @@ import org.junit.runner.RunWith; import org.mockito.runners.MockitoJUnitRunner; import org.ovirt.engine.core.common.action.ImportRepoImageParameters; +import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.StoragePoolStatus; import org.ovirt.engine.core.common.errors.VdcBllMessages; +import static org.mockito.Matchers.any; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; @@ -35,6 +37,7 @@ doReturn(getStorageDomainDao()).when(cmd).getStorageDomainDAO(); doReturn(getStoragePoolDao()).when(cmd).getStoragePoolDAO(); doReturn(getProviderProxy()).when(cmd).getProviderProxy(); + doReturn(true).when(cmd).validateSpaceRequirements(any(DiskImage.class)); } @Test -- To view, visit http://gerrit.ovirt.org/33844 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I60b7f13d8f64608f97e4eeebe2f9eef3087d9920 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Vered Volansky <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
