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