package org.infinispan.client.hotrod;
import java.net.SocketAddress;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.infinispan.client.hotrod.test.MultiHotRodServersTest;
import org.infinispan.configuration.cache.CacheMode;
import org.infinispan.configuration.cache.ConfigurationBuilder;
import org.infinispan.server.hotrod.test.HotRodTestingUtil;
/**
* @author gustavonalle
* @since 8.0
*/
public abstract class BaseSegmentOwnershipTest extends MultiHotRodServersTest {
static final int NUM_SEGMENTS = 20;
static final int NUM_OWNERS = 2;
static final int NUM_SERVERS = 3;
protected Map<Integer, Set<SocketAddress>> invertMap(Map<SocketAddress, Set<Integer>> segmentsByServer) {
Map<Integer, Set<SocketAddress>> serversBySegment = new HashMap<>();
for (Map.Entry<SocketAddress, Set<Integer>> entry : segmentsByServer.entrySet()) {
for (Integer seg : entry.getValue()) {
serversBySegment.computeIfAbsent(seg, v -> new HashSet<>()).add(entry.getKey());
}
}
return serversBySegment;
}
protected abstract CacheMode getCacheMode();
protected ConfigurationBuilder getCacheConfiguration() {
ConfigurationBuilder builder = getDefaultClusteredCacheConfig(getCacheMode(), false);
builder.clustering().hash().numOwners(NUM_OWNERS).numSegments(NUM_SEGMENTS);
return HotRodTestingUtil.hotRodCacheConfiguration(builder);
}
@Override
protected void createCacheManagers() throws Throwable {
createHotRodServers(NUM_SERVERS, getCacheConfiguration());
}
@Override
protected org.infinispan.client.hotrod.configuration.ConfigurationBuilder createHotRodClientConfigurationBuilder(int serverPort) {
return super.createHotRodClientConfigurationBuilder(serverPort);
}
}