kvm: Better handle different volume formats when creating a volume

The KVMStorageProcessor no longer has a hardcoded if-statement which sets
RBD volumes to RAW, this is now handled in the LibvirtStorageAdapter

The Management Server still sends QCOW2 as format. That's a fix for later.


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

Branch: refs/heads/master
Commit: c1116142a3cd356e1e8da5404be150a07752b5d5
Parents: b3491bc
Author: Wido den Hollander <[email protected]>
Authored: Tue Apr 29 13:35:20 2014 +0200
Committer: Wido den Hollander <[email protected]>
Committed: Thu May 1 21:03:11 2014 +0200

----------------------------------------------------------------------
 .../hypervisor/kvm/storage/KVMStorageProcessor.java     | 12 +++---------
 .../hypervisor/kvm/storage/LibvirtStorageAdaptor.java   |  3 +--
 .../hypervisor/kvm/storage/LibvirtStoragePool.java      |  2 +-
 3 files changed, 5 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c1116142/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java
----------------------------------------------------------------------
diff --git 
a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java
 
b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java
index 1fb2d5f..89270c1 100644
--- 
a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java
+++ 
b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java
@@ -1054,19 +1054,13 @@ public class KVMStorageProcessor implements 
StorageProcessor {
             primaryPool = 
storagePoolMgr.getStoragePool(primaryStore.getPoolType(), 
primaryStore.getUuid());
             disksize = volume.getSize();
 
-            vol = primaryPool.createPhysicalDisk(volume.getUuid(), 
volume.getProvisioningType(), disksize);
+            vol = primaryPool.createPhysicalDisk(volume.getUuid(), 
PhysicalDiskFormat.valueOf(volume.getFormat().toString().toUpperCase()),
+                                                 volume.getProvisioningType(), 
disksize);
 
             VolumeObjectTO newVol = new VolumeObjectTO();
             newVol.setPath(vol.getName());
             newVol.setSize(volume.getSize());
-
-            /**
-             * Volumes on RBD are always in RAW format
-             * Hardcode this to RAW since there is no other way right now
-             */
-            if (primaryPool.getType() == StoragePoolType.RBD) {
-                newVol.setFormat(ImageFormat.RAW);
-            }
+            
newVol.setFormat(ImageFormat.valueOf(vol.getFormat().toString().toUpperCase()));
 
             return new CreateObjectAnswer(newVol);
         } catch (Exception e) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c1116142/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java
----------------------------------------------------------------------
diff --git 
a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java
 
b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java
index 3c0dd94..503c51b 100644
--- 
a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java
+++ 
b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java
@@ -733,7 +733,6 @@ public class LibvirtStorageAdaptor implements 
StorageAdaptor {
          * For that reason we use the native RBD bindings to create the
          * RBD image until libvirt creates RBD format 2 by default
          */
-        format = PhysicalDiskFormat.RAW;
 
         try {
             s_logger.info("Creating RBD image " + pool.getSourceDir() + "/" + 
name + " with size " + size);
@@ -758,7 +757,7 @@ public class LibvirtStorageAdaptor implements 
StorageAdaptor {
 
         volPath = pool.getSourceDir() + "/" + name;
         KVMPhysicalDisk disk = new KVMPhysicalDisk(volPath, name, pool);
-        disk.setFormat(format);
+        disk.setFormat(PhysicalDiskFormat.RAW);
         disk.setSize(size);
         disk.setVirtualSize(size);
         return disk;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c1116142/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStoragePool.java
----------------------------------------------------------------------
diff --git 
a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStoragePool.java
 
b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStoragePool.java
index 7678f1d..702816e 100644
--- 
a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStoragePool.java
+++ 
b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStoragePool.java
@@ -106,7 +106,7 @@ public class LibvirtStoragePool implements KVMStoragePool {
 
     @Override
     public PhysicalDiskFormat getDefaultFormat() {
-        if (getStoragePoolType() == StoragePoolType.CLVM) {
+        if (getStoragePoolType() == StoragePoolType.CLVM || 
getStoragePoolType() == StoragePoolType.RBD) {
             return PhysicalDiskFormat.RAW;
         } else {
             return PhysicalDiskFormat.QCOW2;

Reply via email to