PeerDHT master = null;
PeerDHT slave = null;
ChannelCreator cc = null;
try {
StorageMemory s1 = new StorageMemory();
master = new PeerBuilderDHT(new PeerBuilder(new Number160("0xee")).start()).storage(s1).start();
IndirectReplication im = new IndirectReplication(master);
final AtomicInteger test1 = new AtomicInteger(0);
final AtomicInteger test2 = new AtomicInteger(0);
ResponsibilityListener responsibilityListener = new ResponsibilityListener() {
@Override
public void meResponsible(final Number160 locationKey) {
System.err.println("I'm responsible for " + locationKey + " / ");
test2.incrementAndGet();
}
@Override
public void meResponsible(Number160 locationKey, PeerAddress newPeer) {
System.err.println("I sync for " + locationKey + " / ");
}
@Override
public FutureDone<?> otherResponsible(Number160 locationKey, PeerAddress other) {
System.err.println("Other peer (" + other + ")is responsible for " + locationKey);
test1.incrementAndGet();
return null;
}
};
im.addResponsibilityListener(responsibilityListener);
im.start();
Number160 location = new Number160("0xff");
Map<Number160, Data> dataMap = new HashMap<Number160, Data>();
dataMap.put(Number160.ZERO, new Data("string"));
FutureChannelCreator fcc = master.peer().connectionBean().reservation().create(0, 1);
fcc.awaitUninterruptibly();
cc = fcc.channelCreator();
PutBuilder putBuilder = new PutBuilder(master, location);
putBuilder.domainKey(location);
putBuilder.dataMapContent(dataMap);
putBuilder.versionKey(Number160.ZERO);
FutureResponse fr = master.storeRPC().put(master.peerAddress(), putBuilder, cc);
fr.awaitUninterruptibly();
// s1.put(location, Number160.ZERO, null, dataMap, false, false);
final int slavePort = 7701;
slave = new PeerBuilderDHT(new PeerBuilder(new Number160("0xfe")).ports(slavePort).start()).start();
master.peerBean().peerMap().peerFound(slave.peerAddress(), null, null);
master.peerBean().peerMap().peerFailed(slave.peerAddress(), new PeerException(AbortCause.SHUTDOWN, "shutdown"));
Assert.assertEquals(1, test1.get());
Assert.assertEquals(2, test2.get());
} catch (Throwable t) {