Arik Hadas has uploaded a new change for review.

Change subject: core: extract disk clone creation
......................................................................

core: extract disk clone creation

Extract creation of cloned image to ImagesHandler
1. It can be considered to be a utility method for disk image
2. It can be used for create template from snapshot as well

Change-Id: If2ad5fff400942b4786a58e0210bc5b3d2b7d8b4
Signed-off-by: Arik Hadas <[email protected]>
---
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/ImagesHandler.java
2 files changed, 59 insertions(+), 52 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/28/41028/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 adc1c59..3652d97 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
@@ -2,7 +2,6 @@
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -74,12 +73,14 @@
             Guid destStorageDomainId,
             Guid diskProfileId,
             VdcActionType parentCommandType) {
-        DiskImage newDiskImage = cloneDiskImage(getVmId(),
+        DiskImage newDiskImage = ImagesHandler.cloneDiskImage(getVmId(),
                 destStorageDomainId,
                 Guid.newGuid(),
                 Guid.newGuid(),
                 diskImage,
-                diskProfileId);
+                diskProfileId,
+                getVmSnapshotId(),
+                diskInfoDestinationMap != null ? 
diskInfoDestinationMap.get(diskImage.getId()) : null);
         ImagesHandler.setDiskAlias(newDiskImage, getVm());
         MoveOrCopyImageGroupParameters parameters = 
createCopyParameters(newDiskImage,
                 srcStorageDomainId,
@@ -178,54 +179,6 @@
                 .getStorageStaticData(),
                 diskImage,
                 getReturnValue().getCanDoActionMessages());
-    }
-
-    protected DiskImage cloneDiskImage(Guid newVmId,
-                                       Guid storageDomainId,
-                                       Guid newImageGroupId,
-                                       Guid newImageGuid,
-                                       DiskImage srcDiskImage,
-                                       Guid diskProfileId) {
-
-        DiskImage clonedDiskImage = DiskImage.copyOf(srcDiskImage);
-        clonedDiskImage.setImageId(newImageGuid);
-        clonedDiskImage.setParentId(Guid.Empty);
-        clonedDiskImage.setImageTemplateId(Guid.Empty);
-        clonedDiskImage.setVmSnapshotId(getVmSnapshotId());
-        clonedDiskImage.setId(newImageGroupId);
-        clonedDiskImage.setLastModifiedDate(new Date());
-        clonedDiskImage.setvolumeFormat(srcDiskImage.getVolumeFormat());
-        clonedDiskImage.setVolumeType(srcDiskImage.getVolumeType());
-        ArrayList<Guid> storageIds = new ArrayList<Guid>();
-        storageIds.add(storageDomainId);
-        clonedDiskImage.setStorageIds(storageIds);
-        clonedDiskImage.setDiskProfileId(diskProfileId);
-
-        // If volume information was changed at client , use its volume 
information.
-        // If volume information was not changed at client - use the volume 
information of the ancestral image
-        if (diskInfoDestinationMap != null && 
diskInfoDestinationMap.containsKey(srcDiskImage.getId())) {
-            DiskImage diskImageFromClient = 
diskInfoDestinationMap.get(srcDiskImage.getId());
-            if (volumeInfoChanged(diskImageFromClient, srcDiskImage)) {
-                changeVolumeInfo(clonedDiskImage, diskImageFromClient);
-            } else {
-                DiskImage ancestorDiskImage = 
getDiskImageDao().getAncestor(srcDiskImage.getImageId());
-                changeVolumeInfo(clonedDiskImage, ancestorDiskImage);
-            }
-        } else {
-            DiskImage ancestorDiskImage = 
getDiskImageDao().getAncestor(srcDiskImage.getImageId());
-            changeVolumeInfo(clonedDiskImage, ancestorDiskImage);
-        }
-
-        return clonedDiskImage;
-    }
-
-    private boolean volumeInfoChanged(DiskImage diskImageFromClient, DiskImage 
srcDiskImage) {
-        return (diskImageFromClient.getVolumeFormat() != 
srcDiskImage.getVolumeFormat() || diskImageFromClient.getVolumeType() != 
srcDiskImage.getVolumeType());
-    }
-
-    protected void changeVolumeInfo(DiskImage clonedDiskImage, DiskImage 
diskImageFromClient) {
-        clonedDiskImage.setvolumeFormat(diskImageFromClient.getVolumeFormat());
-        clonedDiskImage.setVolumeType(diskImageFromClient.getVolumeType());
     }
 
     /**
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 7c78ba0..1e8b0b5 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
@@ -5,6 +5,7 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -32,11 +33,11 @@
 import org.ovirt.engine.core.common.businessentities.storage.BaseDisk;
 import org.ovirt.engine.core.common.businessentities.storage.CinderDisk;
 import org.ovirt.engine.core.common.businessentities.storage.Disk;
-import org.ovirt.engine.core.common.businessentities.storage.DiskStorageType;
 import org.ovirt.engine.core.common.businessentities.storage.DiskImage;
 import org.ovirt.engine.core.common.businessentities.storage.DiskImageBase;
 import org.ovirt.engine.core.common.businessentities.storage.DiskImageDynamic;
 import org.ovirt.engine.core.common.businessentities.storage.DiskLunMapId;
+import org.ovirt.engine.core.common.businessentities.storage.DiskStorageType;
 import org.ovirt.engine.core.common.businessentities.storage.ImageStatus;
 import 
org.ovirt.engine.core.common.businessentities.storage.ImageStorageDomainMap;
 import org.ovirt.engine.core.common.businessentities.storage.LUNs;
@@ -54,6 +55,7 @@
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.compat.TransactionScopeOption;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
+import org.ovirt.engine.core.dao.DiskImageDAO;
 import org.ovirt.engine.core.utils.JsonHelper;
 import org.ovirt.engine.core.utils.collections.MultiValueMapUtils;
 import org.ovirt.engine.core.utils.ovf.OvfManager;
@@ -909,4 +911,56 @@
         return diskDummies;
     }
 
+    protected static DiskImage cloneDiskImage(Guid newVmId,
+            Guid storageDomainId,
+            Guid newImageGroupId,
+            Guid newImageGuid,
+            DiskImage srcDiskImage,
+            Guid diskProfileId,
+            Guid snapshotId,
+            DiskImage diskImageFromClient) {
+
+        DiskImage clonedDiskImage = DiskImage.copyOf(srcDiskImage);
+        clonedDiskImage.setImageId(newImageGuid);
+        clonedDiskImage.setParentId(Guid.Empty);
+        clonedDiskImage.setImageTemplateId(Guid.Empty);
+        clonedDiskImage.setVmSnapshotId(snapshotId);
+        clonedDiskImage.setId(newImageGroupId);
+        clonedDiskImage.setLastModifiedDate(new Date());
+        clonedDiskImage.setvolumeFormat(srcDiskImage.getVolumeFormat());
+        clonedDiskImage.setVolumeType(srcDiskImage.getVolumeType());
+        ArrayList<Guid> storageIds = new ArrayList<Guid>();
+        storageIds.add(storageDomainId);
+        clonedDiskImage.setStorageIds(storageIds);
+        clonedDiskImage.setDiskProfileId(diskProfileId);
+
+        // If volume information was changed at client , use its volume 
information.
+        // If volume information was not changed at client - use the volume 
information of the ancestral image
+        if (diskImageFromClient != null) {
+            if (volumeInfoChanged(diskImageFromClient, srcDiskImage)) {
+                changeVolumeInfo(clonedDiskImage, diskImageFromClient);
+            } else {
+                DiskImage ancestorDiskImage = 
getDiskImageDao().getAncestor(srcDiskImage.getImageId());
+                changeVolumeInfo(clonedDiskImage, ancestorDiskImage);
+            }
+        } else {
+            DiskImage ancestorDiskImage = 
getDiskImageDao().getAncestor(srcDiskImage.getImageId());
+            changeVolumeInfo(clonedDiskImage, ancestorDiskImage);
+        }
+
+        return clonedDiskImage;
+    }
+
+    private static DiskImageDAO getDiskImageDao() {
+        return DbFacade.getInstance().getDiskImageDao();
+    }
+
+    private static boolean volumeInfoChanged(DiskImage diskImageFromClient, 
DiskImage srcDiskImage) {
+        return (diskImageFromClient.getVolumeFormat() != 
srcDiskImage.getVolumeFormat() || diskImageFromClient.getVolumeType() != 
srcDiskImage.getVolumeType());
+    }
+
+    protected static void changeVolumeInfo(DiskImage clonedDiskImage, 
DiskImage diskImageFromClient) {
+        clonedDiskImage.setvolumeFormat(diskImageFromClient.getVolumeFormat());
+        clonedDiskImage.setVolumeType(diskImageFromClient.getVolumeType());
+    }
 }


-- 
To view, visit https://gerrit.ovirt.org/41028
To unsubscribe, visit https://gerrit.ovirt.org/settings

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

Reply via email to