package org.dcache.pool.migration;
import java.util.List;
import java.util.Random;
import diskCacheV111.pools.PoolCostInfo;
import diskCacheV111.vehicles.PoolManagerPoolInformation;
import static java.util.stream.Collectors.toList;
/**
* Implements a pool selection strategy in which the pool is selected
* randomly from the list.
*/
public class RandomPoolSelectionStrategy
implements PoolSelectionStrategy
{
private final Random _random = new Random();
@Override
public PoolManagerPoolInformation
select(List<PoolManagerPoolInformation> pools)
{
List<PoolManagerPoolInformation> nonFullPools =
pools.stream().filter(RandomPoolSelectionStrategy::hasAvailableSpace).collect(toList());
if (nonFullPools.isEmpty()) {
return null;
}
return nonFullPools.get(_random.nextInt(nonFullPools.size()));
}
private static boolean hasAvailableSpace(PoolManagerPoolInformation pool)
{
PoolCostInfo.PoolSpaceInfo info = pool.getPoolCostInfo().getSpaceInfo();
return info.getFreeSpace() + info.getRemovableSpace() >= info.getGap();
}
}