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

szetszwo 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 ea949f1  RATIS-1047. Fix can not elect leader when higher priority 
server crash (#187)
ea949f1 is described below

commit ea949f17513c628a9f1ba582209ec7757e9cf4fa
Author: runzhiwang <[email protected]>
AuthorDate: Tue Sep 1 02:35:40 2020 +0800

    RATIS-1047. Fix can not elect leader when higher priority server crash 
(#187)
---
 .../src/main/java/org/apache/ratis/server/impl/LeaderElection.java  | 6 +++++-
 .../java/org/apache/ratis/server/impl/GroupManagementBaseTest.java  | 6 ++++++
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git 
a/ratis-server/src/main/java/org/apache/ratis/server/impl/LeaderElection.java 
b/ratis-server/src/main/java/org/apache/ratis/server/impl/LeaderElection.java
index 27e5a28..8a48d61 100644
--- 
a/ratis-server/src/main/java/org/apache/ratis/server/impl/LeaderElection.java
+++ 
b/ratis-server/src/main/java/org/apache/ratis/server/impl/LeaderElection.java
@@ -348,7 +348,11 @@ class LeaderElection implements Runnable {
       waitForNum--;
     }
     // received all the responses
-    return logAndReturn(Result.REJECTED, responses, exceptions, -1);
+    if (conf.hasMajority(votedPeers, server.getId())) {
+      return logAndReturn(Result.PASSED, responses, exceptions, -1);
+    } else {
+      return logAndReturn(Result.REJECTED, responses, exceptions, -1);
+    }
   }
 
   @Override
diff --git 
a/ratis-server/src/test/java/org/apache/ratis/server/impl/GroupManagementBaseTest.java
 
b/ratis-server/src/test/java/org/apache/ratis/server/impl/GroupManagementBaseTest.java
index a8cc541..a205ff2 100644
--- 
a/ratis-server/src/test/java/org/apache/ratis/server/impl/GroupManagementBaseTest.java
+++ 
b/ratis-server/src/test/java/org/apache/ratis/server/impl/GroupManagementBaseTest.java
@@ -158,6 +158,12 @@ public abstract class GroupManagementBaseTest extends 
BaseTest {
       Assert.assertTrue(leader.getId() == 
peers.get(suggestedLeaderIndex).getId());
     }, 10, TimeDuration.valueOf(1, TimeUnit.SECONDS), 
"testMultiGroupWithPriority", LOG);
 
+    cluster.killServer(peers.get(suggestedLeaderIndex).getId());
+    JavaUtils.attempt(() -> {
+      RaftServerImpl leader = RaftTestUtil.waitForLeader(cluster, 
newGroup.getGroupId());
+      Assert.assertTrue(leader.getId() != 
peers.get(suggestedLeaderIndex).getId());
+    }, 10, TimeDuration.valueOf(1, TimeUnit.SECONDS), 
"testMultiGroupWithPriority", LOG);
+
     cluster.shutdown();
   }
 

Reply via email to