protected List<StoragePool> reorderPoolsByCapacity(DeploymentPlan plan, List<StoragePool> pools) { Long clusterId = plan.getClusterId(); short capacityType; if(pools != null && pools.size() != 0){ capacityType = pools.get(0).getPoolType().isShared() ? Capacity.CAPACITY_TYPE_STORAGE_ALLOCATED : Capacity.CAPACITY_TYPE_LOCAL_STORAGE; } else{ return null; } List<Long> poolIdsByCapacity = capacityDao.orderHostsByFreeCapacity(clusterId, capacityType); if (s_logger.isDebugEnabled()) { s_logger.debug("List of pools in descending order of free capacity: "+ poolIdsByCapacity); } //now filter the given list of Pools by this ordered list Map<Long, StoragePool> poolMap = new HashMap<>(); for (StoragePool pool : pools) { poolMap.put(pool.getId(), pool); } List<Long> matchingPoolIds = new ArrayList<>(poolMap.keySet()); poolIdsByCapacity.retainAll(matchingPoolIds); List<StoragePool> reorderedPools = new ArrayList<>(); for(Long id: poolIdsByCapacity){ reorderedPools.add(poolMap.get(id)); } return reorderedPools; }
public static List<StoragePoolType> getNonSharedStoragePoolTypes() { List<StoragePoolType> nonSharedStoragePoolTypes = new ArrayList<StoragePoolType>(); for (StoragePoolType storagePoolType : StoragePoolType.values()) { if (!storagePoolType.isShared()) { nonSharedStoragePoolTypes.add(storagePoolType); } } return nonSharedStoragePoolTypes; }
@Override public Boolean fenceOff(VirtualMachine vm, Host host) { VirtualMachine.Type type = vm.getType(); if (type != VirtualMachine.Type.ConsoleProxy && type != VirtualMachine.Type.DomainRouter && type != VirtualMachine.Type.SecondaryStorageVm) { if (s_logger.isDebugEnabled()) { s_logger.debug("Don't know how to fence off " + type); } return null; } List<VolumeVO> vols = _volsDao.findByInstance(vm.getId()); for (VolumeVO vol : vols) { if (!vol.isRecreatable()) { if (s_logger.isDebugEnabled()) { s_logger.debug("Unable to fence off volumes that are not recreatable: " + vol); } return null; } if (vol.getPoolType().isShared()) { if (s_logger.isDebugEnabled()) { s_logger.debug("Unable to fence off volumes that are shared: " + vol); } return null; } } return true; } }
@Test public void isSharedStoragePool() { Assert.assertFalse(StoragePoolType.Filesystem.isShared()); Assert.assertTrue(StoragePoolType.NetworkFilesystem.isShared()); Assert.assertTrue(StoragePoolType.IscsiLUN.isShared()); Assert.assertTrue(StoragePoolType.Iscsi.isShared()); Assert.assertFalse(StoragePoolType.ISO.isShared()); Assert.assertTrue(StoragePoolType.Iscsi.isShared()); Assert.assertFalse(StoragePoolType.LVM.isShared()); Assert.assertTrue(StoragePoolType.CLVM.isShared()); Assert.assertTrue(StoragePoolType.RBD.isShared()); Assert.assertTrue(StoragePoolType.SharedMountPoint.isShared()); Assert.assertTrue(StoragePoolType.VMFS.isShared()); Assert.assertTrue(StoragePoolType.PreSetup.isShared()); Assert.assertFalse(StoragePoolType.EXT.isShared()); Assert.assertTrue(StoragePoolType.OCFS2.isShared()); Assert.assertTrue(StoragePoolType.SMB.isShared()); Assert.assertTrue(StoragePoolType.Gluster.isShared()); Assert.assertTrue(StoragePoolType.ManagedNFS.isShared()); }
@Override public boolean canVmRestartOnAnotherServer(long vmId) { List<VolumeVO> vols = _volsDao.findCreatedByInstance(vmId); for (VolumeVO vol : vols) { StoragePoolVO storagePoolVO = _storagePoolDao.findById(vol.getPoolId()); if (!vol.isRecreatable() && storagePoolVO != null && storagePoolVO.getPoolType() != null && !(storagePoolVO.getPoolType().isShared())) { return false; } } return true; }