public static void waitAndCheckNewConf(MiniRaftCluster cluster, RaftPeer[] peers, int numOfRemovedPeers, Collection<String> deadPeers) throws Exception { final long sleepMs = cluster.getMaxTimeout() * (numOfRemovedPeers + 2); JavaUtils.attempt(() -> waitAndCheckNewConf(cluster, peers, deadPeers), 3, sleepMs, "waitAndCheckNewConf", LOG); } private static void waitAndCheckNewConf(MiniRaftCluster cluster,
private void runTestAddRemovePeers(boolean leaderStepdown, CLUSTER cluster) throws Exception { RaftTestUtil.waitForLeader(cluster); PeerChanges change = cluster.addNewPeers(2, true); RaftPeer[] allPeers = cluster.removePeers(2, leaderStepdown, asList(change.newPeers)).allPeersInNewConf; // trigger setConfiguration cluster.setConfiguration(allPeers); // wait for the new configuration to take effect waitAndCheckNewConf(cluster, allPeers, 2, null); }
public static void waitAndCheckNewConf(MiniRaftCluster cluster, RaftPeer[] peers, int numOfRemovedPeers, Collection<RaftPeerId> deadPeers) throws Exception { final TimeDuration sleepTime = cluster.getTimeoutMax().apply(n -> n * (numOfRemovedPeers + 2)); JavaUtils.attempt(() -> waitAndCheckNewConf(cluster, peers, deadPeers), 10, sleepTime, "waitAndCheckNewConf", LOG); } private static void waitAndCheckNewConf(MiniRaftCluster cluster,
/** * remove 2 peers (5 peers -> 3 peers), no leader change */ @Test public void testRemovePeers() throws Exception { runWithNewCluster(5, cluster -> { RaftTestUtil.waitForLeader(cluster); // remove peers, leader still included in the new conf RaftPeer[] allPeers = cluster .removePeers(2, false, Collections.emptyList()).allPeersInNewConf; // trigger setConfiguration cluster.setConfiguration(allPeers); // wait for the new configuration to take effect waitAndCheckNewConf(cluster, allPeers, 2, null); }); }
/** * remove 2 peers (5 peers -> 3 peers), no leader change */ @Test public void testRemovePeers() throws Exception { LOG.info("Start testRemovePeers"); MiniRaftCluster cluster = getCluster(5); cluster.start(); try { RaftTestUtil.waitForLeader(cluster); // remove peers, leader still included in the new conf RaftPeer[] allPeers = cluster .removePeers(2, false, Collections.emptyList()).allPeersInNewConf; // trigger setConfiguration cluster.setConfiguration(allPeers); // wait for the new configuration to take effect waitAndCheckNewConf(cluster, allPeers, 2, null); } finally { cluster.shutdown(); } }
/** * add 2 new peers (3 peers -> 5 peers), no leader change */ @Test public void testAddPeers() throws Exception { runWithNewCluster(3, cluster -> { RaftTestUtil.waitForLeader(cluster); // add new peers RaftPeer[] allPeers = cluster.addNewPeers(2, true).allPeersInNewConf; // trigger setConfiguration cluster.setConfiguration(allPeers); // wait for the new configuration to take effect waitAndCheckNewConf(cluster, allPeers, 0, null); }); }
Assert.assertTrue(reconf1.get()); Assert.assertTrue(reconf2.get()); waitAndCheckNewConf(cluster, finalPeers.get(), 2, null); final RaftPeerId leader2 = RaftTestUtil.waitForLeader(cluster).getId();
private void testAddRemovePeers(boolean leaderStepdown) throws Exception { MiniRaftCluster cluster = getCluster(5); cluster.start(); try { RaftTestUtil.waitForLeader(cluster); PeerChanges change = cluster.addNewPeers(2, true); RaftPeer[] allPeers = cluster.removePeers(2, leaderStepdown, asList(change.newPeers)).allPeersInNewConf; // trigger setConfiguration cluster.setConfiguration(allPeers); // wait for the new configuration to take effect waitAndCheckNewConf(cluster, allPeers, 2, null); } finally { cluster.shutdown(); } }
waitAndCheckNewConf(cluster, c2.allPeersInNewConf, 2, Collections.singletonList(leaderId)); setConf.get(1, TimeUnit.SECONDS); } finally {
Assert.assertTrue(reconf1.get()); Assert.assertTrue(reconf2.get()); waitAndCheckNewConf(cluster, finalPeers.get(), 2, null);
waitAndCheckNewConf(cluster, c2.allPeersInNewConf, 2, Collections.singletonList(oldLeaderId)); } finally {
/** * add 2 new peers (3 peers -> 5 peers), no leader change */ @Test public void testAddPeers() throws Exception { LOG.info("Start testAddPeers"); MiniRaftCluster cluster = getCluster(3); cluster.start(); try { RaftTestUtil.waitForLeader(cluster); // add new peers RaftPeer[] allPeers = cluster.addNewPeers(2, true).allPeersInNewConf; // trigger setConfiguration cluster.setConfiguration(allPeers); // wait for the new configuration to take effect waitAndCheckNewConf(cluster, allPeers, 0, null); } finally { cluster.shutdown(); } }
RaftServerTestUtil.waitAndCheckNewConf(cluster, change.allPeersInNewConf, 0, null); } finally { cluster.shutdown();
RaftServerTestUtil.waitAndCheckNewConf(cluster, change.allPeersInNewConf, 0, null); } finally { cluster.shutdown();