Tomas Jelinek has uploaded a new change for review. Change subject: webadmin: cannot import VM with snapshots without collapsing them ......................................................................
webadmin: cannot import VM with snapshots without collapsing them When importing a VM each disk of the VM is verified if it's parent is present on a template in the system. If not, the snapshots has to be collapsed. The problem was that if the VM had snapshots the disks returned in getDiskMap() returned the snapshots (instead of the root disks). Fixed by finding the root disks and the verification is done according to them. Change-Id: Ib177757b64090bc5066acc3d89766bb0dbc29385 Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1020830 Signed-off-by: Tomas Jelinek <tjeli...@redhat.com> --- M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ImportVmModel.java 1 file changed, 31 insertions(+), 5 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/62/21062/1 diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ImportVmModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ImportVmModel.java index 4ebc11b4..33a75af 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ImportVmModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ImportVmModel.java @@ -1,11 +1,13 @@ package org.ovirt.engine.ui.uicommonweb.models.vms; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; - +import java.util.Set; import org.ovirt.engine.core.common.businessentities.Disk; import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.Quota; @@ -316,15 +318,16 @@ if (!templateDiskMap.containsKey(vm.getVmtGuid())) { templateDiskMap.put(vm.getVmtGuid(), new ArrayList<Disk>()); } - templateDiskMap.get(vm.getVmtGuid()).addAll(vm.getDiskMap().values()); + templateDiskMap.get(vm.getVmtGuid()).addAll(extractRootDisks(vm)); } - for (Disk disk : vm.getDiskMap().values()) { - DiskImage diskImage = (DiskImage) disk; + + for (Disk disk : vm.getDiskMap().values()) { + DiskImage diskImage = (DiskImage) disk; addDiskImportData(diskImage.getId(), filteredStorageDomains, diskImage.getVolumeType(), importVmData.getCollapseSnapshots()); - } + } } if (!templateDiskMap.isEmpty()) { ArrayList<VdcQueryType> queryTypeList = new ArrayList<VdcQueryType>(); @@ -371,6 +374,29 @@ } + private Collection<Disk> extractRootDisks(VM vm) { + Set<Disk> rootDisks = new HashSet<Disk>(); + + for (DiskImage candidate : vm.getImages()) { + if (isRoot(candidate, vm.getImages())) { + rootDisks.add(candidate); + } + } + + return rootDisks; + } + + private boolean isRoot(DiskImage candidate, List<DiskImage> images) { + for (DiskImage image : images) { + if (candidate.getParentId().equals(image.getImageId())) { +// if the candidate has a parent then it is not a root + return false; + } + } +// if we did not find a parent of a candidate then it is a root + return true; + } + protected void getTemplatesFromExportDomain() { GetAllFromExportDomainQueryParameters tempVar = new GetAllFromExportDomainQueryParameters(storagePool.getId(), ((StorageDomain) getEntity()) -- To view, visit http://gerrit.ovirt.org/21062 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ib177757b64090bc5066acc3d89766bb0dbc29385 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.3 Gerrit-Owner: Tomas Jelinek <tjeli...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches