*/
public void testScenario4() throws Exception {
assertClusterSize("Wrong cluster size.", 2);
final Object key = "key_s4";
ownerCheckAndInit(cache(1), key, "v");
final ControlledRpcManager rpcManager = replaceRpcManager(cache(0));
final ControlledLocalTopologyManager topologyManager = replaceTopologyManager(manager(0));
final int currentTopologyId = currentTopologyId(cache(0));
rpcManager.blockBefore(ClusteredGetCommand.class);
topologyManager.startBlocking(LatchType.CONSISTENT_HASH_UPDATE);
//consistency check. the remote get is triggered
assertTopologyId(currentTopologyId, cache(0));
Future<Object> remoteGetFuture = remoteGet(cache(0), key);
rpcManager.waitForCommandToBlock();
Future<Void> joinerFuture = addNode();
topologyManager.waitToBlock(LatchType.CONSISTENT_HASH_UPDATE);
//wait until the consistent_hash_update arrives in old owner. Also, awaits until the requestor receives the
//rebalance_start.
awaitForTopology(currentTopologyId + 2, cache(1));
awaitForTopology(currentTopologyId + 1, cache(0));
awaitUntilNotInDataContainer(cache(1), key);
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));