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/CreateAllSnapshotsFromVmCommand.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/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 9 files changed, 55 insertions(+), 33 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/94/23294/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 fa9f0e0..e2b716f 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 @@ -66,7 +66,7 @@ public class CreateAllSnapshotsFromVmCommand<T extends CreateAllSnapshotsFromVmParameters> extends VmCommand<T> implements QuotaStorageDependent, TaskHandlerCommand<CreateAllSnapshotsFromVmParameters> { private List<DiskImage> cachedSelectedActiveDisks; - private Guid cachedStorageDomainId = Guid.Empty; + private StorageDomain cachedStorageDomain; private String cachedSnapshotIsBeingTakenMessage; private Guid newActiveSnapshotId = Guid.newGuid(); @@ -169,15 +169,15 @@ setSucceeded(true); } - public Guid getStorageDomainIdForVmMemory() { - if (cachedStorageDomainId.equals(Guid.Empty) && getVm() != null) { + private StorageDomain getStorageDomainForVmMemory() { + if (cachedStorageDomain == null && getVm() != null) { long sizeNeeded = getVm().getTotalMemorySizeInBytes() / BYTES_IN_GB; StorageDomain storageDomain = VmHandler.findStorageDomainForMemory(getVm().getStoragePoolId(), sizeNeeded); if (storageDomain != null) { - cachedStorageDomainId = storageDomain.getId(); + cachedStorageDomain = storageDomain; } } - return cachedStorageDomainId; + return cachedStorageDomain; } private MemoryImageBuilder createMemoryImageBuilder() { @@ -190,7 +190,7 @@ } if (getParameters().isSaveMemory() && isLiveSnapshotApplicable()) { - return new LiveSnapshotMemoryImageBuilder(getVm(), getStorageDomainIdForVmMemory(), getStoragePool(), this); + return new LiveSnapshotMemoryImageBuilder(getVm(), getStorageDomainForVmMemory(), getStoragePool(), this); } return new NullableMemoryImageBuilder(); @@ -468,7 +468,7 @@ } } - if (getParameters().isSaveMemory() && Guid.Empty.equals(getStorageDomainIdForVmMemory())) { + if (getParameters().isSaveMemory() && getStorageDomainForVmMemory() == null) { return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_NO_SUITABLE_DOMAIN_FOUND); } 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..c4d5c72 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 @@ -341,7 +341,7 @@ // if the data domains are 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 (getStorageDomain().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..2faf9a8 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..212d5d1 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 getMemoryVolumeTypeForPool(getStorageDomain().getStorageType()); } /** 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..e0fb21b 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; @@ -722,6 +723,7 @@ private MoveOrCopyImageGroupParameters buildMoveOrCopyImageGroupParametersForMemoryDumpImage(Guid containerID, Guid storageId, Guid imageId, Guid volumeId) { + MoveOrCopyImageGroupParameters params = new MoveOrCopyImageGroupParameters(containerID, imageId, volumeId, imageId, volumeId, storageId, getMoveOrCopyImageOperation()); params.setParentCommand(getActionType()); @@ -733,7 +735,8 @@ params.setEntityInfo(new EntityInfo(VdcObjectType.VM, getVm().getId())); params.setParentParameters(getParameters()); - if (getStoragePool().getStorageType().isBlockDomain()) { + StorageDomainStatic storageDomain = getStorageDomainStaticDAO().get(storageId); + if (storageDomain != null && 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..f1b83a6 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.StorageDomain; import org.ovirt.engine.core.common.businessentities.StoragePool; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VolumeFormat; @@ -22,7 +23,7 @@ private static final String CREATE_IMAGE_FOR_VM_TASK_KEY = "CREATE_IMAGE_FOR_VM_TASK_KEY"; private static final String CREATE_IMAGE_FOR_MEMORY_DUMP_TASK_KEY = "CREATE_IMAGE_FOR_MEMORY_DUMP_TASK_KEY"; - private Guid storageDomainId; + private StorageDomain storageDomain; private Guid memoryDumpImageGroupId; private Guid memoryDumpVolumeId; private Guid vmConfImageGroupId; @@ -31,11 +32,11 @@ private TaskHandlerCommand<?> enclosingCommand; private StoragePool storagePool; - public LiveSnapshotMemoryImageBuilder(VM vm, Guid storageDomainId, + public LiveSnapshotMemoryImageBuilder(VM vm, StorageDomain storageDomain, StoragePool storagePool, TaskHandlerCommand<?> enclosingCommand) { this.vm = vm; this.enclosingCommand = enclosingCommand; - this.storageDomainId = storageDomainId; + this.storageDomain = storageDomain; this.storagePool = storagePool; this.memoryDumpImageGroupId = Guid.newGuid(); this.memoryDumpVolumeId = Guid.newGuid(); @@ -57,7 +58,7 @@ VDSCommandType.CreateImage, new CreateImageVDSCommandParameters( storagePool.getId(), - storageDomainId, + storageDomain.getId(), vmConfImageGroupId, HibernateVmCommand.META_DATA_SIZE_IN_BYTES, VolumeType.Sparse, @@ -87,10 +88,10 @@ VDSCommandType.CreateImage, new CreateImageVDSCommandParameters( storagePool.getId(), - storageDomainId, + storageDomain.getId(), memoryDumpImageGroupId, vm.getTotalMemorySizeInBytes(), - HibernateVmCommand.getMemoryVolumeTypeForPool(storagePool.getStorageType()), + HibernateVmCommand.getMemoryVolumeTypeForPool(storageDomain.getStorageType()), VolumeFormat.RAW, memoryDumpVolumeId, "")); @@ -106,13 +107,13 @@ retVal.getCreationInfo(), enclosingCommand.getActionType(), VdcObjectType.Storage, - storageDomainId); + storageDomain.getId()); enclosingCommand.getTaskIdList().add(guid); } public String getVolumeStringRepresentation() { return MemoryUtils.createMemoryStateString( - storageDomainId, + storageDomain.getId(), storagePool.getId(), memoryDumpImageGroupId, 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..0e822c8 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 */ @@ -172,7 +186,7 @@ @Test public void testCanDoActionStoragePoolFile() { - storagePool.setStorageType(StorageType.NFS); + 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..9613a8f 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 @@ -648,7 +648,7 @@ } 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 +710,6 @@ return; } - updateVolumeType(datacenter.getStorageType()); updateShareableDiskEnabled(datacenter); updateDirectLunDiskEnabled(datacenter); updateInterface(isInVm ? getVm().getVdsGroupCompatibilityVersion() : null); @@ -724,6 +723,9 @@ } private void storageDomain_SelectedItemChanged() { + if (getStorageDomain().getSelectedItem() != null) { + updateVolumeType(((StorageDomain)getStorageDomain().getSelectedItem()).getStorageType()); + } updateQuota((StoragePool) getDataCenter().getSelectedItem()); } -- To view, visit http://gerrit.ovirt.org/23294 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I3db80f1749d93444e9cdac8038859b7d0865f6e5 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Tal Nisan <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
