Vered Volansky has uploaded a new change for review. Change subject: core: Use correct validation for SD selection ......................................................................
core: Use correct validation for SD selection When creating a snapshot, use new storage allocation validations for the vm volumes when selecting a domain. Some code has been removed as a result from this change. Change-Id: Iac901a638358b9b08bcc6992d783a42cbfcd9bfa Bug-Url: https://bugzilla.redhat.com/1119022 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/HibernateVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.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/memory/MemoryImageBuilder.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/MemoryUtils.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/NullableMemoryImageBuilder.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/StatelessSnapshotMemoryImageBuilder.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommandTest.java 9 files changed, 30 insertions(+), 82 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/71/32171/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 2d1e3c7..2bc7ccb 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 @@ -11,6 +11,7 @@ import org.ovirt.engine.core.bll.context.CommandContext; import org.ovirt.engine.core.bll.memory.LiveSnapshotMemoryImageBuilder; import org.ovirt.engine.core.bll.memory.MemoryImageBuilder; +import org.ovirt.engine.core.bll.memory.MemoryUtils; import org.ovirt.engine.core.bll.memory.NullableMemoryImageBuilder; import org.ovirt.engine.core.bll.memory.StatelessSnapshotMemoryImageBuilder; import org.ovirt.engine.core.bll.quota.QuotaConsumptionParameter; @@ -145,8 +146,7 @@ return toReturn; } - private boolean validateStorageDomains(List<DiskImage> vmDisksList) { - List<DiskImage> memoryDisksList = getMemoryImageBuilder().getDisksToBeCreated(); + private boolean validateStorageDomains(List<DiskImage> vmDisksList, List<DiskImage> memoryDisksList) { List<DiskImage> disksList = getAllDisks(vmDisksList, memoryDisksList); MultipleStorageDomainsValidator sdValidator = createMultipleStorageDomainsValidator(disksList); return validate(sdValidator.allDomainsExistAndActive()) @@ -204,10 +204,9 @@ setSucceeded(true); } - public Guid getStorageDomainIdForVmMemory() { + public Guid getStorageDomainIdForVmMemory(List<DiskImage> memoryDisksList) { if (cachedStorageDomainId.equals(Guid.Empty) && getVm() != null) { - long sizeNeeded = getVm().getTotalMemorySizeInBytes() / BYTES_IN_GB; - StorageDomain storageDomain = VmHandler.findStorageDomainForMemory(getVm().getStoragePoolId(), sizeNeeded); + StorageDomain storageDomain = VmHandler.findStorageDomainForMemory(getVm().getStoragePoolId(), memoryDisksList); if (storageDomain != null) { cachedStorageDomainId = storageDomain.getId(); } @@ -225,7 +224,7 @@ } if (getParameters().isSaveMemory() && isLiveSnapshotApplicable()) { - return new LiveSnapshotMemoryImageBuilder(getVm(), getStorageDomainIdForVmMemory(), getStoragePool(), this); + return new LiveSnapshotMemoryImageBuilder(getVm(), cachedStorageDomainId, getStoragePool(), this); } return new NullableMemoryImageBuilder(); @@ -512,12 +511,14 @@ } } - if (!validateStorageDomains(disksList)) { - return false; + List<DiskImage> memoryDisksList = MemoryUtils.createDiskDummies(getVm().getTotalMemorySizeInBytes(), MemoryUtils.META_DATA_SIZE_IN_BYTES); + getStorageDomainIdForVmMemory(memoryDisksList); + if (getParameters().isSaveMemory() && Guid.Empty.equals(cachedStorageDomainId)) { + return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_NO_SUITABLE_DOMAIN_FOUND); } - if (getParameters().isSaveMemory() && Guid.Empty.equals(getStorageDomainIdForVmMemory())) { - return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_NO_SUITABLE_DOMAIN_FOUND); + if (!validateStorageDomains(disksList, memoryDisksList)) { + return false; } 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 a5702e8..8305dea 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 @@ -47,10 +47,6 @@ private static final String SAVE_RAM_STATE_TASK_KEY = "SAVE_RAM_STATE_TASK_KEY"; private boolean isHibernateVdsProblematic = false; - /** The size for the snapshot's meta data which is vm related properties at the - * time the snapshot was taken */ - public static final long META_DATA_SIZE_IN_BYTES = 10 * 1024; - /** * Constructor for command creation when compensation is applied on startup * @@ -90,7 +86,8 @@ @Override public Guid getStorageDomainId() { if (_storageDomainId.equals(Guid.Empty) && getVm() != null) { - List<DiskImage> diskDummiesForMemSize = MemoryUtils.createDiskDummies(getVm().getTotalMemorySizeInBytes(), META_DATA_SIZE_IN_BYTES); + List<DiskImage> diskDummiesForMemSize = MemoryUtils.createDiskDummies(getVm().getTotalMemorySizeInBytes(), + MemoryUtils.META_DATA_SIZE_IN_BYTES); StorageDomain storageDomain = VmHandler.findStorageDomainForMemory(getVm().getStoragePoolId(), diskDummiesForMemSize); if (storageDomain != null) { _storageDomainId = storageDomain.getId(); @@ -175,7 +172,7 @@ new CreateImageVDSCommandParameters(getVm().getStoragePoolId(), getStorageDomainId(), image2GroupId, - META_DATA_SIZE_IN_BYTES, + MemoryUtils.META_DATA_SIZE_IN_BYTES, VolumeType.Sparse, VolumeFormat.COW, hiberVol2, diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java index b89edc5..fb10b66 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java @@ -671,25 +671,6 @@ * The storage pool where the search for a domain will be made * @param sizeRequested * The free size we need to have in the domain, in gigabytes - * @return storage domain in the given pool with at least the required amount of free space, - * or null if no such storage domain exists in the pool - * - * This method is deprecated. Instead use findStorageDomainForMemory(Guid storagePoolId, List<DiskImage> disksList), - * and prepare the relevant dikslisk (probably dummies to reflect size). - */ - @Deprecated - public static StorageDomain findStorageDomainForMemory(Guid storagePoolId, long sizeRequested) { - return findStorageDomainForMemory(storagePoolId, sizeRequested, Collections.<StorageDomain, Integer>emptyMap()); - } - - /** - * Returns a <code>StorageDomain</code> in the given <code>StoragePool</code> that has - * at least as much as requested free space and can be used to store memory images - * - * @param storagePoolId - * The storage pool where the search for a domain will be made - * @param sizeRequested - * The free size we need to have in the domain, in gigabytes * @param domain2reservedSpaceInDomain * Maps storage domain to size we already reserved on it * @return storage domain in the given pool with at least the required amount of free space, @@ -742,8 +723,8 @@ protected static StorageDomain findStorageDomainForMemory(List<StorageDomain> domainsInPool, List<DiskImage> disksList) { for (StorageDomain currDomain : domainsInPool) { - //There should be two disks in the disksList, first of which is memory disk. Only its volume type should be modified. - updateDisksStorageType(currDomain.getStorageType(), disksList.get(0)); + + updateDisksStorage(currDomain, disksList); if (currDomain.getStorageDomainType().isDataDomain() && currDomain.getStatus() == StorageDomainStatus.Active && validateSpaceRequirements(currDomain, disksList)) { @@ -753,7 +734,15 @@ return null; } - private static void updateDisksStorageType(StorageType storageType, DiskImage disk) { + private static void updateDisksStorage(StorageDomain storageDomain, List<DiskImage> disksList) { + for (DiskImage disk : disksList) { + disk.setStorageIds(new ArrayList<Guid>(Collections.singletonList(storageDomain.getId()))); + } + //There should be two disks in the disksList, first of which is memory disk. Only its volume type should be modified. + updateDiskVolumeType(storageDomain.getStorageType(), disksList.get(0)); + } + + private static void updateDiskVolumeType(StorageType storageType, DiskImage disk) { VolumeType volumeType = storageType.isFileDomain() ? VolumeType.Sparse : VolumeType.Preallocated; disk.setVolumeType(volumeType); } 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 3b131a8..e848389 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 @@ -1,15 +1,9 @@ package org.ovirt.engine.core.bll.memory; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - import org.ovirt.engine.core.bll.Backend; 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.DiskImage; import org.ovirt.engine.core.common.businessentities.StorageDomainStatic; import org.ovirt.engine.core.common.businessentities.StoragePool; import org.ovirt.engine.core.common.businessentities.VM; @@ -140,20 +134,5 @@ public boolean isCreateTasks() { return true; - } - - public List<DiskImage> getDisksToBeCreated() { - DiskImage imageForMemory = new DiskImage(); - imageForMemory.setStorageIds(new ArrayList<Guid>(Collections.singletonList(storageDomainId))); - imageForMemory.setStoragePoolId(storagePool.getId()); - imageForMemory.setSize(vm.getTotalMemorySizeInBytes()); - imageForMemory.setVolumeType(getVolumeTypeForDomain()); - imageForMemory.setvolumeFormat(VolumeFormat.RAW); - - DiskImage imageForMetadata = DiskImage.copyOf(imageForMemory); - imageForMetadata.setSize(HibernateVmCommand.META_DATA_SIZE_IN_BYTES); - imageForMetadata.setVolumeType(VolumeType.Sparse); - imageForMetadata.setvolumeFormat(VolumeFormat.COW); - return Arrays.asList(imageForMemory, imageForMetadata); } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/MemoryImageBuilder.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/MemoryImageBuilder.java index 7742c3e..d5b7da5 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/MemoryImageBuilder.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/MemoryImageBuilder.java @@ -1,9 +1,5 @@ package org.ovirt.engine.core.bll.memory; -import java.util.List; - -import org.ovirt.engine.core.common.businessentities.DiskImage; - public interface MemoryImageBuilder { /** * Create the images @@ -21,6 +17,4 @@ * @return true if tasks are created in {@link #build()}, false otherwise */ boolean isCreateTasks(); - - List<DiskImage> getDisksToBeCreated(); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/MemoryUtils.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/MemoryUtils.java index 49480a4..879cbbc 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/MemoryUtils.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/MemoryUtils.java @@ -15,6 +15,10 @@ public class MemoryUtils { + /** The size for the snapshot's meta data which is vm related properties at the + * time the snapshot was taken */ + public static final long META_DATA_SIZE_IN_BYTES = 10 * 1024; + /** * Modified the given memory volume String representation to have the given storage * pool and storage domain diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/NullableMemoryImageBuilder.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/NullableMemoryImageBuilder.java index f213344..929c729 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/NullableMemoryImageBuilder.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/NullableMemoryImageBuilder.java @@ -1,10 +1,6 @@ package org.ovirt.engine.core.bll.memory; -import java.util.Collections; -import java.util.List; - import org.apache.commons.lang.StringUtils; -import org.ovirt.engine.core.common.businessentities.DiskImage; /** * This builder is used when no memory image should be created @@ -21,9 +17,5 @@ public boolean isCreateTasks() { return false; - } - - public List<DiskImage> getDisksToBeCreated() { - return Collections.emptyList(); } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/StatelessSnapshotMemoryImageBuilder.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/StatelessSnapshotMemoryImageBuilder.java index 604c7bd..76ee9a4 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/StatelessSnapshotMemoryImageBuilder.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/StatelessSnapshotMemoryImageBuilder.java @@ -1,9 +1,5 @@ package org.ovirt.engine.core.bll.memory; -import java.util.Collections; -import java.util.List; - -import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.Snapshot.SnapshotType; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.dal.dbbroker.DbFacade; @@ -33,9 +29,4 @@ public boolean isCreateTasks() { return false; } - - public List<DiskImage> getDisksToBeCreated() { - return Collections.emptyList(); - } - } diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommandTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommandTest.java index db64171..49f84a5 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommandTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommandTest.java @@ -78,6 +78,7 @@ doReturn(diskImagesValidator).when(cmd).createDiskImageValidator(any(List.class)); doReturn(multipleStorageDomainsValidator).when(cmd).createMultipleStorageDomainsValidator(any(List.class)); doReturn(memoryImageBuilder).when(cmd).getMemoryImageBuilder(); + doReturn(Guid.newGuid()).when(cmd).getStorageDomainIdForVmMemory(anyList()); } @Test -- To view, visit http://gerrit.ovirt.org/32171 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Iac901a638358b9b08bcc6992d783a42cbfcd9bfa Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.5 Gerrit-Owner: Vered Volansky <vvola...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches