You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ratis.apache.org by ru...@apache.org on 2020/09/14 14:11:15 UTC

[incubator-ratis] branch master updated: RATIS-1063. Failed UT: testOldLeaderCommit: expected leader is different than actual leader (#197)

This is an automated email from the ASF dual-hosted git repository.

runzhiwang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-ratis.git


The following commit(s) were added to refs/heads/master by this push:
     new 5bf1430  RATIS-1063. Failed UT: testOldLeaderCommit: expected leader is different than actual leader (#197)
5bf1430 is described below

commit 5bf143000368b8c10353fe092f25b6d3124df69a
Author: Rui Wang <am...@users.noreply.github.com>
AuthorDate: Mon Sep 14 07:11:04 2020 -0700

    RATIS-1063. Failed UT: testOldLeaderCommit: expected leader is different than actual leader (#197)
---
 .../test/java/org/apache/ratis/RaftBasicTests.java   | 20 +++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)

diff --git a/ratis-server/src/test/java/org/apache/ratis/RaftBasicTests.java b/ratis-server/src/test/java/org/apache/ratis/RaftBasicTests.java
index d253b2b..c17004e 100644
--- a/ratis-server/src/test/java/org/apache/ratis/RaftBasicTests.java
+++ b/ratis-server/src/test/java/org/apache/ratis/RaftBasicTests.java
@@ -19,6 +19,7 @@ package org.apache.ratis;
 
 import com.codahale.metrics.Gauge;
 
+import java.util.Set;
 import org.apache.log4j.Level;
 import org.apache.ratis.RaftTestUtil.SimpleMessage;
 import org.apache.ratis.client.RaftClient;
@@ -181,8 +182,8 @@ public abstract class RaftBasicTests<CLUSTER extends MiniRaftCluster>
     final long term = leader.getState().getCurrentTerm();
 
     List<RaftServerImpl> followers = cluster.getFollowers();
-    final RaftServerImpl followerToSendLog = followers.get(0);
-    for (int i = 1; i < NUM_SERVERS - 1; i++) {
+    final List<RaftServerImpl> followersToSendLog = followers.subList(0, followers.size() / 2);
+    for (int i = followers.size() / 2; i < NUM_SERVERS - 1; i++) {
       RaftServerImpl follower = followers.get(i);
       cluster.killServer(follower.getId());
     }
@@ -191,22 +192,27 @@ public abstract class RaftBasicTests<CLUSTER extends MiniRaftCluster>
     RaftTestUtil.sendMessageInNewThread(cluster, leaderId, messages);
 
     Thread.sleep(cluster.getTimeoutMax().toLong(TimeUnit.MILLISECONDS) + 100);
-    RaftLog followerLog = followerToSendLog.getState().getLog();
-    Assert.assertTrue(RaftTestUtil.logEntriesContains(followerLog, messages));
+    for (RaftServerImpl followerToSendLog : followersToSendLog) {
+      RaftLog followerLog = followerToSendLog.getState().getLog();
+      Assert.assertTrue(RaftTestUtil.logEntriesContains(followerLog, messages));
+    }
 
     LOG.info(String.format("killing old leader: %s", leaderId.toString()));
     cluster.killServer(leaderId);
 
-    for (int i = 1; i < 3; i++) {
+    for (int i = followers.size() / 2; i < NUM_SERVERS - 1; i++) {
       RaftServerImpl follower = followers.get(i);
       LOG.info(String.format("restarting follower: %s", follower.getId().toString()));
-      cluster.restartServer(follower.getId(), false );
+      cluster.restartServer(follower.getId(), false);
     }
 
     Thread.sleep(cluster.getTimeoutMax().toLong(TimeUnit.MILLISECONDS) * 5);
     // confirm the server with log is elected as new leader.
     final RaftPeerId newLeaderId = waitForLeader(cluster).getId();
-    Assert.assertEquals(followerToSendLog.getId(), newLeaderId);
+    Set<RaftPeerId> followersToSendLogIds =
+        followersToSendLog.stream().map(f -> f.getId()).collect(Collectors.toSet());
+
+    Assert.assertTrue(followersToSendLogIds.contains(newLeaderId));
 
     cluster.getServerAliveStream().map(s -> s.getState().getLog())
         .forEach(log -> RaftTestUtil.assertLogEntries(log, term, messages));