//0: remote get target list obtained in topology i+1. reply obtained in topology i+2
//1: remote get received in topology i+2 (no longer a owner)
assertClusterSize("Wrong cluster size.", 2);
final Object key = "key_s7";
ownerCheckAndInit(cache(1), key, "v");
final ControlledRpcManager rpcManager0 = replaceRpcManager(cache(0));
final BlockingLocalTopologyManager topologyManager0 = replaceTopologyManager(manager(0));
final int currentTopologyId = currentTopologyId(cache(0));
rpcManager0.blockBefore(ClusteredGetCommand.class);
topologyManager0.startBlocking(LatchType.CONSISTENT_HASH_UPDATE);
NewNode joiner = addNode();
topologyManager0.waitToBlock(LatchType.CONSISTENT_HASH_UPDATE);
//consistency check. trigger the remote get.
assertTopologyId(currentTopologyId + 1, cache(0));
Future<Object> remoteGetFuture = remoteGet(cache(0), key);
rpcManager0.waitForCommandToBlock();
topologyManager0.stopBlocking(LatchType.CONSISTENT_HASH_UPDATE);
//wait until the consistent_hash_update arrives in old owner and in the requestor.
awaitForTopology(currentTopologyId + 2, cache(1));
awaitForTopology(currentTopologyId + 2, cache(0));
awaitForTopology(currentTopologyId + 2, cache(2));
awaitUntilNotInDataContainer(cache(1), key);
rpcManager0.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 + 2, cache(0));