Maor Lipchuk has uploaded a new change for review.

Change subject: core:Fix NPE when import VM with clone
......................................................................

core:Fix NPE when import VM with clone

The following patch should fix an NPE which occurs when importing a
cloned VM or a cloned VM template, which does not exists in the Data
Center.

This exception is caused when trying to copy each disk, and use
the property WipeAfterDelete from the image in the DB,
since the disk does not exists in the DB, we get an NPE.

As part of the fix, the property WipeAfterDelete has been initialized
in the command parameters on each command which executed the
MoveOrCopyImageGroupCommand.

Change-Id: I47b8f82a2bd19320d9953df54f9aa16e4ef9200f
Signed-off-by: Maor Lipchuk <[email protected]>
Related to Bug-Url: https://bugzilla.redhat.com/862303
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmAndCloneImageCommand.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/ExportVmTemplateCommand.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/ImportVmTemplateCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyImageGroupCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyTemplateCommand.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/MoveOrCopyImageGroupParameters.java
9 files changed, 18 insertions(+), 9 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/76/9176/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmAndCloneImageCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmAndCloneImageCommand.java
index 1bc2cc4..6ff0858 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmAndCloneImageCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmAndCloneImageCommand.java
@@ -98,6 +98,7 @@
                         srcImageId,
                         diskImage.getId(),
                         diskImage.getImageId(),
+                        diskImage.isWipeAfterDelete(),
                         diskImage.getstorage_ids().get(0),
                         ImageOperation.Copy);
         params.setAddImageDomainMapping(false);
@@ -106,7 +107,6 @@
         params.setVolumeType(diskImage.getvolume_type());
         params.setUseCopyCollapse(true);
         params.setSourceDomainId(srcStorageDomainId);
-        params.setWipeAfterDelete(diskImage.isWipeAfterDelete());
         params.setParentParameters(getParameters());
         params.setParentCommand(parentCommandType);
         return params;
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 31acb5d..038d48f 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
@@ -279,7 +279,7 @@
     protected void moveOrCopyAllImageGroups(Guid containerID, 
Iterable<DiskImage> disks) {
         for (DiskImage disk : disks) {
             MoveOrCopyImageGroupParameters tempVar = new 
MoveOrCopyImageGroupParameters(containerID, disk
-                    .getId(), disk.getImageId(), 
getParameters().getStorageDomainId(),
+                    .getId(), disk.getImageId(), 
getParameters().getStorageDomainId(), disk.isWipeAfterDelete(),
                     getMoveOrCopyImageOperation());
             tempVar.setParentCommand(getActionType());
             tempVar.setEntityId(getParameters().getEntityId());
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmTemplateCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmTemplateCommand.java
index b211e49..81eafab 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmTemplateCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmTemplateCommand.java
@@ -46,7 +46,7 @@
                     // the ovf so the import
                     // will set the original format
                     MoveOrCopyImageGroupParameters p = new 
MoveOrCopyImageGroupParameters(containerID, disk
-                            .getId(), disk.getImageId(), 
getParameters().getStorageDomainId(),
+                            .getId(), disk.getImageId(), 
getParameters().getStorageDomainId(), disk.isWipeAfterDelete(),
                             getMoveOrCopyImageOperation());
                     p.setParentCommand(getActionType());
                     p.setParentParameters(getParameters());
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 8d373c9..b88ee6f 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
@@ -552,6 +552,7 @@
                     imageGuidList.get(i),
                     disk.getId(),
                     disk.getImageId(),
+                    disk.isWipeAfterDelete(),
                     destinationDomain, getMoveOrCopyImageOperation());
             p.setParentCommand(getActionType());
             p.setUseCopyCollapse(getParameters().getCopyCollapse());
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateCommand.java
index 5b53afd..4f61541 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateCommand.java
@@ -284,6 +284,7 @@
                                     imageGuidList.get(i),
                                     disk.getId(),
                                     disk.getImageId(),
+                                    disk.isWipeAfterDelete(),
                                     destinationDomain,
                                     getMoveOrCopyImageOperation());
 
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommand.java
index a75d06a..7df9af9 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommand.java
@@ -331,6 +331,7 @@
         getParameters().setDestImageGroupId(getImageGroupId());
         getParameters().setVolumeFormat(getDiskImage().getvolume_format());
         getParameters().setVolumeType(getDiskImage().getvolume_type());
+        getParameters().setWipeAfterDelete(getDiskImage().isWipeAfterDelete());
         getParameters().setCopyVolumeType(CopyVolumeType.SharedVol);
         getParameters().setParentCommand(getActionType());
         getParameters().setParentParameters(getParameters());
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyImageGroupCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyImageGroupCommand.java
index c3e07c5..03333fe 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyImageGroupCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyImageGroupCommand.java
@@ -79,7 +79,7 @@
                             getParameters().getVolumeFormat(),
                             getParameters()
                                     .getVolumeType(),
-                            getImage().isWipeAfterDelete(),
+                            getParameters().getWipeAfterDelete(),
                             getParameters()
                                     .getForceOverride(),
                             
getStoragePool().getcompatibility_version().toString()));
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 2401cde..cca4d29 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
@@ -176,9 +176,13 @@
             @Override
             public Void runInTransaction() {
                 for (DiskImage disk : disks) {
-                    MoveOrCopyImageGroupParameters p = new 
MoveOrCopyImageGroupParameters(containerID, disk
-                            .getId(), disk.getImageId(), 
getParameters().getStorageDomainId(),
-                            getMoveOrCopyImageOperation());
+                    MoveOrCopyImageGroupParameters p =
+                            new MoveOrCopyImageGroupParameters(containerID,
+                                    disk.getId(),
+                                    disk.getImageId(),
+                                    getParameters().getStorageDomainId(),
+                                    disk.isWipeAfterDelete(),
+                                    getMoveOrCopyImageOperation());
                     p.setParentCommand(getActionType());
                     p.setEntityId(getParameters().getEntityId());
                     p.setAddImageDomainMapping(getMoveOrCopyImageOperation() 
== ImageOperation.Copy);
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/MoveOrCopyImageGroupParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/MoveOrCopyImageGroupParameters.java
index 039baf8..3717f03 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/MoveOrCopyImageGroupParameters.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/MoveOrCopyImageGroupParameters.java
@@ -33,8 +33,9 @@
     }
 
     public MoveOrCopyImageGroupParameters(Guid containerId, Guid imageGroupId, 
Guid leafSnapshotID,
-                                          Guid storageDomainId, ImageOperation 
operation) {
+            Guid storageDomainId, boolean isWipeAfterDelete, ImageOperation 
operation) {
         super(leafSnapshotID, containerId);
+        setWipeAfterDelete(isWipeAfterDelete);
         setStorageDomainId(storageDomainId);
         setImageGroupID(imageGroupId);
         setOperation(operation);
@@ -51,8 +52,9 @@
             Guid imageId,
             Guid destImageGroupId,
             Guid destImageId,
+            boolean wipeAfterDelete,
             Guid storageDomainId, ImageOperation operation) {
-        this(containerId, imageGroupId, imageId, storageDomainId, operation);
+        this(containerId, imageGroupId, imageId, storageDomainId, 
wipeAfterDelete, operation);
         setDestImageGroupId(destImageGroupId);
         setDestinationImageId(destImageId);
     }


--
To view, visit http://gerrit.ovirt.org/9176
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I47b8f82a2bd19320d9953df54f9aa16e4ef9200f
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Maor Lipchuk <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to