From bab81f0d6fd6000acdad465b3a9a6a8f0f0efcc0 Mon Sep 17 00:00:00 2001 From: Kishan Kavala Date: Fri, 5 Sep 2014 17:33:57 +0530 Subject: [PATCH] CLOUDSTACK-7478, CLOUDSTACK-7479: Move pool type filter to seperate method --- .../AbstractStoragePoolAllocator.java | 40 ++++++++++++------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/engine/storage/src/org/apache/cloudstack/storage/allocator/AbstractStoragePoolAllocator.java b/engine/storage/src/org/apache/cloudstack/storage/allocator/AbstractStoragePoolAllocator.java index d717f72f095..71360ee345e 100755 --- a/engine/storage/src/org/apache/cloudstack/storage/allocator/AbstractStoragePoolAllocator.java +++ b/engine/storage/src/org/apache/cloudstack/storage/allocator/AbstractStoragePoolAllocator.java @@ -180,21 +180,8 @@ public abstract class AbstractStoragePoolAllocator extends AdapterBase implement return false; } - if(HypervisorType.LXC.equals(dskCh.getHypervisorType())){ - if(Volume.Type.ROOT.equals(dskCh.getType())){ - //LXC ROOT disks supports NFS and local storage pools only - if(!(Storage.StoragePoolType.NetworkFilesystem.equals(pool.getPoolType()) || - Storage.StoragePoolType.Filesystem.equals(pool.getPoolType())) ){ - s_logger.debug("StoragePool does not support LXC ROOT disk, skipping this pool"); - return false; - } - } else if (Volume.Type.DATADISK.equals(dskCh.getType())){ - //LXC DATA disks supports NFS and local storage pools only - if(!Storage.StoragePoolType.RBD.equals(pool.getPoolType())){ - s_logger.debug("StoragePool does not support LXC DATA disk, skipping this pool"); - return false; - } - } + if(!checkHypervisorCompatibility(dskCh.getHypervisorType(), dskCh.getType(), pool.getPoolType())){ + return false; } // check capacity @@ -203,4 +190,27 @@ public abstract class AbstractStoragePoolAllocator extends AdapterBase implement requestVolumes.add(volume); return storageMgr.storagePoolHasEnoughIops(requestVolumes, pool) && storageMgr.storagePoolHasEnoughSpace(requestVolumes, pool); } + + /* + Check StoragePool and Volume type compatibility for the hypervisor + */ + private boolean checkHypervisorCompatibility(HypervisorType hyperType, Volume.Type volType, Storage.StoragePoolType poolType){ + if(HypervisorType.LXC.equals(hyperType)){ + if(Volume.Type.ROOT.equals(volType)){ + //LXC ROOT disks supports NFS and local storage pools only + if(!(Storage.StoragePoolType.NetworkFilesystem.equals(poolType) || + Storage.StoragePoolType.Filesystem.equals(poolType)) ){ + s_logger.debug("StoragePool does not support LXC ROOT disk, skipping this pool"); + return false; + } + } else if (Volume.Type.DATADISK.equals(volType)){ + //LXC DATA disks supports RBD storage pool only + if(!Storage.StoragePoolType.RBD.equals(poolType)){ + s_logger.debug("StoragePool does not support LXC DATA disk, skipping this pool"); + return false; + } + } + } + return true; + } }