package org.infinispan.client.hotrod.event; 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; import org.infinispan.util.logging.Log; import org.infinispan.util.logging.LogFactory; public class StickyServerLoadBalancingStrategy implements FailoverRequestBalancingStrategy { static Log log = LogFactory.getLog(StickyServerLoadBalancingStrategy.class); private InetSocketAddress stickyServer; private final RoundRobinBalancingStrategy delegate = new RoundRobinBalancingStrategy(); @Override public void setServers(Collection<SocketAddress> servers) { log.info("Set servers: " + servers); delegate.setServers(servers); stickyServer = (InetSocketAddress) servers.iterator().next(); } @Override public SocketAddress nextServer(Set<SocketAddress> failedServers) { if (failedServers != null && !failedServers.isEmpty()) return delegate.nextServer(failedServers); else { log.info("Select " + stickyServer + " for load balancing"); return stickyServer; } } }