Vered Volansky has uploaded a new change for review. Change subject: core: [WIP] ImportVm storageAllocations ......................................................................
core: [WIP] ImportVm storageAllocations Change-Id: Ifbb1d985f9afa476452d1d2b78be1fd18c128c8f Bug-Url: https://bugzilla.redhat.com/1053746 Signed-off-by: Vered Volansky <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.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/MoveOrCopyTemplateCommand.java 3 files changed, 31 insertions(+), 16 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/58/32258/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java index a3026da..6719636 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java @@ -816,4 +816,11 @@ } return snapshot; } + + public static DiskImage createDummyDiskImage(DiskImage diskImage, Guid sdId) { + DiskImage dummy = DiskImage.copyOf(diskImage); + dummy.setStorageIds(new ArrayList<Guid>(Collections.singletonList(sdId))); + dummy.getSnapshots().addAll(ImagesHandler.getAllImageSnapshots(dummy.getImageId())); + return dummy; + } } 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 a8b28cf..ecb31db 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 @@ -418,19 +418,8 @@ } if (!isImagesAlreadyOnTarget()) { - - //This gets a map of sizes with the DESTINATION(!) domain - Map<StorageDomain, Integer> domainMap = getSpaceRequirementsForStorageDomains(imageList); - - //Here storage domain for memory volumes is set and stored in the snapshot - if (!updateDomainsForMemoryImages()) { + if (!handleDestStorageDomains()) { return false; - } - - for (Map.Entry<StorageDomain, Integer> entry : domainMap.entrySet()) { - if (!doesStorageDomainhaveSpaceForRequest(entry.getKey(), entry.getValue())) { - return false; - } } } @@ -461,13 +450,22 @@ return true; } + protected boolean handleDestStorageDomains() { + List<DiskImage> dummiesDisksList = new ArrayList<>(); + if (!updateDomainsForMemoryImages(dummiesDisksList)) { + return false; + } + createDiskDummiesForSpaceValidations(imageList, dummiesDisksList); + return validateSpaceRequirements(dummiesDisksList); + } + /** * For each snapshot that has memory volume, this method updates the memory volume with * the storage pool and storage domain it's going to be imported to. * * @return true if we managed to assign storage domain for every memory volume, false otherwise */ - private boolean updateDomainsForMemoryImages() { + private boolean updateDomainsForMemoryImages(List<DiskImage> disksList) { Map<String, String> handledMemoryVolumes = new HashMap<String, String>(); for (Snapshot snapshot : getVm().getSnapshots()) { String memoryVolume = snapshot.getMemoryVolume(); @@ -481,7 +479,7 @@ continue; } - StorageDomain storageDomain = getStorageDomainForMemoryVolumes(snapshot); + StorageDomain storageDomain = updateStorageDomainForMemoryVolumes(snapshot, disksList); if (storageDomain == null) { return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_NO_SUITABLE_DOMAIN_FOUND); } @@ -495,10 +493,12 @@ return true; } - private StorageDomain getStorageDomainForMemoryVolumes(Snapshot snapshot) { + private StorageDomain updateStorageDomainForMemoryVolumes(Snapshot snapshot, List<DiskImage> disksList) { VM vm = getVmFromSnapshot(snapshot); List<DiskImage> memoryDisksList = MemoryUtils.createDiskDummies(vm.getTotalMemorySizeInBytes(), MemoryUtils.META_DATA_SIZE_IN_BYTES); - return VmHandler.findStorageDomainForMemory(getParameters().getStoragePoolId(), memoryDisksList); + StorageDomain storageDomain = VmHandler.findStorageDomainForMemory(getParameters().getStoragePoolId(), memoryDisksList); + disksList.addAll(memoryDisksList); + return storageDomain; } /** 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 f13841e..865af8a 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 @@ -356,6 +356,14 @@ return StorageDomainValidator.getSpaceRequirementsForStorageDomains(spaceMap); } + protected void createDiskDummiesForSpaceValidations(List<DiskImage> disksList, List<DiskImage> dummies) { + for (DiskImage image : disksList) { + Guid targetSdId = imageToDestinationDomainMap.get(image.getId()); + DiskImage dummy = ImagesHandler.createDummyDiskImage(image, targetSdId); + dummies.add(dummy); + } + } + protected boolean validateSpaceRequirements(List<DiskImage> disksList) { MultipleStorageDomainsValidator sdValidator = createMultipleStorageDomainsValidator(disksList); return validate(sdValidator.allDomainsExistAndActive()) -- To view, visit http://gerrit.ovirt.org/32258 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ifbb1d985f9afa476452d1d2b78be1fd18c128c8f 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
