diff --git a/server/src/main/java/com/cloud/server/ManagementServerImpl.java b/server/src/main/java/com/cloud/server/ManagementServerImpl.java index f2eaeaf3f33..83f3fc05d98 100644 --- a/server/src/main/java/com/cloud/server/ManagementServerImpl.java +++ b/server/src/main/java/com/cloud/server/ManagementServerImpl.java @@ -1488,21 +1488,26 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe } else { suitablePools = allPools; } - abstractDataStoreClustersList((List) allPools); - abstractDataStoreClustersList((List) suitablePools); + List avoidPools = new ArrayList<>(); + if (srcVolumePool.getParent() != 0L) { + StoragePool datastoreCluster = _poolDao.findById(srcVolumePool.getParent()); + avoidPools.add(datastoreCluster); + } + abstractDataStoreClustersList((List) allPools, new ArrayList()); + abstractDataStoreClustersList((List) suitablePools, avoidPools); return new Pair, List>(allPools, suitablePools); } - private void abstractDataStoreClustersList(List storagePools) { + private void abstractDataStoreClustersList(List storagePools, List avoidPools) { Predicate childDatastorePredicate = pool -> (pool.getParent() != 0); List childDatastores = storagePools.stream().filter(childDatastorePredicate).collect(Collectors.toList()); - + storagePools.removeAll(avoidPools); if (!childDatastores.isEmpty()) { storagePools.removeAll(childDatastores); Set parentStoragePoolIds = childDatastores.stream().map(mo -> mo.getParent()).collect(Collectors.toSet()); for (Long parentStoragePoolId : parentStoragePoolIds) { StoragePool parentPool = _poolDao.findById(parentStoragePoolId); - if (!storagePools.contains(parentPool)) + if (!storagePools.contains(parentPool) && !avoidPools.contains(parentPool)) storagePools.add(parentPool); } }