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

shashikant pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git


The following commit(s) were added to refs/heads/master by this push:
     new 093f972  HDDS-5787. Provide capability in Ozone to enable ratis 
pre-vote (#2680)
093f972 is described below

commit 093f972886bffa2b6a971045d99b0f024ebd86fe
Author: Sammi Chen <[email protected]>
AuthorDate: Fri Oct 1 19:57:38 2021 +0800

    HDDS-5787. Provide capability in Ozone to enable ratis pre-vote (#2680)
---
 .../java/org/apache/hadoop/hdds/scm/ScmConfigKeys.java   |  4 ++++
 hadoop-hdds/common/src/main/resources/ozone-default.xml  | 14 ++++++++++++++
 .../transport/server/ratis/XceiverServerRatis.java       |  3 ++-
 .../hadoop/hdds/conf/DatanodeRatisServerConfig.java      | 16 ++++++++++++++++
 .../java/org/apache/hadoop/hdds/scm/ha/RatisUtil.java    | 11 +++++++----
 .../java/org/apache/hadoop/ozone/om/OMConfigKeys.java    |  6 ++++++
 .../hadoop/ozone/om/ratis/OzoneManagerRatisServer.java   |  6 ++++--
 7 files changed, 53 insertions(+), 7 deletions(-)

diff --git 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/ScmConfigKeys.java
 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/ScmConfigKeys.java
index 57b80cb..0d904e2 100644
--- 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/ScmConfigKeys.java
+++ 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/ScmConfigKeys.java
@@ -549,6 +549,10 @@ public final class ScmConfigKeys {
   public static final long
           OZONE_SCM_HA_RATIS_REQUEST_TIMEOUT_DEFAULT = 30 * 1000L;
 
+  public static final String OZONE_SCM_HA_RATIS_SERVER_ELECTION_PRE_VOTE =
+      "ozone.scm.ha.ratis.server.leaderelection.pre-vote";
+  public static final boolean
+      OZONE_SCM_HA_RATIS_SERVER_ELECTION_PRE_VOTE_DEFAULT = false;
 
   /**
    * Never constructed.
diff --git a/hadoop-hdds/common/src/main/resources/ozone-default.xml 
b/hadoop-hdds/common/src/main/resources/ozone-default.xml
index 0755b94..ce04904 100644
--- a/hadoop-hdds/common/src/main/resources/ozone-default.xml
+++ b/hadoop-hdds/common/src/main/resources/ozone-default.xml
@@ -1745,6 +1745,14 @@
   </property>
 
   <property>
+    <name>ozone.om.ratis.server.leaderelection.pre-vote </name>
+    <value>false</value>
+    <tag>OZONE, OM, RATIS, MANAGEMENT</tag>
+    <description>Enable/disable OM HA leader election pre-vote phase.
+    </description>
+  </property>
+
+  <property>
     <name>ozone.om.ratis.server.failure.timeout.duration</name>
     <value>120s</value>
     <tag>OZONE, OM, RATIS, MANAGEMENT</tag>
@@ -2903,6 +2911,12 @@
       election. Default is 1s.</description>
   </property>
   <property>
+    <name>ozone.scm.ha.ratis.server.leaderelection.pre-vote</name>
+    <value>false</value>
+    <tag>SCM, OZONE, HA, RATIS</tag>
+    <description>Enable/disable SCM HA leader election pre-vote 
phase.</description>
+  </property>
+  <property>
     <name>ozone.scm.ha.ratis.leader.ready.wait.timeout</name>
     <value>60s</value>
     <tag>SCM, OZONE, HA, RATIS</tag>
diff --git 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/transport/server/ratis/XceiverServerRatis.java
 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/transport/server/ratis/XceiverServerRatis.java
index 97d712e..d152da7 100644
--- 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/transport/server/ratis/XceiverServerRatis.java
+++ 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/transport/server/ratis/XceiverServerRatis.java
@@ -265,7 +265,8 @@ public final class XceiverServerRatis implements 
XceiverServerSpi {
     RaftServerConfigKeys.Log.setSegmentCacheNumMax(properties, 2);
 
     // Disable the pre vote feature in Ratis
-    RaftServerConfigKeys.LeaderElection.setPreVote(properties, false);
+    RaftServerConfigKeys.LeaderElection.setPreVote(properties,
+        conf.getObject(DatanodeRatisServerConfig.class).isPreVoteEnabled());
 
     // Set the ratis storage directory
     Collection<String> storageDirPaths =
diff --git 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/conf/DatanodeRatisServerConfig.java
 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/conf/DatanodeRatisServerConfig.java
index 8392789..25ed477 100644
--- 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/conf/DatanodeRatisServerConfig.java
+++ 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/conf/DatanodeRatisServerConfig.java
@@ -139,4 +139,20 @@ public class DatanodeRatisServerConfig {
   public void setLeaderNumPendingRequests(boolean delete) {
     this.shouldDeleteRatisLogDirectory = delete;
   }
+
+  @Config(key = "leaderelection.pre-vote",
+      defaultValue = "false",
+      type = ConfigType.BOOLEAN,
+      tags = {OZONE, DATANODE, RATIS},
+      description = "Flag to enable/disable ratis election pre-vote."
+  )
+  private boolean preVoteEnabled;
+
+  public boolean isPreVoteEnabled() {
+    return preVoteEnabled;
+  }
+
+  public void setPreVote(boolean preVote) {
+    this.preVoteEnabled = preVote;
+  }
 }
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/RatisUtil.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/RatisUtil.java
index 6f2a746..e949850 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/RatisUtil.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/RatisUtil.java
@@ -73,7 +73,7 @@ public final class RatisUtil {
     setRaftLogProperties(properties, conf);
     setRaftRetryCacheProperties(properties, conf);
     setRaftSnapshotProperties(properties, conf);
-    setRaftLeadElectionProperties(properties);
+    setRaftLeadElectionProperties(properties, conf);
     return properties;
   }
 
@@ -151,9 +151,12 @@ public final class RatisUtil {
    *
    */
   private static void setRaftLeadElectionProperties(
-      final RaftProperties properties) {
-    // Disable the pre vote feature (related to leader election) in Ratis
-    RaftServerConfigKeys.LeaderElection.setPreVote(properties, false);
+      final RaftProperties properties, final ConfigurationSource ozoneConf) {
+    //Disable/Enable the pre vote feature (related to leader election) in Ratis
+    RaftServerConfigKeys.LeaderElection.setPreVote(properties,
+        ozoneConf.getBoolean(
+            ScmConfigKeys.OZONE_SCM_HA_RATIS_SERVER_ELECTION_PRE_VOTE,
+            
ScmConfigKeys.OZONE_SCM_HA_RATIS_SERVER_ELECTION_PRE_VOTE_DEFAULT));
   }
 
   /**
diff --git 
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/OMConfigKeys.java
 
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/OMConfigKeys.java
index 563f99c..a02484d 100644
--- 
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/OMConfigKeys.java
+++ 
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/OMConfigKeys.java
@@ -161,6 +161,12 @@ public final class OMConfigKeys {
       OZONE_OM_RATIS_SERVER_FAILURE_TIMEOUT_DURATION_DEFAULT
       = TimeDuration.valueOf(120, TimeUnit.SECONDS);
 
+  public static final String OZONE_OM_RATIS_SERVER_ELECTION_PRE_VOTE =
+      "ozone.om.ratis.server.leaderelection.pre-vote";
+  public static final boolean
+      OZONE_OM_RATIS_SERVER_ELECTION_PRE_VOTE_DEFAULT = false;
+
+
   // OM SnapshotProvider configurations
   public static final String OZONE_OM_RATIS_SNAPSHOT_DIR =
       "ozone.om.ratis.snapshot.dir";
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/OzoneManagerRatisServer.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/OzoneManagerRatisServer.java
index 99ada2f..94762d4 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/OzoneManagerRatisServer.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/OzoneManagerRatisServer.java
@@ -549,8 +549,10 @@ public final class OzoneManagerRatisServer {
     // Set Ratis storage directory
     RaftServerConfigKeys.setStorageDir(properties,
         Collections.singletonList(new File(ratisStorageDir)));
-    // Disable the pre vote feature in Ratis
-    RaftServerConfigKeys.LeaderElection.setPreVote(properties, false);
+    // Disable/enable the pre vote feature in Ratis
+    RaftServerConfigKeys.LeaderElection.setPreVote(properties,
+        conf.getBoolean(OMConfigKeys.OZONE_OM_RATIS_SERVER_ELECTION_PRE_VOTE,
+            OMConfigKeys.OZONE_OM_RATIS_SERVER_ELECTION_PRE_VOTE_DEFAULT));
 
     // Set RAFT segment size
     final long raftSegmentSize = (long) conf.getStorageSize(

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to