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();
}