Tal Nisan has uploaded a new change for review. Change subject: core,webadmin: Move storage type checks to domain instead of pool ......................................................................
core,webadmin: Move storage type checks to domain instead of pool As a part of the effort to remove the type of storage pool, checks of the storage type are changed to check the type on the storage domain instead of the storage pool Change-Id: I3db80f1749d93444e9cdac8038859b7d0865f6e5 Relates-To: https://bugzilla.redhat.com/1038053 Signed-off-by: Tal Nisan <[email protected]> --- 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/GetDiskAlignmentCommand.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/memory/LiveSnapshotMemoryImageBuilder.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommand.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetDiskAlignmentCommandTest.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java 8 files changed, 51 insertions(+), 23 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/84/23584/1 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 8303a32..fcef35c 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 @@ -30,6 +30,7 @@ import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.Snapshot; 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.StoragePoolIsoMapId; import org.ovirt.engine.core.common.businessentities.VM; @@ -339,9 +340,11 @@ params.setEntityInfo(getParameters().getEntityInfo()); params.setParentParameters(getParameters()); - // if the data domains are block based storage, the memory volume type is preallocated + StorageDomainStatic sourceDomain = getStorageDomainStaticDAO().get(storageDomainId); + + // if the data domain is a block based storage, the memory volume type is preallocated // so we need to use copy collapse in order to convert it to be sparsed in the export domain - if (getStoragePool().getStorageType().isBlockDomain()) { + if (sourceDomain.getStorageType().isBlockDomain()) { params.setUseCopyCollapse(true); params.setVolumeType(VolumeType.Sparse); params.setVolumeFormat(VolumeFormat.RAW); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetDiskAlignmentCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetDiskAlignmentCommand.java index c87f990..ad5a02c 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetDiskAlignmentCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetDiskAlignmentCommand.java @@ -19,6 +19,7 @@ import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.ImageStatus; import org.ovirt.engine.core.common.businessentities.LunDisk; +import org.ovirt.engine.core.common.businessentities.StorageDomainStatic; import org.ovirt.engine.core.common.businessentities.StoragePool; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VDSStatus; @@ -100,17 +101,22 @@ return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_DISK_NOT_EXIST); } + if (getVm() == null) { + addCanDoActionMessage(String.format("$diskAliases %1$s", getDiskAlias())); + return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_DISK_IS_NOT_VM_DISK); + } + if (getDiskType() == DiskStorageType.IMAGE) { DiskImagesValidator diskImagesValidator = new DiskImagesValidator(Arrays.asList((DiskImage) getDisk())); if (!validate(diskImagesValidator.diskImagesNotLocked()) || !validate(diskImagesValidator.diskImagesNotIllegal())) { return false; } - } - if (getVm() == null) { - addCanDoActionMessage(String.format("$diskAliases %1$s", getDiskAlias())); - return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_DISK_IS_NOT_VM_DISK); + StorageDomainStatic sds = getStorageDomainStaticDAO().get(((DiskImage) getDisk()).getStorageIds().get(0)); + if (!sds.getStorageType().isBlockDomain()) { + return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_ALIGNMENT_SCAN_STORAGE_TYPE); + } } if (isImageExclusiveLockNeeded() && getVm().isRunningOrPaused()) { @@ -124,10 +130,6 @@ StoragePool sp = getStoragePoolDao().get(getStoragePoolId()); if (!validate(new StoragePoolValidator(sp).isUp())) { return false; - } - - if (!sp.getStorageType().isBlockDomain()) { - return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_ALIGNMENT_SCAN_STORAGE_TYPE); } return true; 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 c371611..ce23ab0 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 @@ -372,7 +372,7 @@ } private VolumeType getMemoryVolumeType() { - return getMemoryVolumeTypeForPool(getStoragePool().getStorageType()); + return getMemoryVolumeTypeForStorageDomain(getStorageDomain().getStorageType()); } /** @@ -381,7 +381,7 @@ * * @return - VolumeType of allocation type to use. */ - public static VolumeType getMemoryVolumeTypeForPool(StorageType storageType) { + public static VolumeType getMemoryVolumeTypeForStorageDomain(StorageType storageType) { return storageType.isFileDomain() ? VolumeType.Sparse : VolumeType.Preallocated; } 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 ad8d2dd..85b3e6e 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 @@ -52,6 +52,7 @@ import org.ovirt.engine.core.common.businessentities.Snapshot.SnapshotStatus; import org.ovirt.engine.core.common.businessentities.Snapshot.SnapshotType; import org.ovirt.engine.core.common.businessentities.StorageDomain; +import org.ovirt.engine.core.common.businessentities.StorageDomainStatic; import org.ovirt.engine.core.common.businessentities.StorageDomainType; import org.ovirt.engine.core.common.businessentities.VDSGroup; import org.ovirt.engine.core.common.businessentities.VM; @@ -733,7 +734,8 @@ params.setEntityInfo(new EntityInfo(VdcObjectType.VM, getVm().getId())); params.setParentParameters(getParameters()); - if (getStoragePool().getStorageType().isBlockDomain()) { + StorageDomainStatic storageDomain = getStorageDomainStaticDAO().get(storageId); + if (storageDomain.getStorageType().isBlockDomain()) { params.setUseCopyCollapse(true); params.setVolumeType(VolumeType.Preallocated); params.setVolumeFormat(VolumeFormat.RAW); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/LiveSnapshotMemoryImageBuilder.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/LiveSnapshotMemoryImageBuilder.java index e2676ca..cd50965 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/LiveSnapshotMemoryImageBuilder.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/LiveSnapshotMemoryImageBuilder.java @@ -4,6 +4,7 @@ import org.ovirt.engine.core.bll.HibernateVmCommand; import org.ovirt.engine.core.bll.tasks.TaskHandlerCommand; import org.ovirt.engine.core.common.VdcObjectType; +import org.ovirt.engine.core.common.businessentities.StorageDomainStatic; import org.ovirt.engine.core.common.businessentities.StoragePool; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VolumeFormat; @@ -14,6 +15,7 @@ import org.ovirt.engine.core.common.vdscommands.VDSCommandType; import org.ovirt.engine.core.common.vdscommands.VDSReturnValue; import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dal.dbbroker.DbFacade; /** * This builder creates the memory images for live snapshots with memory operation @@ -79,6 +81,7 @@ } private void createImageForMemoryDump() { + StorageDomainStatic storageDomainStatic = DbFacade.getInstance().getStorageDomainStaticDao().get(storageDomainId); VDSReturnValue retVal = Backend .getInstance() @@ -90,7 +93,7 @@ storageDomainId, memoryDumpImageGroupId, vm.getTotalMemorySizeInBytes(), - HibernateVmCommand.getMemoryVolumeTypeForPool(storagePool.getStorageType()), + HibernateVmCommand.getMemoryVolumeTypeForStorageDomain(storageDomainStatic.getStorageType()), VolumeFormat.RAW, memoryDumpVolumeId, "")); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommand.java index 0907702..91fd054 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommand.java @@ -201,7 +201,7 @@ setSucceeded(true); if (!getStoragePool().isLocal()) { for (VDS vds : vdss) { - StorageHelperDirector.getInstance().getItem(getStoragePool().getStorageType()) + StorageHelperDirector.getInstance().getItem(masterDomain.getStorageType()) .disconnectStorageFromDomainByVdsId(masterDomain, vds.getId()); } } else { @@ -215,7 +215,7 @@ } catch (VdcBLLException e) { // Do nothing, exception already printed at logs } - StorageHelperDirector.getInstance().getItem(getStoragePool().getStorageType()) + StorageHelperDirector.getInstance().getItem(masterDomain.getStorageType()) .disconnectStorageFromDomainByVdsId(masterDomain, vdss.get(0).getId()); removeDomainFromDb(masterDomain); } diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetDiskAlignmentCommandTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetDiskAlignmentCommandTest.java index 5578e29..0ecb107 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetDiskAlignmentCommandTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetDiskAlignmentCommandTest.java @@ -4,6 +4,8 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import org.junit.Before; @@ -16,6 +18,7 @@ import org.ovirt.engine.core.common.action.GetDiskAlignmentParameters; import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.ImageStatus; +import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.StoragePool; import org.ovirt.engine.core.common.businessentities.StoragePoolStatus; import org.ovirt.engine.core.common.businessentities.StorageType; @@ -29,6 +32,7 @@ import org.ovirt.engine.core.common.businessentities.VMStatus; import org.ovirt.engine.core.common.errors.VdcBllMessages; import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dao.StorageDomainStaticDAO; import org.ovirt.engine.core.dao.StoragePoolDAO; import org.ovirt.engine.core.dao.VdsDAO; import org.ovirt.engine.core.dao.VdsGroupDAO; @@ -54,6 +58,9 @@ private VdsDAO vdsDao; @Mock + private StorageDomainStaticDAO storageDomainStaticDAO; + + @Mock private StoragePoolDAO spDao; @Mock @@ -64,12 +71,13 @@ private GetDiskAlignmentCommand<GetDiskAlignmentParameters> cmd; - private Guid vmId, diskId, poolId, groupId, vdsId; + private Guid vmId, diskId, poolId, storageDomainId, groupId, vdsId; private DiskImage disk; private VM vm; private VDS vds; private VmDevice vmDevice; private StoragePool storagePool; + private StorageDomain storageDomain; private VDSGroup vdsGroup; @Before @@ -77,6 +85,7 @@ vmId = Guid.newGuid(); diskId = Guid.newGuid(); poolId = Guid.newGuid(); + storageDomainId = Guid.newGuid(); groupId = Guid.newGuid(); vdsId = Guid.newGuid(); @@ -84,6 +93,7 @@ disk.setId(diskId); disk.setVmEntityType(VmEntityType.VM); disk.setImageStatus(ImageStatus.OK); + disk.setStorageIds(new ArrayList<Guid>(Arrays.asList(storageDomainId))); vm = new VM(); vm.setId(vmId); @@ -103,13 +113,16 @@ storagePool = new StoragePool(); storagePool.setStatus(StoragePoolStatus.Up); - storagePool.setStorageType(StorageType.ISCSI); + + storageDomain = new StorageDomain(); + storageDomain.setStorageType(StorageType.ISCSI); when(vmDao.getVmsListForDisk(diskId, Boolean.FALSE)).thenReturn(Collections.singletonList(vm)); when(vmDeviceDao.get(vmDeviceId)).thenReturn(vmDevice); when(vdsDao.getAllForVdsGroupWithStatus(groupId, VDSStatus.Up)).thenReturn(Collections.singletonList(vds)); when(spDao.get(poolId)).thenReturn(storagePool); when(vdsGroupDao.get(groupId)).thenReturn(vdsGroup); + when(storageDomainStaticDAO.get(storageDomainId)).thenReturn(storageDomain.getStorageStaticData()); cmd = spy(new GetDiskAlignmentCommand<GetDiskAlignmentParameters>(new GetDiskAlignmentParameters(diskId))); @@ -118,6 +131,7 @@ doReturn(vmDao).when(cmd).getVmDAO(); doReturn(spDao).when(cmd).getStoragePoolDao(); doReturn(vdsGroupDao).when(cmd).getVdsGroupDAO(); + doReturn(storageDomainStaticDAO).when(cmd).getStorageDomainStaticDAO(); } /* Tests for canDoAction() flow */ @@ -171,8 +185,8 @@ } @Test - public void testCanDoActionStoragePoolFile() { - storagePool.setStorageType(StorageType.NFS); + public void testCanDoActionStorageDomainIsFileStorage() { + storageDomain.setStorageType(StorageType.NFS); CanDoActionTestUtils.runAndAssertCanDoActionFailure(cmd, VdcBllMessages.ACTION_TYPE_FAILED_ALIGNMENT_SCAN_STORAGE_TYPE); } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java index 85ef1cd..60dde15 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java @@ -643,12 +643,13 @@ } private void volumeType_SelectedItemChanged() { - if (getVolumeType().getSelectedItem() == null || getDataCenter().getSelectedItem() == null) { + if (getVolumeType().getSelectedItem() == null || getDataCenter().getSelectedItem() == null + || getStorageDomain().getSelectedItem() == null) { return; } VolumeType volumeType = (VolumeType) getVolumeType().getSelectedItem(); - StorageType storageType = ((StoragePool) getDataCenter().getSelectedItem()).getStorageType(); + StorageType storageType = ((StorageDomain) getStorageDomain().getSelectedItem()).getStorageType(); updateVolumeFormat(volumeType, storageType); updateShareable(volumeType, storageType); @@ -710,7 +711,6 @@ return; } - updateVolumeType(datacenter.getStorageType()); updateShareableDiskEnabled(datacenter); updateDirectLunDiskEnabled(datacenter); updateInterface(isInVm ? getVm().getVdsGroupCompatibilityVersion() : null); @@ -724,6 +724,10 @@ } private void storageDomain_SelectedItemChanged() { + StorageDomain selectedStorage = (StorageDomain) getStorageDomain().getSelectedItem(); + if (selectedStorage != null) { + updateVolumeType(selectedStorage.getStorageType()); + } updateQuota((StoragePool) getDataCenter().getSelectedItem()); } -- To view, visit http://gerrit.ovirt.org/23584 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I3db80f1749d93444e9cdac8038859b7d0865f6e5 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.4 Gerrit-Owner: Tal Nisan <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
