package com.lambdaworks.redis.cluster; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.function.Predicate; import com.lambdaworks.redis.cluster.models.partitions.RedisClusterNode; /** * Accessor for Partitions. * * @author Mark Paluch */ class PartitionAccessor { private final Collection<RedisClusterNode> partitions; PartitionAccessor(Collection<RedisClusterNode> partitions) { this.partitions = partitions; } List<RedisClusterNode> getMasters() { return get(redisClusterNode -> redisClusterNode.is(RedisClusterNode.NodeFlag.MASTER)); } List<RedisClusterNode> getSlaves() { return get(redisClusterNode -> redisClusterNode.is(RedisClusterNode.NodeFlag.SLAVE)); } List<RedisClusterNode> getSlaves(RedisClusterNode master) { return get(redisClusterNode -> redisClusterNode.is(RedisClusterNode.NodeFlag.SLAVE) && master.getNodeId().equals(redisClusterNode.getSlaveOf())); } List<RedisClusterNode> getReadCandidates(RedisClusterNode master) { return get(redisClusterNode -> redisClusterNode.getNodeId().equals(master.getNodeId()) || (redisClusterNode.is(RedisClusterNode.NodeFlag.SLAVE) && master.getNodeId().equals( redisClusterNode.getSlaveOf()))); } List<RedisClusterNode> get(Predicate<RedisClusterNode> test) { List<RedisClusterNode> result = new ArrayList<>(partitions.size()); for (RedisClusterNode partition : partitions) { if (test.test(partition)) { result.add(partition); } } return result; } }