Repository: cloudstack Updated Branches: refs/heads/4.4-forward 149cb33e3 -> 2c4ae0883
CLOUDSTACK-5907, CLOUDSTACK-6396: KVM/RBD & KVM/CLVM volumes mistakenly shown as OVM, disables snapshotting modified: server/src/com/cloud/api/ApiDBUtils.java Signed-off-by: Daan Hoogland <d...@onecht.net> Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/2c4ae088 Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/2c4ae088 Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/2c4ae088 Branch: refs/heads/4.4-forward Commit: 2c4ae0883be04840a90b7238ad32aeaa38cc43ae Parents: 149cb33 Author: Tanner Danzey <arkan...@gmail.com> Authored: Mon Apr 14 16:52:05 2014 -0500 Committer: Daan Hoogland <d...@onecht.net> Committed: Mon May 5 15:27:38 2014 +0200 ---------------------------------------------------------------------- server/src/com/cloud/api/ApiDBUtils.java | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2c4ae088/server/src/com/cloud/api/ApiDBUtils.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index 2da107f..296a1f4 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -19,6 +19,7 @@ package com.cloud.api; import java.util.ArrayList; import java.util.EnumSet; import java.util.List; +import java.util.ListIterator; import java.util.Map; import java.util.Set; @@ -236,6 +237,7 @@ import com.cloud.storage.ImageStore; import com.cloud.storage.Snapshot; import com.cloud.storage.SnapshotVO; import com.cloud.storage.Storage.ImageFormat; +import com.cloud.storage.Storage.StoragePoolType; import com.cloud.storage.StorageManager; import com.cloud.storage.StoragePool; import com.cloud.storage.StorageStats; @@ -1071,6 +1073,26 @@ public class ApiDBUtils { if (xenClusters.isEmpty()) { type = HypervisorType.Hyperv; } + } if (format == ImageFormat.RAW) { + // Currently, KVM only suppoorts RBD images of type RAW. + // This results in a weird collision with OVM volumes which + // can only be raw, thus making KVM RBD volumes show up as OVM + // rather than RBD. This block of code can (hopefuly) by checking to + // see if the pool is using either RBD or NFS. However, it isn't + // quite clear what to do if both storage types are used. If the image + // format is RAW, it narrows the hypervisor choice down to OVM and KVM / RBD or KVM / CLVM + // This would be better implemented at a cluster level. + List<StoragePoolVO> pools = s_storagePoolDao.listByDataCenterId(dcId); + ListIterator<StoragePoolVO> itr = pools.listIterator(); + while(itr.hasNext()) { + StoragePoolVO pool = itr.next(); + if(pool.getPoolType() == StoragePoolType.RBD || pool.getPoolType() == StoragePoolType.CLVM) { + // This case will note the presence of non-qcow2 primary stores, suggesting KVM without NFS. Otherwse, + // If this check is not passed, the hypervisor type will remain OVM. + type = HypervisorType.KVM; + break; + } + } } return type; }