public void testScenario6_1() throws Exception {
assertClusterSize("Wrong cluster size.", 2);
final Object key = "key_s6";
ownerCheckAndInit(cache(1), key, "v");
final ControlledRpcManager rpcManager = replaceRpcManager(cache(0));
final BlockingLocalTopologyManager topologyManager = replaceTopologyManager(manager(0));
final int currentTopologyId = currentTopologyId(cache(0));
rpcManager.blockBefore(ClusteredGetCommand.class);
topologyManager.startBlocking(LatchType.CONSISTENT_HASH_UPDATE);
NewNode joiner = addNode();
topologyManager.waitToBlock(LatchType.CONSISTENT_HASH_UPDATE);
//consistency check. trigger the remote get.
assertTopologyId(currentTopologyId + 1, cache(0));
Future<Object> remoteGetFuture = remoteGet(cache(0), key);
rpcManager.waitForCommandToBlock();
//wait until the consistent_hash_update arrives in old owner
awaitForTopology(currentTopologyId + 2, cache(1));
awaitForTopology(currentTopologyId + 2, cache(2));
awaitUntilNotInDataContainer(cache(1), key);
joiner.localTopologyManager.waitToBlock(LatchType.CONSISTENT_HASH_UPDATE);
rpcManager.stopBlocking();
//check the value returned and make sure that the requestor is in the correct topology id (consistency check)
assertEquals("Wrong value from remote get.", "v", remoteGetFuture.get());
assertTopologyId(currentTopologyId + 1, cache(0));
topologyManager.stopBlocking(LatchType.CONSISTENT_HASH_UPDATE);
joiner.joinerFuture.get();
}