public static void finishRebalance(CacheTopology.Phase nextPhase, BlockingLocalTopologyManager... topologyManagers) throws InterruptedException { switch (nextPhase) { case READ_OLD_WRITE_ALL: confirmTopologyUpdate(CacheTopology.Phase.READ_OLD_WRITE_ALL, topologyManagers); // fallthrough case READ_ALL_WRITE_ALL: confirmTopologyUpdate(CacheTopology.Phase.READ_ALL_WRITE_ALL, topologyManagers); // fallthrough case READ_NEW_WRITE_ALL: confirmTopologyUpdate(CacheTopology.Phase.READ_NEW_WRITE_ALL, topologyManagers); // fallthrough case NO_REBALANCE: confirmTopologyUpdate(CacheTopology.Phase.NO_REBALANCE, topologyManagers); } }
confirmTopologyUpdate(Phase.READ_OLD_WRITE_ALL, topologyManager0, topologyManager1, joiner.topologyManager); confirmTopologyUpdate(Phase.READ_ALL_WRITE_ALL, topologyManager0, topologyManager1, joiner.topologyManager); topologyManager0.confirmTopologyUpdate(Phase.READ_NEW_WRITE_ALL); if (topologyOnNode2 > 2) { topologyManager1.confirmTopologyUpdate(Phase.READ_NEW_WRITE_ALL); joiner.topologyManager.confirmTopologyUpdate(Phase.READ_NEW_WRITE_ALL); topologyManager0.confirmTopologyUpdate(Phase.NO_REBALANCE); topologyManager1.confirmTopologyUpdate(Phase.READ_NEW_WRITE_ALL); joiner.topologyManager.confirmTopologyUpdate(Phase.READ_NEW_WRITE_ALL); topologyManager0.confirmTopologyUpdate(Phase.NO_REBALANCE); topologyManager1.confirmTopologyUpdate(Phase.NO_REBALANCE); joiner.topologyManager.confirmTopologyUpdate(Phase.NO_REBALANCE);
topologyManager.confirmTopologyUpdate(CacheTopology.Phase.NO_REBALANCE); topologyManager.confirmTopologyUpdate(CacheTopology.Phase.READ_OLD_WRITE_ALL); topologyManager.confirmTopologyUpdate(CacheTopology.Phase.READ_ALL_WRITE_ALL); topologyManager.confirmTopologyUpdate(CacheTopology.Phase.READ_NEW_WRITE_ALL); topologyManager.confirmTopologyUpdate(CacheTopology.Phase.NO_REBALANCE);
confirmTopologyUpdate(Phase.READ_OLD_WRITE_ALL, topologyManager0, topologyManager1, joiner.topologyManager); topologyManager0.confirmTopologyUpdate(Phase.READ_ALL_WRITE_ALL); awaitForTopology(currentTopologyId + 2, cache(0)); topologyManager1.confirmTopologyUpdate(Phase.READ_ALL_WRITE_ALL); joiner.topologyManager.confirmTopologyUpdate(Phase.READ_ALL_WRITE_ALL); topologyManager1.confirmTopologyUpdate(Phase.READ_NEW_WRITE_ALL); awaitForTopology(currentTopologyId + 3, cache(1)); joiner.topologyManager.confirmTopologyUpdate(Phase.READ_NEW_WRITE_ALL); topologyManager0.confirmTopologyUpdate(Phase.READ_NEW_WRITE_ALL); if (retryTopologyOnNode2 < 3) { joiner.topologyManager.confirmTopologyUpdate(Phase.READ_NEW_WRITE_ALL);
bltm.confirmTopologyUpdate(CacheTopology.Phase.TRANSITORY); assertEquals(0, stateAppliedLatch.getCount()); bltm.confirmTopologyUpdate(CacheTopology.Phase.NO_REBALANCE);
new WaitForTopologyInterceptor(currentTopologyId + topologyOnNode2))); confirmTopologyUpdate(Phase.READ_OLD_WRITE_ALL, topologyManager0, topologyManager1, joiner.topologyManager); confirmTopologyUpdate(Phase.READ_ALL_WRITE_ALL, topologyManager0, topologyManager1, joiner.topologyManager); topologyManager0.confirmTopologyUpdate(Phase.READ_NEW_WRITE_ALL); joiner.topologyManager.confirmTopologyUpdate(Phase.READ_NEW_WRITE_ALL); topologyManager1.confirmTopologyUpdate(Phase.READ_NEW_WRITE_ALL); topologyManager0.confirmTopologyUpdate(Phase.READ_NEW_WRITE_ALL); joiner.topologyManager.confirmTopologyUpdate(Phase.READ_NEW_WRITE_ALL);
confirmTopologyUpdate(Phase.READ_OLD_WRITE_ALL, topologyManager0, topologyManager1, joiner.topologyManager); topologyManager0.confirmTopologyUpdate(Phase.READ_ALL_WRITE_ALL); awaitForTopology(currentTopologyId + 2, cache(0)); topologyManager1.confirmTopologyUpdate(Phase.READ_ALL_WRITE_ALL); joiner.topologyManager.confirmTopologyUpdate(Phase.READ_ALL_WRITE_ALL); topologyManager1.confirmTopologyUpdate(Phase.READ_NEW_WRITE_ALL); topologyManager1.confirmTopologyUpdate(Phase.READ_ALL_WRITE_ALL); joiner.topologyManager.confirmTopologyUpdate(Phase.READ_NEW_WRITE_ALL); joiner.topologyManager.confirmTopologyUpdate(Phase.READ_ALL_WRITE_ALL); topologyManager0.confirmTopologyUpdate(Phase.READ_NEW_WRITE_ALL); if (topologyOnNode1 < 3) { topologyManager1.confirmTopologyUpdate(Phase.READ_NEW_WRITE_ALL); joiner.topologyManager.confirmTopologyUpdate(Phase.READ_NEW_WRITE_ALL);
confirmTopologyUpdate(Phase.READ_OLD_WRITE_ALL, topologyManager0, topologyManager1, joiner.topologyManager); confirmTopologyUpdate(Phase.READ_ALL_WRITE_ALL, topologyManager0, topologyManager1, joiner.topologyManager); topologyManager1.confirmTopologyUpdate(Phase.READ_NEW_WRITE_ALL); if (topologyOnNode0 > 2) { topologyManager0.confirmTopologyUpdate(Phase.READ_NEW_WRITE_ALL); joiner.topologyManager.confirmTopologyUpdate(Phase.READ_NEW_WRITE_ALL); topologyManager0.confirmTopologyUpdate(Phase.READ_NEW_WRITE_ALL); joiner.topologyManager.confirmTopologyUpdate(Phase.READ_NEW_WRITE_ALL);
topologyManager0.confirmTopologyUpdate(Phase.READ_OLD_WRITE_ALL); if (topologyOnNode1 > 0) { topologyManager1.confirmTopologyUpdate(Phase.READ_OLD_WRITE_ALL); topologyManager1.confirmTopologyUpdate(Phase.READ_OLD_WRITE_ALL); joiner.topologyManager.confirmTopologyUpdate(Phase.READ_OLD_WRITE_ALL); finishRebalance(Phase.READ_ALL_WRITE_ALL, topologyManager0, topologyManager1, joiner.topologyManager);
private BlockingLocalTopologyManager.BlockedTopology blockNewRebalance(BlockingLocalTopologyManager ltm, BlockingLocalTopologyManager.BlockedTopology blockedTopology) throws InterruptedException { if (blockedTopology.getCacheTopology().getPhase() == CacheTopology.Phase.READ_NEW_WRITE_ALL) { // Block the rebalance start first, and only then unblock the previous topology // Otherwise the order of the rebalance start and topology confirmation wouldn't be deterministic BlockingLocalTopologyManager.BlockedTopology newTopology = ltm.expectTopologyUpdate(CacheTopology.Phase.READ_OLD_WRITE_ALL); blockedTopology.unblock(); ltm.expectPhaseConfirmation().unblock(); return newTopology; } else { assertEquals(CacheTopology.Phase.READ_OLD_WRITE_ALL, blockedTopology.getCacheTopology().getPhase()); ltm.confirmTopologyUpdate(CacheTopology.Phase.READ_NEW_WRITE_ALL); return blockedTopology; } }
confirmTopologyUpdate(CacheTopology.Phase.READ_OLD_WRITE_ALL, localTopologyManager0, localTopologyManager2); confirmTopologyUpdate(CacheTopology.Phase.READ_ALL_WRITE_ALL, localTopologyManager0, localTopologyManager2); localTopologyManager0.expectTopologyUpdate(CacheTopology.Phase.READ_NEW_WRITE_ALL).unblock(); localTopologyManager2.expectTopologyUpdate(CacheTopology.Phase.READ_NEW_WRITE_ALL).unblock(); localTopologyManager2.expectPhaseConfirmation().unblock(); confirmTopologyUpdate(CacheTopology.Phase.READ_ALL_WRITE_ALL, localTopologyManager0, localTopologyManager2); confirmTopologyUpdate(CacheTopology.Phase.READ_NEW_WRITE_ALL, localTopologyManager0, localTopologyManager2); confirmTopologyUpdate(CacheTopology.Phase.NO_REBALANCE, localTopologyManager0, localTopologyManager2);
confirmTopologyUpdate(CacheTopology.Phase.READ_OLD_WRITE_ALL, nodeAController.topologyManager, nodeBController.topologyManager, nodeBController.topologyManager.confirmTopologyUpdate(CacheTopology.Phase.READ_ALL_WRITE_ALL); assertEquals(0, nodeC.commandLatch.getCount()); nodeAController.topologyManager.confirmTopologyUpdate(CacheTopology.Phase.READ_ALL_WRITE_ALL); nodeC.controller.topologyManager.confirmTopologyUpdate(CacheTopology.Phase.READ_ALL_WRITE_ALL); confirmTopologyUpdate(CacheTopology.Phase.READ_NEW_WRITE_ALL, nodeAController.topologyManager, nodeBController.topologyManager, nodeC.controller.topologyManager); confirmTopologyUpdate(CacheTopology.Phase.NO_REBALANCE, nodeAController.topologyManager, nodeBController.topologyManager, nodeC.controller.topologyManager); awaitForTopology(currentTopologyId + 4, cache(0));
confirmTopologyUpdate(Phase.READ_OLD_WRITE_ALL, topologyManager1); awaitForTopology(currentTopologyId + 1, cache(1)); blockedGet.send().receiveAll(); confirmTopologyUpdate(Phase.READ_OLD_WRITE_ALL, topologyManager0, joiner.topologyManager); finishRebalance(Phase.READ_ALL_WRITE_ALL, topologyManager0, topologyManager1, joiner.topologyManager);
.position(InterceptorConfiguration.Position.FIRST).interceptor(fri)); confirmTopologyUpdate(Phase.READ_OLD_WRITE_ALL, topologyManager0, topologyManager1); joiner.topologyManager.confirmTopologyUpdate(Phase.READ_OLD_WRITE_ALL); finishRebalance(Phase.READ_ALL_WRITE_ALL, topologyManager0, topologyManager1, joiner.topologyManager);