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

Reply via email to