package org.infinispan.client.hotrod.impl.iteration;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.util.Collection;
import java.util.Set;
import org.infinispan.client.hotrod.impl.transport.tcp.FailoverRequestBalancingStrategy;
import org.infinispan.client.hotrod.impl.transport.tcp.RoundRobinBalancingStrategy;
public class PreferredServerBalancingStrategy implements FailoverRequestBalancingStrategy {
private final InetSocketAddress preferredServer;
private final RoundRobinBalancingStrategy roundRobinBalancingStrategy = new RoundRobinBalancingStrategy();
public PreferredServerBalancingStrategy(InetSocketAddress preferredServer) {
this.preferredServer = preferredServer;
}
@Override
public void setServers(Collection<SocketAddress> servers) {
roundRobinBalancingStrategy.setServers(servers);
}
@Override
public SocketAddress nextServer(Set<SocketAddress> failedServers) {
if (failedServers != null && !failedServers.isEmpty() && failedServers.contains(preferredServer)) {
return roundRobinBalancingStrategy.nextServer(failedServers);
}
return preferredServer;
}
}