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 + '}';
}
}