package org.infinispan.statetransfer; import java.io.Serializable; import java.util.Random; import org.infinispan.distribution.ch.ConsistentHash; /** * A key that maps to a given data segment of the ConsistentHash. * * @author anistor@redhat.com * @since 5.2 */ final class TestKey implements Serializable { private static final long serialVersionUID = -42; /** * A name used for easier debugging. This is not relevant for equals() and hashCode(). */ private final String name; /** * A carefully crafted hash code. */ private final int hashCode; public TestKey(String name, int segmentId, ConsistentHash ch) { if (segmentId < 0 || segmentId >= ch.getNumSegments()) { throw new IllegalArgumentException("segmentId is out of range"); } this.name = name; Random rnd = new Random(); Integer r; do { r = rnd.nextInt(); } while (segmentId != ch.getSegment(r)); hashCode = r; } @Override public int hashCode() { return hashCode; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || o.getClass() != TestKey.class) return false; TestKey other = (TestKey) o; return hashCode == other.hashCode; } @Override public String toString() { return "TestKey{name=" + name + ", hashCode=" + hashCode + '}'; } }