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;
