cloudstack-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From edi...@apache.org
Subject git commit: updated refs/heads/object_store to 5af888c
Date Wed, 22 May 2013 20:46:27 GMT
Updated Branches:
  refs/heads/object_store 01e36538a -> 5af888c67


add image format in volumevo


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/5af888c6
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/5af888c6
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/5af888c6

Branch: refs/heads/object_store
Commit: 5af888c67a44fa583890ba04c476d2c2cea0ece3
Parents: 01e3653
Author: Edison Su <sudison@gmail.com>
Authored: Wed May 22 13:37:44 2013 -0700
Committer: Edison Su <sudison@gmail.com>
Committed: Wed May 22 13:38:11 2013 -0700

----------------------------------------------------------------------
 api/src/com/cloud/storage/Storage.java             |   13 +-
 api/src/com/cloud/storage/Volume.java              |    1 +
 .../storage/datastore/db/VolumeDataStoreVO.java    |   12 -
 .../cloudstack/storage/to/VolumeObjectTO.java      |   20 +-
 engine/schema/src/com/cloud/storage/VolumeVO.java  |   11 +
 .../cloudstack/storage/test/SnapshotTest.java      |   24 +-
 .../apache/cloudstack/storage/test/VolumeTest.java |   32 +-
 .../cloudstack/storage/test/VolumeTestVmware.java  |   32 +-
 .../cloudstack/storage/test/volumeServiceTest.java |   15 +-
 .../cloudstack/storage/volume/db/VolumeDao2.java   |   82 ---
 .../storage/volume/db/VolumeDao2Impl.java          |  440 ---------------
 .../cloudstack/storage/volume/db/VolumeVO.java     |  418 --------------
 .../cloudstack/storage/volume/VolumeObject.java    |    6 +
 .../src/com/cloud/storage/VolumeManagerImpl.java   |   46 +-
 .../resource/NfsSecondaryStorageResource.java      |    2 +-
 setup/db/db/schema-410to420.sql                    |    2 +
 16 files changed, 109 insertions(+), 1047 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5af888c6/api/src/com/cloud/storage/Storage.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/storage/Storage.java b/api/src/com/cloud/storage/Storage.java
index c130fe2..c50bd7e 100755
--- a/api/src/com/cloud/storage/Storage.java
+++ b/api/src/com/cloud/storage/Storage.java
@@ -21,13 +21,13 @@ import java.util.List;
 
 public class Storage {
     public static enum ImageFormat {
-        QCOW2(true, true, false),
-        RAW(false, false, false),
-        VHD(true, true, true),
-        ISO(false, false, false),
+        QCOW2(true, true, false, "qcow2"),
+        RAW(false, false, false, "raw"),
+        VHD(true, true, true, "vhd"),
+        ISO(false, false, false, "iso"),
         OVA(true, true, true, "ova"),
-        BAREMETAL(false, false, false),
-        TAR(false, false, false);
+        BAREMETAL(false, false, false, "BAREMETAL"),
+        TAR(false, false, false, "tar");
 
         private final boolean thinProvisioned;
         private final boolean supportSparse;
@@ -66,6 +66,7 @@ public class Storage {
 
             return fileExtension;
         }
+        
     }
 
     public static enum FileSystem {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5af888c6/api/src/com/cloud/storage/Volume.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/storage/Volume.java b/api/src/com/cloud/storage/Volume.java
index 4903594..5d11ba9 100755
--- a/api/src/com/cloud/storage/Volume.java
+++ b/api/src/com/cloud/storage/Volume.java
@@ -173,4 +173,5 @@ public interface Volume extends ControlledEntity, Identity, InternalIdentity, Ba
 	 * @param reserv
 	 */
 	void setReservationId(String reserv);
+	Storage.ImageFormat getFormat();
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5af888c6/engine/api/src/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreVO.java
----------------------------------------------------------------------
diff --git a/engine/api/src/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreVO.java b/engine/api/src/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreVO.java
index c722bbf..2d72922 100755
--- a/engine/api/src/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreVO.java
+++ b/engine/api/src/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreVO.java
@@ -97,9 +97,6 @@ public class VolumeDataStoreVO implements StateObject<ObjectInDataStoreStateMach
 	@Column (name="url")
 	private String downloadUrl;
 
-	@Column(name="format")
-    private Storage.ImageFormat format;
-
     @Column(name="destroyed")
     boolean destroyed = false;
 
@@ -222,7 +219,6 @@ public class VolumeDataStoreVO implements StateObject<ObjectInDataStoreStateMach
 		this.installPath = installPath;
 		this.setDownloadUrl(downloadUrl);
 		this.checksum = checksum;
-		this.format = format;
 	}
 
 	public VolumeDataStoreVO() {
@@ -308,14 +304,6 @@ public class VolumeDataStoreVO implements StateObject<ObjectInDataStoreStateMach
 		return downloadUrl;
 	}
 
-    public Storage.ImageFormat getFormat() {
-		return format;
-	}
-
-	public void setFormat(Storage.ImageFormat format) {
-		this.format = format;
-	}
-
 	public long getVolumeSize() {
 	    return -1;
 	}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5af888c6/engine/api/src/org/apache/cloudstack/storage/to/VolumeObjectTO.java
----------------------------------------------------------------------
diff --git a/engine/api/src/org/apache/cloudstack/storage/to/VolumeObjectTO.java b/engine/api/src/org/apache/cloudstack/storage/to/VolumeObjectTO.java
index e8bc176..96cfbc7 100644
--- a/engine/api/src/org/apache/cloudstack/storage/to/VolumeObjectTO.java
+++ b/engine/api/src/org/apache/cloudstack/storage/to/VolumeObjectTO.java
@@ -17,18 +17,16 @@
 package org.apache.cloudstack.storage.to;
 
 import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
-import org.apache.cloudstack.engine.subsystem.api.storage.disktype.DiskFormat;
-import org.apache.cloudstack.engine.subsystem.api.storage.type.VolumeType;
 
 import com.cloud.agent.api.to.DataObjectType;
 import com.cloud.agent.api.to.DataStoreTO;
 import com.cloud.agent.api.to.DataTO;
+import com.cloud.storage.Storage;
 import com.cloud.storage.Volume;
 
 public class VolumeObjectTO implements DataTO {
     private String uuid;
     private Volume.Type volumeType;
-    private DiskFormat diskType;
     private DataStoreTO dataStore;
     private String name;
     private long size;
@@ -37,6 +35,7 @@ public class VolumeObjectTO implements DataTO {
     private String vmName;
     private long accountId;
     private String chainInfo;
+    private Storage.ImageFormat format;
     private long id;
 
     public VolumeObjectTO() {
@@ -59,6 +58,7 @@ public class VolumeObjectTO implements DataTO {
         this.volumeType = volume.getVolumeType();
         this.name = volume.getName();
         this.setId(volume.getId());
+        this.format = volume.getFormat();
     }
 
     public String getUuid() {
@@ -72,11 +72,7 @@ public class VolumeObjectTO implements DataTO {
     public Volume.Type getVolumeType() {
         return this.volumeType;
     }
-
-    public DiskFormat getDiskType() {
-        return this.diskType;
-    }
-
+   
     public DataStoreTO getDataStore() {
         return this.dataStore;
     }
@@ -153,5 +149,13 @@ public class VolumeObjectTO implements DataTO {
 		this.id = id;
 	}
 
+	public Storage.ImageFormat getFormat() {
+		return format;
+	}
+
+	public void setFormat(Storage.ImageFormat format) {
+		this.format = format;
+	}
+
 
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5af888c6/engine/schema/src/com/cloud/storage/VolumeVO.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/storage/VolumeVO.java b/engine/schema/src/com/cloud/storage/VolumeVO.java
index 1699afd..a230991 100755
--- a/engine/schema/src/com/cloud/storage/VolumeVO.java
+++ b/engine/schema/src/com/cloud/storage/VolumeVO.java
@@ -130,6 +130,9 @@ public class VolumeVO implements Volume {
 
     @Column(name = "uuid")
     String uuid;
+    
+    @Column(name="format")
+    private Storage.ImageFormat format;
 
     @Column(name="display_volume", updatable=true, nullable=false)
     protected boolean displayVolume;
@@ -463,4 +466,12 @@ public class VolumeVO implements Volume {
     public void setDisplayVolume(boolean displayVolume) {
         this.displayVolume = displayVolume;
     }
+
+	public Storage.ImageFormat getFormat() {
+		return format;
+	}
+
+	public void setFormat(Storage.ImageFormat format) {
+		this.format = format;
+	}
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5af888c6/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/SnapshotTest.java
----------------------------------------------------------------------
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/SnapshotTest.java b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/SnapshotTest.java
index 2739b45..9b6204d 100644
--- a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/SnapshotTest.java
+++ b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/SnapshotTest.java
@@ -32,6 +32,7 @@ import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProvider;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProviderManager;
 import org.apache.cloudstack.engine.subsystem.api.storage.EndPointSelector;
+import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.Event;
 import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotDataFactory;
 import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo;
 import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotService;
@@ -42,7 +43,6 @@ import org.apache.cloudstack.engine.subsystem.api.storage.TemplateService;
 import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory;
 import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
 import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService;
-import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.Event;
 import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService.VolumeApiResult;
 import org.apache.cloudstack.engine.subsystem.api.storage.type.RootDisk;
 import org.apache.cloudstack.framework.async.AsyncCallFuture;
@@ -56,8 +56,6 @@ import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
 import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
 import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao;
 import org.apache.cloudstack.storage.to.TemplateObjectTO;
-import org.apache.cloudstack.storage.volume.db.VolumeDao2;
-import org.apache.cloudstack.storage.volume.db.VolumeVO;
 import org.mockito.Mockito;
 import org.springframework.test.context.ContextConfiguration;
 import org.testng.AssertJUnit;
@@ -66,18 +64,18 @@ import org.testng.annotations.Test;
 import com.cloud.agent.AgentManager;
 import com.cloud.agent.api.Command;
 import com.cloud.dc.ClusterVO;
+import com.cloud.dc.DataCenter.NetworkType;
 import com.cloud.dc.DataCenterVO;
 import com.cloud.dc.HostPodVO;
-import com.cloud.dc.DataCenter.NetworkType;
 import com.cloud.dc.dao.ClusterDao;
 import com.cloud.dc.dao.DataCenterDao;
 import com.cloud.dc.dao.HostPodDao;
 import com.cloud.host.Host;
-import com.cloud.host.HostVO;
 import com.cloud.host.Host.Type;
+import com.cloud.host.HostVO;
 import com.cloud.host.dao.HostDao;
-import com.cloud.hypervisor.HypervisorGuruManager;
 import com.cloud.hypervisor.Hypervisor.HypervisorType;
+import com.cloud.hypervisor.HypervisorGuruManager;
 import com.cloud.org.Cluster.ClusterType;
 import com.cloud.org.Managed.ManagedState;
 import com.cloud.resource.ResourceManager;
@@ -87,13 +85,16 @@ import com.cloud.storage.ScopeType;
 import com.cloud.storage.Snapshot;
 import com.cloud.storage.SnapshotVO;
 import com.cloud.storage.Storage;
-import com.cloud.storage.StoragePoolStatus;
-import com.cloud.storage.VMTemplateVO;
 import com.cloud.storage.Storage.ImageFormat;
 import com.cloud.storage.Storage.StoragePoolType;
 import com.cloud.storage.Storage.TemplateType;
+import com.cloud.storage.StoragePoolStatus;
+import com.cloud.storage.VMTemplateVO;
+import com.cloud.storage.Volume;
+import com.cloud.storage.VolumeVO;
 import com.cloud.storage.dao.SnapshotDao;
 import com.cloud.storage.dao.VMTemplateDao;
+import com.cloud.storage.dao.VolumeDao;
 import com.cloud.utils.component.ComponentContext;
 
 @ContextConfiguration(locations={"classpath:/storageContext.xml"})
@@ -116,8 +117,6 @@ public class SnapshotTest extends CloudStackTestNGBase {
     @Inject
     VMTemplateDao imageDataDao;
     @Inject
-    VolumeDao2 volumeDao;
-    @Inject
     HostPodDao podDao;
     @Inject
     ClusterDao clusterDao;
@@ -152,6 +151,8 @@ public class SnapshotTest extends CloudStackTestNGBase {
     SnapshotDao snapshotDao;
     @Inject
     EndPointSelector epSelector;
+    @Inject
+    VolumeDao volumeDao;
 
     long primaryStoreId;
     VMTemplateVO image;
@@ -332,7 +333,8 @@ public class SnapshotTest extends CloudStackTestNGBase {
     }
 
     private VolumeVO createVolume(Long templateId, long dataStoreId) {
-        VolumeVO volume = new VolumeVO(1000, new RootDisk().toString(), UUID.randomUUID().toString(), templateId);
+    	
+        VolumeVO volume = new VolumeVO(Volume.Type.DATADISK, UUID.randomUUID().toString(), this.dcId, 1L, 1L, 1L, 1000);
         volume.setDataCenterId(this.dcId);
         volume.setPoolId(dataStoreId);
         volume = volumeDao.persist(volume);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5af888c6/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/VolumeTest.java
----------------------------------------------------------------------
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/VolumeTest.java b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/VolumeTest.java
index 76ce404..ab3475f 100644
--- a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/VolumeTest.java
+++ b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/VolumeTest.java
@@ -20,34 +20,28 @@ package org.apache.cloudstack.storage.test;
 
 import java.net.URI;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 import java.util.UUID;
 import java.util.concurrent.ExecutionException;
 
 import javax.inject.Inject;
 
-import org.apache.cloudstack.engine.subsystem.api.storage.ClusterScope;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
-import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreLifeCycle;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProvider;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProviderManager;
-import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
 import org.apache.cloudstack.engine.subsystem.api.storage.EndPointSelector;
 import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.Event;
-import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService.VolumeApiResult;
-import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory;
-import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
-import org.apache.cloudstack.engine.subsystem.api.storage.type.RootDisk;
 import org.apache.cloudstack.engine.subsystem.api.storage.TemplateDataFactory;
 import org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo;
 import org.apache.cloudstack.engine.subsystem.api.storage.TemplateService;
+import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory;
+import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
 import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService;
+import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService.VolumeApiResult;
+import org.apache.cloudstack.engine.subsystem.api.storage.type.RootDisk;
 import org.apache.cloudstack.framework.async.AsyncCallFuture;
-import org.apache.cloudstack.storage.LocalHostEndpoint;
 import org.apache.cloudstack.storage.RemoteHostEndPoint;
 import org.apache.cloudstack.storage.command.CopyCmdAnswer;
 import org.apache.cloudstack.storage.datastore.db.ImageStoreDao;
@@ -55,10 +49,7 @@ import org.apache.cloudstack.storage.datastore.db.ImageStoreVO;
 import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
 import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
 import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao;
-import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO;
 import org.apache.cloudstack.storage.to.TemplateObjectTO;
-import org.apache.cloudstack.storage.volume.db.VolumeDao2;
-import org.apache.cloudstack.storage.volume.db.VolumeVO;
 import org.mockito.Mockito;
 import org.springframework.test.context.ContextConfiguration;
 import org.testng.AssertJUnit;
@@ -67,9 +58,9 @@ import org.testng.annotations.Test;
 import com.cloud.agent.AgentManager;
 import com.cloud.agent.api.Command;
 import com.cloud.dc.ClusterVO;
+import com.cloud.dc.DataCenter.NetworkType;
 import com.cloud.dc.DataCenterVO;
 import com.cloud.dc.HostPodVO;
-import com.cloud.dc.DataCenter.NetworkType;
 import com.cloud.dc.dao.ClusterDao;
 import com.cloud.dc.dao.DataCenterDao;
 import com.cloud.dc.dao.HostPodDao;
@@ -78,7 +69,6 @@ import com.cloud.host.Host;
 import com.cloud.host.Host.Type;
 import com.cloud.host.HostVO;
 import com.cloud.host.dao.HostDao;
-import com.cloud.hypervisor.Hypervisor.HypervisorType;
 import com.cloud.hypervisor.HypervisorGuruManager;
 import com.cloud.org.Cluster.ClusterType;
 import com.cloud.org.Managed.ManagedState;
@@ -87,13 +77,15 @@ import com.cloud.resource.ResourceState;
 import com.cloud.storage.DataStoreRole;
 import com.cloud.storage.ScopeType;
 import com.cloud.storage.Storage;
+import com.cloud.storage.Volume;
 import com.cloud.storage.Storage.ImageFormat;
-import com.cloud.storage.StoragePoolStatus;
-import com.cloud.storage.VMTemplateStorageResourceAssoc.Status;
-import com.cloud.storage.VMTemplateVO;
 import com.cloud.storage.Storage.StoragePoolType;
 import com.cloud.storage.Storage.TemplateType;
+import com.cloud.storage.StoragePoolStatus;
+import com.cloud.storage.VMTemplateVO;
+import com.cloud.storage.VolumeVO;
 import com.cloud.storage.dao.VMTemplateDao;
+import com.cloud.storage.dao.VolumeDao;
 import com.cloud.utils.component.ComponentContext;
 
 @ContextConfiguration(locations={"classpath:/storageContext.xml"})
@@ -116,7 +108,7 @@ public class VolumeTest extends CloudStackTestNGBase {
     @Inject
     VMTemplateDao imageDataDao;
     @Inject
-    VolumeDao2 volumeDao;
+    VolumeDao volumeDao;
     @Inject
     HostPodDao podDao;
     @Inject
@@ -314,7 +306,7 @@ public class VolumeTest extends CloudStackTestNGBase {
     }
 
     private VolumeVO createVolume(Long templateId, long dataStoreId) {
-        VolumeVO volume = new VolumeVO(1000, new RootDisk().toString(), UUID.randomUUID().toString(), templateId);
+        VolumeVO volume = new VolumeVO(Volume.Type.DATADISK, UUID.randomUUID().toString(), this.dcId, 1L, 1L, 1L, 1000);;
         volume.setPoolId(dataStoreId);
         volume = volumeDao.persist(volume);
         return volume;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5af888c6/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/VolumeTestVmware.java
----------------------------------------------------------------------
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/VolumeTestVmware.java b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/VolumeTestVmware.java
index 48f1a2a..bd597c2 100644
--- a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/VolumeTestVmware.java
+++ b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/VolumeTestVmware.java
@@ -20,34 +20,27 @@ package org.apache.cloudstack.storage.test;
 
 import java.net.URI;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 import java.util.UUID;
 import java.util.concurrent.ExecutionException;
 
 import javax.inject.Inject;
 
-import org.apache.cloudstack.engine.subsystem.api.storage.ClusterScope;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
-import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreLifeCycle;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
-import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProvider;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProviderManager;
-import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
 import org.apache.cloudstack.engine.subsystem.api.storage.EndPointSelector;
 import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.Event;
-import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService.VolumeApiResult;
-import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory;
-import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
-import org.apache.cloudstack.engine.subsystem.api.storage.type.RootDisk;
 import org.apache.cloudstack.engine.subsystem.api.storage.TemplateDataFactory;
 import org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo;
 import org.apache.cloudstack.engine.subsystem.api.storage.TemplateService;
+import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory;
+import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
 import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService;
+import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService.VolumeApiResult;
+import org.apache.cloudstack.engine.subsystem.api.storage.type.RootDisk;
 import org.apache.cloudstack.framework.async.AsyncCallFuture;
-import org.apache.cloudstack.storage.LocalHostEndpoint;
 import org.apache.cloudstack.storage.RemoteHostEndPoint;
 import org.apache.cloudstack.storage.command.CopyCmdAnswer;
 import org.apache.cloudstack.storage.datastore.db.ImageStoreDao;
@@ -55,10 +48,7 @@ import org.apache.cloudstack.storage.datastore.db.ImageStoreVO;
 import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
 import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
 import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao;
-import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO;
 import org.apache.cloudstack.storage.to.TemplateObjectTO;
-import org.apache.cloudstack.storage.volume.db.VolumeDao2;
-import org.apache.cloudstack.storage.volume.db.VolumeVO;
 import org.mockito.Mockito;
 import org.springframework.test.context.ContextConfiguration;
 import org.testng.AssertJUnit;
@@ -68,9 +58,9 @@ import com.cloud.agent.AgentManager;
 import com.cloud.dc.ClusterDetailsDao;
 import com.cloud.dc.ClusterDetailsVO;
 import com.cloud.dc.ClusterVO;
+import com.cloud.dc.DataCenter.NetworkType;
 import com.cloud.dc.DataCenterVO;
 import com.cloud.dc.HostPodVO;
-import com.cloud.dc.DataCenter.NetworkType;
 import com.cloud.dc.dao.ClusterDao;
 import com.cloud.dc.dao.DataCenterDao;
 import com.cloud.dc.dao.HostPodDao;
@@ -87,12 +77,14 @@ import com.cloud.resource.ResourceState;
 import com.cloud.storage.DataStoreRole;
 import com.cloud.storage.ScopeType;
 import com.cloud.storage.Storage;
-import com.cloud.storage.StoragePoolStatus;
-import com.cloud.storage.VMTemplateStorageResourceAssoc.Status;
-import com.cloud.storage.VMTemplateVO;
+import com.cloud.storage.Volume;
 import com.cloud.storage.Storage.StoragePoolType;
 import com.cloud.storage.Storage.TemplateType;
+import com.cloud.storage.StoragePoolStatus;
+import com.cloud.storage.VMTemplateVO;
+import com.cloud.storage.VolumeVO;
 import com.cloud.storage.dao.VMTemplateDao;
+import com.cloud.storage.dao.VolumeDao;
 import com.cloud.utils.component.ComponentContext;
 
 @ContextConfiguration(locations={"classpath:/storageContext.xml"})
@@ -115,7 +107,7 @@ public class VolumeTestVmware extends CloudStackTestNGBase {
     @Inject
     VMTemplateDao imageDataDao;
     @Inject
-    VolumeDao2 volumeDao;
+    VolumeDao volumeDao;
     @Inject
     HostPodDao podDao;
     @Inject
@@ -319,7 +311,7 @@ public class VolumeTestVmware extends CloudStackTestNGBase {
     }
 
     private VolumeVO createVolume(Long templateId, long dataStoreId) {
-        VolumeVO volume = new VolumeVO(1000, new RootDisk().toString(), UUID.randomUUID().toString(), templateId);
+        VolumeVO volume = new VolumeVO(Volume.Type.DATADISK, UUID.randomUUID().toString(), this.dcId, 1L, 1L, 1L, 1000);;
         volume.setPoolId(dataStoreId);
         volume = volumeDao.persist(volume);
         return volume;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5af888c6/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/volumeServiceTest.java
----------------------------------------------------------------------
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/volumeServiceTest.java b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/volumeServiceTest.java
index 3b915dc..b43a107 100644
--- a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/volumeServiceTest.java
+++ b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/volumeServiceTest.java
@@ -21,7 +21,6 @@ package org.apache.cloudstack.storage.test;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.ArrayList;
-import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -39,9 +38,8 @@ import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProviderManag
 import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
 import org.apache.cloudstack.engine.subsystem.api.storage.EndPointSelector;
 import org.apache.cloudstack.engine.subsystem.api.storage.TemplateDataFactory;
-import org.apache.cloudstack.engine.subsystem.api.storage.TemplateService;
 import org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo;
-import org.apache.cloudstack.engine.subsystem.api.storage.TemplateService.TemplateApiResult;
+import org.apache.cloudstack.engine.subsystem.api.storage.TemplateService;
 import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory;
 import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
 import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService;
@@ -49,13 +47,10 @@ import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService.VolumeAp
 import org.apache.cloudstack.engine.subsystem.api.storage.type.RootDisk;
 import org.apache.cloudstack.framework.async.AsyncCallFuture;
 import org.apache.cloudstack.storage.RemoteHostEndPoint;
-import org.apache.cloudstack.storage.command.CommandResult;
 import org.apache.cloudstack.storage.datastore.db.ImageStoreDao;
 import org.apache.cloudstack.storage.datastore.db.ImageStoreVO;
 import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
 import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
-import org.apache.cloudstack.storage.volume.db.VolumeDao2;
-import org.apache.cloudstack.storage.volume.db.VolumeVO;
 import org.mockito.Mockito;
 import org.springframework.test.context.ContextConfiguration;
 import org.testng.Assert;
@@ -79,11 +74,13 @@ import com.cloud.resource.ResourceState;
 import com.cloud.storage.DataStoreRole;
 import com.cloud.storage.ScopeType;
 import com.cloud.storage.Storage;
+import com.cloud.storage.Volume;
 import com.cloud.storage.Storage.StoragePoolType;
 import com.cloud.storage.Storage.TemplateType;
-import com.cloud.storage.VMTemplateStorageResourceAssoc;
 import com.cloud.storage.VMTemplateVO;
+import com.cloud.storage.VolumeVO;
 import com.cloud.storage.dao.VMTemplateDao;
+import com.cloud.storage.dao.VolumeDao;
 import com.cloud.utils.component.ComponentContext;
 
 @ContextConfiguration(locations={"classpath:/storageContext.xml"})
@@ -97,7 +94,7 @@ public class volumeServiceTest extends CloudStackTestNGBase {
 	@Inject
 	VMTemplateDao imageDataDao;
 	@Inject
-	VolumeDao2 volumeDao;
+	VolumeDao volumeDao;
 	@Inject
 	HostDao hostDao;
 	@Inject
@@ -359,7 +356,7 @@ public class volumeServiceTest extends CloudStackTestNGBase {
 	}
 
 	private VolumeVO createVolume(Long templateId, long dataStoreId) {
-		VolumeVO volume = new VolumeVO(1000, new RootDisk().toString(), UUID.randomUUID().toString(), templateId);
+		VolumeVO volume = new VolumeVO(Volume.Type.DATADISK, UUID.randomUUID().toString(), this.dcId, 1L, 1L, 1L, 1000);
 		volume.setPoolId(dataStoreId);
 		volume = volumeDao.persist(volume);
 		return volume;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5af888c6/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDao2.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDao2.java b/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDao2.java
deleted file mode 100644
index b0c8fad..0000000
--- a/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDao2.java
+++ /dev/null
@@ -1,82 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package org.apache.cloudstack.storage.volume.db;
-
-import java.util.List;
-
-import org.apache.cloudstack.engine.subsystem.api.storage.type.VolumeType;
-import org.apache.cloudstack.storage.volume.VolumeEvent;
-
-import com.cloud.hypervisor.Hypervisor.HypervisorType;
-import com.cloud.storage.Storage.ImageFormat;
-import com.cloud.storage.Volume;
-import com.cloud.utils.Pair;
-import com.cloud.utils.db.GenericDao;
-import com.cloud.utils.fsm.StateDao;
-
-public interface VolumeDao2 extends GenericDao<VolumeVO, Long>, StateDao<Volume.State, Volume.Event, VolumeVO> {
-
-    List<VolumeVO> findDetachedByAccount(long accountId);
-
-    List<VolumeVO> findByAccount(long accountId);
-
-    Pair<Long, Long> getCountAndTotalByPool(long poolId);
-
-    Pair<Long, Long> getNonDestroyedCountAndTotalByPool(long poolId);
-
-    List<VolumeVO> findByInstance(long id);
-
-    List<VolumeVO> findByInstanceAndType(long id, VolumeType vType);
-
-    List<VolumeVO> findByInstanceIdDestroyed(long vmId);
-
-    List<VolumeVO> findByAccountAndPod(long accountId, long podId);
-
-    List<VolumeVO> findByTemplateAndZone(long templateId, long zoneId);
-
-    void deleteVolumesByInstance(long instanceId);
-
-    void attachVolume(long volumeId, long vmId, long deviceId);
-
-    void detachVolume(long volumeId);
-
-    boolean isAnyVolumeActivelyUsingTemplateOnPool(long templateId, long poolId);
-
-    List<VolumeVO> findCreatedByInstance(long id);
-
-    List<VolumeVO> findByPoolId(long poolId);
-
-    List<VolumeVO> findByInstanceAndDeviceId(long instanceId, long deviceId);
-
-    List<VolumeVO> findUsableVolumesForInstance(long instanceId);
-
-    Long countAllocatedVolumesForAccount(long accountId);
-
-    HypervisorType getHypervisorType(long volumeId);
-
-    List<VolumeVO> listVolumesToBeDestroyed();
-
-    ImageFormat getImageFormat(Long volumeId);
-
-    List<VolumeVO> findReadyRootVolumesByInstance(long instanceId);
-
-    List<Long> listPoolIdsByVolumeCount(long dcId, Long podId, Long clusterId, long accountId);
-
-    VolumeVO allocVolume(long size, VolumeType type, String volName, Long templateId);
-    
-    VolumeVO findByVolumeIdAndPoolId(long volumeId, long poolId);
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5af888c6/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDao2Impl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDao2Impl.java b/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDao2Impl.java
deleted file mode 100644
index d8497e2..0000000
--- a/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDao2Impl.java
+++ /dev/null
@@ -1,440 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package org.apache.cloudstack.storage.volume.db;
-
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-import javax.ejb.Local;
-import javax.inject.Inject;
-
-import org.apache.cloudstack.engine.subsystem.api.storage.type.RootDisk;
-import org.apache.cloudstack.engine.subsystem.api.storage.type.VolumeType;
-import org.apache.cloudstack.storage.volume.VolumeEvent;
-
-import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
-
-import com.cloud.hypervisor.Hypervisor.HypervisorType;
-import com.cloud.server.ResourceTag.TaggedResourceType;
-import com.cloud.storage.Storage.ImageFormat;
-import com.cloud.storage.Volume;
-import com.cloud.tags.dao.ResourceTagDao;
-import com.cloud.tags.dao.ResourceTagsDaoImpl;
-import com.cloud.utils.Pair;
-
-import com.cloud.utils.db.DB;
-import com.cloud.utils.db.GenericDaoBase;
-import com.cloud.utils.db.GenericSearchBuilder;
-import com.cloud.utils.db.SearchBuilder;
-import com.cloud.utils.db.SearchCriteria;
-import com.cloud.utils.db.SearchCriteria.Func;
-import com.cloud.utils.db.SearchCriteria.Op;
-import com.cloud.utils.db.SearchCriteria2;
-import com.cloud.utils.db.SearchCriteriaService;
-import com.cloud.utils.db.Transaction;
-import com.cloud.utils.db.UpdateBuilder;
-import com.cloud.utils.exception.CloudRuntimeException;
-
-@Local(value = VolumeDao2.class)
-@Component
-public class VolumeDao2Impl extends GenericDaoBase<VolumeVO, Long> implements VolumeDao2 {
-    private static final Logger s_logger = Logger.getLogger(VolumeDao2Impl.class);
-    protected final SearchBuilder<VolumeVO> DetachedAccountIdSearch;
-    protected final SearchBuilder<VolumeVO> TemplateZoneSearch;
-    protected final GenericSearchBuilder<VolumeVO, SumCount> TotalSizeByPoolSearch;
-    protected final GenericSearchBuilder<VolumeVO, Long> ActiveTemplateSearch;
-    protected final SearchBuilder<VolumeVO> InstanceStatesSearch;
-    protected final SearchBuilder<VolumeVO> AllFieldsSearch;
-    protected GenericSearchBuilder<VolumeVO, Long> CountByAccount;
-    @Inject ResourceTagDao _tagsDao = null;
-    protected static final String SELECT_VM_SQL = "SELECT DISTINCT instance_id from volumes v where v.host_id = ? and v.mirror_state = ?";
-    protected static final String SELECT_HYPERTYPE_FROM_VOLUME = "SELECT c.hypervisor_type from volumes v, storage_pool s, cluster c where v.pool_id = s.id and s.cluster_id = c.id and v.id = ?";
-
-    private static final String ORDER_POOLS_NUMBER_OF_VOLUMES_FOR_ACCOUNT = "SELECT pool.id, SUM(IF(vol.state='Ready' AND vol.account_id = ?, 1, 0)) FROM `cloud`.`storage_pool` pool LEFT JOIN `cloud`.`volumes` vol ON pool.id = vol.pool_id WHERE pool.data_center_id = ? "
-            + " AND pool.pod_id = ? AND pool.cluster_id = ? " + " GROUP BY pool.id ORDER BY 2 ASC ";
-
-    @Override
-    public List<VolumeVO> findDetachedByAccount(long accountId) {
-        SearchCriteria<VolumeVO> sc = DetachedAccountIdSearch.create();
-        sc.setParameters("accountId", accountId);
-        sc.setParameters("destroyed", Volume.State.Destroy);
-        return listBy(sc);
-    }
-
-    @Override
-    public List<VolumeVO> findByAccount(long accountId) {
-        SearchCriteria<VolumeVO> sc = AllFieldsSearch.create();
-        sc.setParameters("accountId", accountId);
-        sc.setParameters("state", Volume.State.Ready);
-        return listBy(sc);
-    }
-
-    @Override
-    public List<VolumeVO> findByInstance(long id) {
-        SearchCriteria<VolumeVO> sc = AllFieldsSearch.create();
-        sc.setParameters("instanceId", id);
-        return listBy(sc);
-    }
-
-    @Override
-    public List<VolumeVO> findByInstanceAndDeviceId(long instanceId, long deviceId) {
-        SearchCriteria<VolumeVO> sc = AllFieldsSearch.create();
-        sc.setParameters("instanceId", instanceId);
-        sc.setParameters("deviceId", deviceId);
-        return listBy(sc);
-    }
-
-    @Override
-    public List<VolumeVO> findByPoolId(long poolId) {
-        SearchCriteria<VolumeVO> sc = AllFieldsSearch.create();
-        sc.setParameters("poolId", poolId);
-        sc.setParameters("notDestroyed", Volume.State.Destroy);
-        sc.setParameters("vType", new RootDisk().toString());
-        return listBy(sc);
-    }
-
-    @Override
-    public List<VolumeVO> findCreatedByInstance(long id) {
-        SearchCriteria<VolumeVO> sc = AllFieldsSearch.create();
-        sc.setParameters("instanceId", id);
-        sc.setParameters("state", Volume.State.Ready);
-        return listBy(sc);
-    }
-
-    @Override
-    public List<VolumeVO> findUsableVolumesForInstance(long instanceId) {
-        SearchCriteria<VolumeVO> sc = InstanceStatesSearch.create();
-        sc.setParameters("instance", instanceId);
-        sc.setParameters("states", Volume.State.Creating, Volume.State.Ready, Volume.State.Allocated);
-
-        return listBy(sc);
-    }
-
-    @Override
-    public List<VolumeVO> findByInstanceAndType(long id, VolumeType vType) {
-        SearchCriteria<VolumeVO> sc = AllFieldsSearch.create();
-        sc.setParameters("instanceId", id);
-        sc.setParameters("vType", vType.toString());
-        return listBy(sc);
-    }
-
-    @Override
-    public List<VolumeVO> findByInstanceIdDestroyed(long vmId) {
-        SearchCriteria<VolumeVO> sc = AllFieldsSearch.create();
-        sc.setParameters("instanceId", vmId);
-        sc.setParameters("destroyed", Volume.State.Destroy);
-        return listBy(sc);
-    }
-
-    @Override
-    public List<VolumeVO> findReadyRootVolumesByInstance(long instanceId) {
-        SearchCriteria<VolumeVO> sc = AllFieldsSearch.create();
-        sc.setParameters("instanceId", instanceId);
-        sc.setParameters("state", Volume.State.Ready);
-        sc.setParameters("vType", new RootDisk().toString());
-        return listBy(sc);
-    }
-
-    @Override
-    public List<VolumeVO> findByAccountAndPod(long accountId, long podId) {
-        SearchCriteria<VolumeVO> sc = AllFieldsSearch.create();
-        sc.setParameters("accountId", accountId);
-        sc.setParameters("pod", podId);
-        sc.setParameters("state", Volume.State.Ready);
-
-        return listIncludingRemovedBy(sc);
-    }
-
-    @Override
-    public List<VolumeVO> findByTemplateAndZone(long templateId, long zoneId) {
-        SearchCriteria<VolumeVO> sc = TemplateZoneSearch.create();
-        sc.setParameters("template", templateId);
-        sc.setParameters("zone", zoneId);
-
-        return listIncludingRemovedBy(sc);
-    }
-
-    @Override
-    public boolean isAnyVolumeActivelyUsingTemplateOnPool(long templateId, long poolId) {
-        SearchCriteria<Long> sc = ActiveTemplateSearch.create();
-        sc.setParameters("template", templateId);
-        sc.setParameters("pool", poolId);
-
-        List<Long> results = customSearchIncludingRemoved(sc, null);
-        assert results.size() > 0 : "How can this return a size of " + results.size();
-
-        return results.get(0) > 0;
-    }
-
-    @Override
-    public void deleteVolumesByInstance(long instanceId) {
-        SearchCriteria<VolumeVO> sc = AllFieldsSearch.create();
-        sc.setParameters("instanceId", instanceId);
-        expunge(sc);
-    }
-
-    @Override
-    public void attachVolume(long volumeId, long vmId, long deviceId) {
-        VolumeVO volume = createForUpdate(volumeId);
-        volume.setInstanceId(vmId);
-        volume.setDeviceId(deviceId);
-        volume.setUpdated(new Date());
-        volume.setAttached(new Date());
-        update(volumeId, volume);
-    }
-
-    @Override
-    public void detachVolume(long volumeId) {
-        VolumeVO volume = createForUpdate(volumeId);
-        volume.setInstanceId(null);
-        volume.setDeviceId(null);
-        volume.setUpdated(new Date());
-        volume.setAttached(null);
-        update(volumeId, volume);
-    }
-
-    @Override
-    @DB
-    public HypervisorType getHypervisorType(long volumeId) {
-        /* lookup from cluster of pool */
-        Transaction txn = Transaction.currentTxn();
-        PreparedStatement pstmt = null;
-
-        try {
-            String sql = SELECT_HYPERTYPE_FROM_VOLUME;
-            pstmt = txn.prepareAutoCloseStatement(sql);
-            pstmt.setLong(1, volumeId);
-            ResultSet rs = pstmt.executeQuery();
-            if (rs.next()) {
-                return HypervisorType.getType(rs.getString(1));
-            }
-            return HypervisorType.None;
-        } catch (SQLException e) {
-            throw new CloudRuntimeException("DB Exception on: " + SELECT_HYPERTYPE_FROM_VOLUME, e);
-        } catch (Throwable e) {
-            throw new CloudRuntimeException("Caught: " + SELECT_HYPERTYPE_FROM_VOLUME, e);
-        }
-    }
-
-    @Override
-    public ImageFormat getImageFormat(Long volumeId) {
-        HypervisorType type = getHypervisorType(volumeId);
-        if (type.equals(HypervisorType.KVM)) {
-            return ImageFormat.QCOW2;
-        } else if (type.equals(HypervisorType.XenServer)) {
-            return ImageFormat.VHD;
-        } else if (type.equals(HypervisorType.VMware)) {
-            return ImageFormat.OVA;
-        } else {
-            s_logger.warn("Do not support hypervisor " + type.toString());
-            return null;
-        }
-    }
-
-    protected VolumeDao2Impl() {
-        AllFieldsSearch = createSearchBuilder();
-        AllFieldsSearch.and("state", AllFieldsSearch.entity().getState(), Op.EQ);
-        AllFieldsSearch.and("accountId", AllFieldsSearch.entity().getAccountId(), Op.EQ);
-        AllFieldsSearch.and("pod", AllFieldsSearch.entity().getPodId(), Op.EQ);
-        AllFieldsSearch.and("instanceId", AllFieldsSearch.entity().getInstanceId(), Op.EQ);
-        AllFieldsSearch.and("deviceId", AllFieldsSearch.entity().getDeviceId(), Op.EQ);
-        AllFieldsSearch.and("poolId", AllFieldsSearch.entity().getPoolId(), Op.EQ);
-        AllFieldsSearch.and("vType", AllFieldsSearch.entity().getVolumeType(), Op.EQ);
-        AllFieldsSearch.and("id", AllFieldsSearch.entity().getId(), Op.EQ);
-        AllFieldsSearch.and("destroyed", AllFieldsSearch.entity().getState(), Op.EQ);
-        AllFieldsSearch.and("notDestroyed", AllFieldsSearch.entity().getState(), Op.NEQ);
-        AllFieldsSearch.and("updatedCount", AllFieldsSearch.entity().getUpdatedCount(), Op.EQ);
-        AllFieldsSearch.done();
-
-        DetachedAccountIdSearch = createSearchBuilder();
-        DetachedAccountIdSearch.and("accountId", DetachedAccountIdSearch.entity().getAccountId(), Op.EQ);
-        DetachedAccountIdSearch.and("destroyed", DetachedAccountIdSearch.entity().getState(), Op.NEQ);
-        DetachedAccountIdSearch.and("instanceId", DetachedAccountIdSearch.entity().getInstanceId(), Op.NULL);
-        DetachedAccountIdSearch.done();
-
-        TemplateZoneSearch = createSearchBuilder();
-        TemplateZoneSearch.and("template", TemplateZoneSearch.entity().getTemplateId(), Op.EQ);
-        TemplateZoneSearch.and("zone", TemplateZoneSearch.entity().getDataCenterId(), Op.EQ);
-        TemplateZoneSearch.done();
-
-        TotalSizeByPoolSearch = createSearchBuilder(SumCount.class);
-        TotalSizeByPoolSearch.select("sum", Func.SUM, TotalSizeByPoolSearch.entity().getSize());
-        TotalSizeByPoolSearch.select("count", Func.COUNT, (Object[]) null);
-        TotalSizeByPoolSearch.and("poolId", TotalSizeByPoolSearch.entity().getPoolId(), Op.EQ);
-        TotalSizeByPoolSearch.and("removed", TotalSizeByPoolSearch.entity().getRemoved(), Op.NULL);
-        TotalSizeByPoolSearch.and("state", TotalSizeByPoolSearch.entity().getState(), Op.NEQ);
-        TotalSizeByPoolSearch.done();
-
-        ActiveTemplateSearch = createSearchBuilder(Long.class);
-        ActiveTemplateSearch.and("pool", ActiveTemplateSearch.entity().getPoolId(), Op.EQ);
-        ActiveTemplateSearch.and("template", ActiveTemplateSearch.entity().getTemplateId(), Op.EQ);
-        ActiveTemplateSearch.and("removed", ActiveTemplateSearch.entity().getRemoved(), Op.NULL);
-        ActiveTemplateSearch.select(null, Func.COUNT, null);
-        ActiveTemplateSearch.done();
-
-        InstanceStatesSearch = createSearchBuilder();
-        InstanceStatesSearch.and("instance", InstanceStatesSearch.entity().getInstanceId(), Op.EQ);
-        InstanceStatesSearch.and("states", InstanceStatesSearch.entity().getState(), Op.IN);
-        InstanceStatesSearch.done();
-
-        CountByAccount = createSearchBuilder(Long.class);
-        CountByAccount.select(null, Func.COUNT, null);
-        CountByAccount.and("account", CountByAccount.entity().getAccountId(), SearchCriteria.Op.EQ);
-        CountByAccount.and("state", CountByAccount.entity().getState(), SearchCriteria.Op.NIN);
-        CountByAccount.done();
-    }
-
-    @Override
-    @DB(txn = false)
-    public Pair<Long, Long> getCountAndTotalByPool(long poolId) {
-        SearchCriteria<SumCount> sc = TotalSizeByPoolSearch.create();
-        sc.setParameters("poolId", poolId);
-        List<SumCount> results = customSearch(sc, null);
-        SumCount sumCount = results.get(0);
-        return new Pair<Long, Long>(sumCount.count, sumCount.sum);
-    }
-
-    @Override
-    public Long countAllocatedVolumesForAccount(long accountId) {
-        SearchCriteria<Long> sc = CountByAccount.create();
-        sc.setParameters("account", accountId);
-        sc.setParameters("state", Volume.State.Destroy);
-        return customSearch(sc, null).get(0);
-    }
-
-    public static class SumCount {
-        public long sum;
-        public long count;
-
-        public SumCount() {
-        }
-    }
-
-    @Override
-    public List<VolumeVO> listVolumesToBeDestroyed() {
-        SearchCriteria<VolumeVO> sc = AllFieldsSearch.create();
-        sc.setParameters("state", Volume.State.Destroy);
-
-        return listBy(sc);
-    }
-
-    @Override
-    public boolean updateState(Volume.State currentState, Volume.Event event, Volume.State nextState, VolumeVO vo, Object data) {
-
-        Long oldUpdated = vo.getUpdatedCount();
-        Date oldUpdatedTime = vo.getUpdated();
-
-        SearchCriteria<VolumeVO> sc = AllFieldsSearch.create();
-        sc.setParameters("id", vo.getId());
-        sc.setParameters("state", currentState);
-        sc.setParameters("updatedCount", vo.getUpdatedCount());
-
-        vo.incrUpdatedCount();
-
-        UpdateBuilder builder = getUpdateBuilder(vo);
-        builder.set(vo, "state", nextState);
-        builder.set(vo, "updated", new Date());
-
-        int rows = update((VolumeVO) vo, sc);
-        if (rows == 0 && s_logger.isDebugEnabled()) {
-            VolumeVO dbVol = findByIdIncludingRemoved(vo.getId());
-            if (dbVol != null) {
-                StringBuilder str = new StringBuilder("Unable to update ").append(vo.toString());
-                str.append(": DB Data={id=").append(dbVol.getId()).append("; state=").append(dbVol.getState()).append("; updatecount=").append(dbVol.getUpdatedCount()).append(";updatedTime=")
-                        .append(dbVol.getUpdated());
-                str.append(": New Data={id=").append(vo.getId()).append("; state=").append(nextState).append("; event=").append(event).append("; updatecount=").append(vo.getUpdatedCount())
-                        .append("; updatedTime=").append(vo.getUpdated());
-                str.append(": stale Data={id=").append(vo.getId()).append("; state=").append(currentState).append("; event=").append(event).append("; updatecount=").append(oldUpdated)
-                        .append("; updatedTime=").append(oldUpdatedTime);
-            } else {
-                s_logger.debug("Unable to update volume: id=" + vo.getId() + ", as there is no such volume exists in the database anymore");
-            }
-        }
-        return rows > 0;
-    }
-
-    @Override
-    public List<Long> listPoolIdsByVolumeCount(long dcId, Long podId, Long clusterId, long accountId) {
-        Transaction txn = Transaction.currentTxn();
-        PreparedStatement pstmt = null;
-        List<Long> result = new ArrayList<Long>();
-        try {
-            String sql = ORDER_POOLS_NUMBER_OF_VOLUMES_FOR_ACCOUNT;
-            pstmt = txn.prepareAutoCloseStatement(sql);
-            pstmt.setLong(1, accountId);
-            pstmt.setLong(2, dcId);
-            pstmt.setLong(3, podId);
-            pstmt.setLong(4, clusterId);
-
-            ResultSet rs = pstmt.executeQuery();
-            while (rs.next()) {
-                result.add(rs.getLong(1));
-            }
-            return result;
-        } catch (SQLException e) {
-            throw new CloudRuntimeException("DB Exception on: " + ORDER_POOLS_NUMBER_OF_VOLUMES_FOR_ACCOUNT, e);
-        } catch (Throwable e) {
-            throw new CloudRuntimeException("Caught: " + ORDER_POOLS_NUMBER_OF_VOLUMES_FOR_ACCOUNT, e);
-        }
-    }
-
-    @Override
-    @DB(txn = false)
-    public Pair<Long, Long> getNonDestroyedCountAndTotalByPool(long poolId) {
-        SearchCriteria<SumCount> sc = TotalSizeByPoolSearch.create();
-        sc.setParameters("poolId", poolId);
-        sc.setParameters("state", Volume.State.Destroy);
-        List<SumCount> results = customSearch(sc, null);
-        SumCount sumCount = results.get(0);
-        return new Pair<Long, Long>(sumCount.count, sumCount.sum);
-    }
-
-    @Override
-    @DB
-    public boolean remove(Long id) {
-        Transaction txn = Transaction.currentTxn();
-        txn.start();
-        VolumeVO entry = findById(id);
-        if (entry != null) {
-            _tagsDao.removeByIdAndType(id, TaggedResourceType.Volume);
-        }
-        boolean result = super.remove(id);
-        txn.commit();
-        return result;
-    }
-
-    @Override
-    @DB
-    public VolumeVO allocVolume(long size, VolumeType type, String volName, Long templateId) {
-        VolumeVO vol = new VolumeVO(size, type.toString(), volName, templateId);
-        vol = this.persist(vol);
-        return vol;
-    }
-
-    @Override
-    public VolumeVO findByVolumeIdAndPoolId(long volumeId, long poolId) {
-        SearchCriteriaService<VolumeVO, VolumeVO> sc = SearchCriteria2.create(VolumeVO.class);
-        sc.addAnd(sc.getEntity().getId(), Op.EQ, volumeId);
-        sc.addAnd(sc.getEntity().getPoolId(), Op.EQ, poolId);
-        return sc.find();
-    }
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5af888c6/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeVO.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeVO.java b/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeVO.java
deleted file mode 100644
index 8310224..0000000
--- a/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeVO.java
+++ /dev/null
@@ -1,418 +0,0 @@
-//Licensed to the Apache Software Foundation (ASF) under one
-//or more contributor license agreements.  See the NOTICE file
-//distributed with this work for additional information
-//regarding copyright ownership.  The ASF licenses this file
-//to you under the Apache License, Version 2.0 (the
-//"License"); you may not use this file except in compliance
-//with the License.  You may obtain a copy of the License at
-//
-//http://www.apache.org/licenses/LICENSE-2.0
-//
-//Unless required by applicable law or agreed to in writing,
-//software distributed under the License is distributed on an
-//"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-//KIND, either express or implied.  See the License for the
-//specific language governing permissions and limitations
-//under the License.
-
-package org.apache.cloudstack.storage.volume.db;
-
-import java.util.Date;
-import java.util.UUID;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Table;
-import javax.persistence.TableGenerator;
-import javax.persistence.Temporal;
-import javax.persistence.TemporalType;
-
-import org.apache.cloudstack.api.Identity;
-import org.apache.cloudstack.engine.subsystem.api.storage.disktype.DiskFormat;
-
-import com.cloud.storage.Storage.StoragePoolType;
-import com.cloud.storage.Volume;
-import com.cloud.utils.NumbersUtil;
-import com.cloud.utils.db.GenericDao;
-import com.cloud.utils.fsm.StateObject;
-
-@Entity
-@Table(name = "volumes")
-public class VolumeVO implements Identity, StateObject<Volume.State> {
-    @Id
-    @TableGenerator(name = "volume_sq", table = "sequence", pkColumnName = "name", valueColumnName = "value", pkColumnValue = "volume_seq", allocationSize = 1)
-    @GeneratedValue(strategy = GenerationType.TABLE)
-    @Column(name = "id")
-    long id;
-
-    @Column(name = "name")
-    String name;
-
-    @Column(name = "pool_id")
-    Long poolId;
-
-    @Column(name = "last_pool_id")
-    Long lastPoolId;
-
-    @Column(name = "account_id")
-    long accountId;
-
-    @Column(name = "domain_id")
-    long domainId;
-
-    @Column(name = "instance_id")
-    Long instanceId = null;
-
-    @Column(name = "device_id")
-    Long deviceId = null;
-
-    @Column(name = "size")
-    long size;
-
-    @Column(name = "folder")
-    String folder;
-
-    @Column(name = "path")
-    String path;
-
-    @Column(name = "pod_id")
-    Long podId;
-
-    @Column(name = "created")
-    Date created;
-
-    @Column(name = "attached")
-    @Temporal(value = TemporalType.TIMESTAMP)
-    Date attached;
-
-    @Column(name = "data_center_id")
-    long dataCenterId;
-
-    @Column(name = "host_ip")
-    String hostip;
-
-    @Column(name = "disk_offering_id")
-    long diskOfferingId;
-
-    @Column(name = "template_id")
-    Long templateId;
-
-    @Column(name = "first_snapshot_backup_uuid")
-    String firstSnapshotBackupUuid;
-
-    @Column(name = "volume_type")
-    String volumeType = "UNKNOWN";
-
-    @Column(name = "pool_type")
-    @Enumerated(EnumType.STRING)
-    StoragePoolType poolType;
-
-    @Column(name = "disk_type")
-    DiskFormat diskType;
-
-    @Column(name = GenericDao.REMOVED_COLUMN)
-    Date removed;
-
-    @Column(name = "updated")
-    @Temporal(value = TemporalType.TIMESTAMP)
-    Date updated;
-
-    @Column(name = "update_count", updatable = true, nullable = false)
-    protected long updatedCount; // This field should be updated everytime the
-    // state is updated. There's no set method in
-    // the vo object because it is done with in the
-    // dao code.
-
-    @Column(name = "recreatable")
-    boolean recreatable;
-
-    @Column(name = "state")
-    @Enumerated(value = EnumType.STRING)
-    private Volume.State state;
-
-    @Column(name = "chain_info")
-    String chainInfo;
-
-    @Column(name = "uuid")
-    String uuid;
-
-    // Real Constructor
-    public VolumeVO(long size, String type, String name, Long templateId) {
-        this.volumeType = type;
-        this.size = size;
-        this.name = name;
-        this.templateId = templateId;
-        this.uuid = UUID.randomUUID().toString();
-        this.state = Volume.State.Allocated;
-    }
-
-    // Copy Constructor
-    public VolumeVO(VolumeVO that) {
-        this(that.getSize(), that.getVolumeType(), that.getName(), that.getTemplateId());
-        this.recreatable = that.isRecreatable();
-        this.state = that.getState();
-
-        this.size = that.getSize();
-        this.diskOfferingId = that.getDiskOfferingId();
-        this.poolId = that.getPoolId();
-        this.attached = that.getAttached();
-        this.chainInfo = that.getChainInfo();
-        this.templateId = that.getTemplateId();
-        this.deviceId = that.getDeviceId();
-        this.uuid = UUID.randomUUID().toString();
-    }
-
-    public long getUpdatedCount() {
-        return this.updatedCount;
-    }
-
-    public void incrUpdatedCount() {
-        this.updatedCount++;
-    }
-
-    public void decrUpdatedCount() {
-        this.updatedCount--;
-    }
-
-    public boolean isRecreatable() {
-        return recreatable;
-    }
-
-    public void setRecreatable(boolean recreatable) {
-        this.recreatable = recreatable;
-    }
-
-    public long getId() {
-        return id;
-    }
-
-    public Long getPodId() {
-        return podId;
-    }
-
-    public long getDataCenterId() {
-        return dataCenterId;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public long getAccountId() {
-        return accountId;
-    }
-
-    public void setPoolType(StoragePoolType poolType) {
-        this.poolType = poolType;
-    }
-
-    public StoragePoolType getPoolType() {
-        return poolType;
-    }
-
-    public long getDomainId() {
-        return domainId;
-    }
-
-    public String getFolder() {
-        return folder;
-    }
-
-    public String getPath() {
-        return path;
-    }
-
-    protected VolumeVO() {
-    }
-
-    public long getSize() {
-        return size;
-    }
-
-    public void setSize(long size) {
-        this.size = size;
-    }
-
-    public Long getInstanceId() {
-        return instanceId;
-    }
-
-    public Long getDeviceId() {
-        return deviceId;
-    }
-
-    public void setDeviceId(Long deviceId) {
-        this.deviceId = deviceId;
-    }
-
-    public String getVolumeType() {
-        return volumeType;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public void setFolder(String folder) {
-        this.folder = folder;
-    }
-
-    public void setAccountId(long accountId) {
-        this.accountId = accountId;
-    }
-
-    public void setDomainId(long domainId) {
-        this.domainId = domainId;
-    }
-
-    public void setInstanceId(Long instanceId) {
-        this.instanceId = instanceId;
-    }
-
-    public void setPath(String path) {
-        this.path = path;
-    }
-
-    public String getHostIp() {
-        return hostip;
-    }
-
-    public void setHostIp(String hostip) {
-        this.hostip = hostip;
-    }
-
-    public void setPodId(Long podId) {
-        this.podId = podId;
-    }
-
-    public void setDataCenterId(long dataCenterId) {
-        this.dataCenterId = dataCenterId;
-    }
-
-    public void setVolumeType(String type) {
-        volumeType = type;
-    }
-
-    public Date getCreated() {
-        return created;
-    }
-
-    public Date getRemoved() {
-        return removed;
-    }
-
-    public void setRemoved(Date removed) {
-        this.removed = removed;
-    }
-
-    public long getDiskOfferingId() {
-        return diskOfferingId;
-    }
-
-    public void setDiskOfferingId(long diskOfferingId) {
-        this.diskOfferingId = diskOfferingId;
-    }
-
-    public Long getTemplateId() {
-        return templateId;
-    }
-
-    public void setTemplateId(Long templateId) {
-        this.templateId = templateId;
-    }
-
-    public String getFirstSnapshotBackupUuid() {
-        return firstSnapshotBackupUuid;
-    }
-
-    public void setFirstSnapshotBackupUuid(String firstSnapshotBackupUuid) {
-        this.firstSnapshotBackupUuid = firstSnapshotBackupUuid;
-    }
-
-    public Long getPoolId() {
-        return poolId;
-    }
-
-    public void setPoolId(Long poolId) {
-        this.poolId = poolId;
-    }
-
-    public Date getUpdated() {
-        return updated;
-    }
-
-    @Override
-    public Volume.State getState() {
-        return state;
-    }
-
-    public void setUpdated(Date updated) {
-        this.updated = updated;
-    }
-
-    @Override
-    public String toString() {
-        return new StringBuilder("Vol[").append(id).append("|vm=").append(instanceId).append("|").append(volumeType).append("]").toString();
-    }
-
-    public Date getAttached() {
-        return this.attached;
-    }
-
-    public void setAttached(Date attached) {
-        this.attached = attached;
-    }
-
-    public String getChainInfo() {
-        return this.chainInfo;
-    }
-
-    public void setChainInfo(String chainInfo) {
-        this.chainInfo = chainInfo;
-    }
-
-    public Long getLastPoolId() {
-        return this.lastPoolId;
-    }
-
-    public void setLastPoolId(Long poolId) {
-        this.lastPoolId = poolId;
-    }
-
-    @Override
-    public int hashCode() {
-        return NumbersUtil.hash(id);
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (obj instanceof VolumeVO) {
-            return id == ((VolumeVO) obj).id;
-        } else {
-            return false;
-        }
-    }
-
-    @Override
-    public String getUuid() {
-        return this.uuid;
-    }
-
-    public void setUuid(String uuid) {
-        this.uuid = uuid;
-    }
-
-    public DiskFormat getDiskType() {
-        return diskType;
-    }
-
-    public void setDiskType(DiskFormat type) {
-        diskType = type;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5af888c6/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeObject.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeObject.java b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeObject.java
index 4a3fd3f..da5e80b 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeObject.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeObject.java
@@ -38,6 +38,7 @@ import com.cloud.agent.api.to.DataObjectType;
 import com.cloud.agent.api.to.DataTO;
 import com.cloud.hypervisor.Hypervisor.HypervisorType;
 import com.cloud.storage.DataStoreRole;
+import com.cloud.storage.Storage.ImageFormat;
 import com.cloud.storage.Volume;
 import com.cloud.storage.VolumeVO;
 import com.cloud.storage.dao.VolumeDao;
@@ -429,4 +430,9 @@ public class VolumeObject implements VolumeInfo {
         this.processEvent(event);
 
     }
+
+	@Override
+	public ImageFormat getFormat() {
+		return this.volumeVO.getFormat();
+	}
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5af888c6/server/src/com/cloud/storage/VolumeManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/VolumeManagerImpl.java b/server/src/com/cloud/storage/VolumeManagerImpl.java
index 38f9959..9af53ee 100644
--- a/server/src/com/cloud/storage/VolumeManagerImpl.java
+++ b/server/src/com/cloud/storage/VolumeManagerImpl.java
@@ -504,6 +504,7 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
         newVol.setDeviceId(oldVol.getDeviceId());
         newVol.setInstanceId(oldVol.getInstanceId());
         newVol.setRecreatable(oldVol.isRecreatable());
+        newVol.setFormat(oldVol.getFormat());
         return _volsDao.persist(newVol);
     }
 
@@ -690,6 +691,8 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
                 s_logger.debug("create volume failed: " + result.getResult());
                 throw new CloudRuntimeException("create volume failed:" + result.getResult());
             }
+            
+            
             UsageEventVO usageEvent = new UsageEventVO(
                     EventTypes.EVENT_VOLUME_CREATE, volume.getAccountId(),
                     volume.getDataCenterId(), volume.getId(), volume.getName(),
@@ -732,7 +735,7 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
         volume.setUpdated(new Date());
         volume.setDomainId((caller == null) ? Domain.ROOT_DOMAIN : caller
                 .getDomainId());
-
+        volume.setFormat(ImageFormat.valueOf(format));
         volume = _volsDao.persist(volume);
         try {
             stateTransitTo(volume, Event.UploadRequested);
@@ -979,6 +982,7 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
         volume.setDisplayVolume(displayVolumeEnabled);
         if (parentVolume != null) {
             volume.setTemplateId(parentVolume.getTemplateId());
+            volume.setFormat(parentVolume.getFormat());
         }  else {
             volume.setTemplateId(null);
         }
@@ -1358,7 +1362,8 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
         } else {
             vol.setDeviceId(1l);
         }
-
+        
+        vol.setFormat(this.getSupportedImageFormatForCluster(vm.getHypervisorType()));
         vol = _volsDao.persist(vol);
 
         // Save usage event and update resource count for user vm volumes
@@ -1388,6 +1393,7 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
 
         VolumeVO vol = new VolumeVO(type, name, vm.getDataCenterId(),
                 owner.getDomainId(), owner.getId(), offering.getId(), size);
+        vol.setFormat(this.getSupportedImageFormatForCluster(template.getHypervisorType()));
         if (vm != null) {
             vol.setInstanceId(vm.getId());
         }
@@ -1427,17 +1433,15 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
         return toDiskProfile(vol, offering);
     }
 
-    private String getSupportedImageFormatForCluster(Long clusterId) {
-        ClusterVO cluster = ApiDBUtils.findClusterById(clusterId);
-
-        if (cluster.getHypervisorType() == HypervisorType.XenServer) {
-            return "vhd";
-        } else if (cluster.getHypervisorType() == HypervisorType.KVM) {
-            return "qcow2";
-        } else if (cluster.getHypervisorType() == HypervisorType.VMware) {
-            return "ova";
-        } else if (cluster.getHypervisorType() == HypervisorType.Ovm) {
-            return "raw";
+    private  ImageFormat getSupportedImageFormatForCluster(HypervisorType hyperType) {
+        if (hyperType == HypervisorType.XenServer) {
+            return ImageFormat.VHD;
+        } else if (hyperType == HypervisorType.KVM) {
+            return ImageFormat.QCOW2;
+        } else if (hyperType == HypervisorType.VMware) {
+            return ImageFormat.OVA;
+        } else if (hyperType == HypervisorType.Ovm) {
+            return ImageFormat.RAW;
         } else {
             return null;
         }
@@ -1446,16 +1450,14 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
     private VolumeInfo copyVolume(StoragePoolVO rootDiskPool
             , VolumeInfo volume, VMInstanceVO vm, VMTemplateVO rootDiskTmplt, DataCenterVO dcVO,
             HostPodVO pod, DiskOfferingVO diskVO, ServiceOfferingVO svo, HypervisorType rootDiskHyperType) throws NoTransitionException {
-        VolumeDataStoreVO volStoreVO = _volumeStoreDao.findByStoreVolume(volume.getDataStore().getId(), volume.getId());
-        if (!volStoreVO
+     
+        if (!volume
                 .getFormat()
-                .getFileExtension()
                 .equals(
-                        getSupportedImageFormatForCluster(rootDiskPool
-                                .getClusterId()))) {
+                        getSupportedImageFormatForCluster(rootDiskHyperType))) {
             throw new InvalidParameterValueException(
                     "Failed to attach volume to VM since volumes format "
-                            + volStoreVO.getFormat()
+                            + volume.getFormat()
                             .getFileExtension()
                             + " is not compatible with the vm hypervisor type");
         }
@@ -1502,7 +1504,11 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
                         ResourceType.primary_storage, new Long(volume.getSize()));
             }
         }
-        return vol;
+        
+        VolumeVO volVO = this._volsDao.findById(vol.getId());
+        volVO.setFormat(this.getSupportedImageFormatForCluster(rootDiskHyperType));
+        this._volsDao.update(volVO.getId(), volVO);
+        return this.volFactory.getVolume(volVO.getId());
     }
 
     private boolean needMoveVolume(VolumeVO rootVolumeOfVm, VolumeInfo volume) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5af888c6/services/secondary-storage/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
----------------------------------------------------------------------
diff --git a/services/secondary-storage/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java b/services/secondary-storage/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
index 8dca6f5..eee7e27 100755
--- a/services/secondary-storage/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
+++ b/services/secondary-storage/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
@@ -290,7 +290,7 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S
             if ( srcData.getObjectType() == DataObjectType.TEMPLATE){
                 extension = ((TemplateObjectTO)srcData).getFormat().getFileExtension();
             } else{
-                extension = ((VolumeObjectTO)srcData).getDiskType().toString().toLowerCase();
+                extension = ((VolumeObjectTO)srcData).getFormat().getFileExtension();
             }
 
             String templateName = UUID.randomUUID().toString();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5af888c6/setup/db/db/schema-410to420.sql
----------------------------------------------------------------------
diff --git a/setup/db/db/schema-410to420.sql b/setup/db/db/schema-410to420.sql
index aecb938..d33c070 100644
--- a/setup/db/db/schema-410to420.sql
+++ b/setup/db/db/schema-410to420.sql
@@ -388,6 +388,8 @@ ALTER TABLE `cloud`.`user_vm_details` ADD COLUMN `display_detail` tinyint(1) NOT
 
 ALTER TABLE `cloud`.`volumes` ADD COLUMN `display_volume` tinyint(1) NOT NULL DEFAULT 1 COMMENT 'Should volume be displayed to the end user';
 
+ALTER TABLE `cloud`.`volumes` ADD COLUMN `format` varchar(255) COMMENT 'volume format';
+
 ALTER TABLE `cloud`.`networks` ADD COLUMN `display_network` tinyint(1) NOT NULL DEFAULT 1 COMMENT 'Should network be displayed to the end user';
 
 ALTER TABLE `cloud`.`nics` ADD COLUMN `display_nic` tinyint(1) NOT NULL DEFAULT 1 COMMENT 'Should nic be displayed to the end user';


Mime
View raw message