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 2021/01/26 03:36:13 UTC
[incubator-ratis] branch master updated: RATIS-1295. Use a config
to enable/disable pre vote (#402)
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 162ae0f RATIS-1295. Use a config to enable/disable pre vote (#402)
162ae0f is described below
commit 162ae0f083191353382666d6bc7034c84450c7ec
Author: runzhiwang <51...@users.noreply.github.com>
AuthorDate: Tue Jan 26 11:36:03 2021 +0800
RATIS-1295. Use a config to enable/disable pre vote (#402)
---
.../java/org/apache/ratis/server/RaftServerConfigKeys.java | 10 ++++++++++
.../main/java/org/apache/ratis/server/impl/LeaderElection.java | 6 +++++-
.../java/org/apache/ratis/server/impl/LeaderElectionTests.java | 6 ++++++
3 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/ratis-server-api/src/main/java/org/apache/ratis/server/RaftServerConfigKeys.java b/ratis-server-api/src/main/java/org/apache/ratis/server/RaftServerConfigKeys.java
index f2f0596..9d5da7d 100644
--- a/ratis-server-api/src/main/java/org/apache/ratis/server/RaftServerConfigKeys.java
+++ b/ratis-server-api/src/main/java/org/apache/ratis/server/RaftServerConfigKeys.java
@@ -555,6 +555,16 @@ public interface RaftServerConfigKeys {
static void setLeaderStepDownWaitTime(RaftProperties properties, TimeDuration noLeaderTimeout) {
setTimeDuration(properties::setTimeDuration, LEADER_STEP_DOWN_WAIT_TIME_KEY, noLeaderTimeout);
}
+
+ String PRE_VOTE_KEY = PREFIX + ".pre-vote";
+ boolean PRE_VOTE_DEFAULT = true;
+ static boolean preVote(RaftProperties properties) {
+ return getBoolean(properties::getBoolean, PRE_VOTE_KEY, PRE_VOTE_DEFAULT, getDefaultLog());
+ }
+
+ static void setPreVote(RaftProperties properties, boolean enablePreVote) {
+ setBoolean(properties::setBoolean, PRE_VOTE_KEY, enablePreVote);
+ }
}
static void main(String[] args) {
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 81d275e..c1e3bab 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
@@ -23,6 +23,7 @@ import org.apache.ratis.protocol.RaftPeer;
import org.apache.ratis.protocol.RaftPeerId;
import org.apache.ratis.server.DivisionInfo;
import org.apache.ratis.server.RaftConfiguration;
+import org.apache.ratis.server.RaftServerConfigKeys;
import org.apache.ratis.server.protocol.TermIndex;
import org.apache.ratis.server.util.ServerStringUtils;
import org.apache.ratis.thirdparty.com.google.common.annotations.VisibleForTesting;
@@ -190,7 +191,10 @@ class LeaderElection implements Runnable {
this.lifeCycle = new LifeCycle(this);
this.daemon = new Daemon(this);
this.server = server;
- this.skipPreVote = skipPreVote;
+ RaftServerProxy proxy = server.getRaftServer();
+ this.skipPreVote = skipPreVote ||
+ !RaftServerConfigKeys.LeaderElection.preVote(
+ server.getRaftServer().getProperties());
}
void start() {
diff --git a/ratis-server/src/test/java/org/apache/ratis/server/impl/LeaderElectionTests.java b/ratis-server/src/test/java/org/apache/ratis/server/impl/LeaderElectionTests.java
index a6753d2..20e3127 100644
--- a/ratis-server/src/test/java/org/apache/ratis/server/impl/LeaderElectionTests.java
+++ b/ratis-server/src/test/java/org/apache/ratis/server/impl/LeaderElectionTests.java
@@ -21,6 +21,7 @@ import org.apache.log4j.Level;
import org.apache.ratis.BaseTest;
import org.apache.ratis.RaftTestUtil;
import org.apache.ratis.client.RaftClient;
+import org.apache.ratis.conf.RaftProperties;
import org.apache.ratis.metrics.RatisMetricRegistry;
import org.apache.ratis.protocol.RaftClientReply;
import org.apache.ratis.protocol.RaftGroupId;
@@ -417,6 +418,11 @@ public abstract class LeaderElectionTests<CLUSTER extends MiniRaftCluster>
when(server.getMemberId()).thenReturn(memberId);
LeaderElectionMetrics leaderElectionMetrics = LeaderElectionMetrics.getLeaderElectionMetrics(memberId, () -> 0);
when(server.getLeaderElectionMetrics()).thenReturn(leaderElectionMetrics);
+ RaftServerProxy proxy = mock(RaftServerProxy.class);
+ RaftProperties properties = new RaftProperties();
+ RaftServerConfigKeys.LeaderElection.setPreVote(properties, true);
+ when(proxy.getProperties()).thenReturn(properties);
+ when(server.getRaftServer()).thenReturn(proxy);
return server;
}
}