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

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


The following commit(s) were added to refs/heads/master by this push:
     new a9990f6  HDDS-2622. Add config parameter for setting limit on total 
bytes of pending requests in Ratis. (#264)
a9990f6 is described below

commit a9990f60d0a0d7e6fd493cb58e4a4fa85455e8bc
Author: Hanisha Koneru <hanishakon...@apache.org>
AuthorDate: Wed Dec 4 21:21:47 2019 -0800

    HDDS-2622. Add config parameter for setting limit on total bytes of pending 
requests in Ratis. (#264)
---
 .../org/apache/hadoop/hdds/scm/ScmConfigKeys.java  |  5 +++++
 .../org/apache/hadoop/ozone/OzoneConfigKeys.java   |  5 +++++
 .../common/src/main/resources/ozone-default.xml    |  8 ++++++++
 .../transport/server/ratis/XceiverServerRatis.java | 24 +++++++++++++++++-----
 4 files changed, 37 insertions(+), 5 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 02aba5c..00d326e 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
@@ -110,6 +110,11 @@ public final class ScmConfigKeys {
       "dfs.container.ratis.leader.num.pending.requests";
   public static final int
       DFS_CONTAINER_RATIS_LEADER_NUM_PENDING_REQUESTS_DEFAULT = 4096;
+  public static final String DFS_CONTAINER_RATIS_LEADER_PENDING_BYTES_LIMIT =
+      "dfs.container.ratis.leader.pending.bytes.limit";
+  public static final String
+      DFS_CONTAINER_RATIS_LEADER_PENDING_BYTES_LIMIT_DEFAULT = "1GB";
+
   // expiry interval stateMachineData cache entry inside containerStateMachine
   public static final String
       DFS_CONTAINER_RATIS_STATEMACHINEDATA_CACHE_EXPIRY_INTERVAL =
diff --git 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/OzoneConfigKeys.java 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/OzoneConfigKeys.java
index 2705dfa..4b18d12 100644
--- 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/OzoneConfigKeys.java
+++ 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/OzoneConfigKeys.java
@@ -331,6 +331,11 @@ public final class OzoneConfigKeys {
   public static final int
       DFS_CONTAINER_RATIS_LEADER_NUM_PENDING_REQUESTS_DEFAULT =
       ScmConfigKeys.DFS_CONTAINER_RATIS_LEADER_NUM_PENDING_REQUESTS_DEFAULT;
+  public static final String DFS_CONTAINER_RATIS_LEADER_PENDING_BYTES_LIMIT =
+      ScmConfigKeys.DFS_CONTAINER_RATIS_LEADER_PENDING_BYTES_LIMIT;
+  public static final String
+      DFS_CONTAINER_RATIS_LEADER_PENDING_BYTES_LIMIT_DEFAULT =
+      ScmConfigKeys.DFS_CONTAINER_RATIS_LEADER_PENDING_BYTES_LIMIT_DEFAULT;
   public static final String DFS_RATIS_SERVER_REQUEST_TIMEOUT_DURATION_KEY =
       ScmConfigKeys.DFS_RATIS_SERVER_REQUEST_TIMEOUT_DURATION_KEY;
   public static final TimeDuration
diff --git a/hadoop-hdds/common/src/main/resources/ozone-default.xml 
b/hadoop-hdds/common/src/main/resources/ozone-default.xml
index 0dfd179..22d94f6 100644
--- a/hadoop-hdds/common/src/main/resources/ozone-default.xml
+++ b/hadoop-hdds/common/src/main/resources/ozone-default.xml
@@ -212,6 +212,14 @@
     </description>
   </property>
   <property>
+    <name>dfs.container.ratis.leader.pending.bytes.limit</name>
+    <value>1GB</value>
+    <tag>OZONE, RATIS, PERFORMANCE</tag>
+    <description>Limit on the total bytes of pending requests after which
+      leader starts rejecting requests from client.
+    </description>
+  </property>
+  <property>
     <name>dfs.container.ratis.replication.level</name>
     <value>MAJORITY</value>
     <tag>OZONE, 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 a76944b..961df2c 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
@@ -231,11 +231,10 @@ public final class XceiverServerRatis implements 
XceiverServerSpi {
       setAutoTriggerEnabled(properties, true);
     RaftServerConfigKeys.Snapshot.
       setAutoTriggerThreshold(properties, snapshotThreshold);
-    int maxPendingRequets = conf.getInt(
-        OzoneConfigKeys.DFS_CONTAINER_RATIS_LEADER_NUM_PENDING_REQUESTS,
-        OzoneConfigKeys.DFS_CONTAINER_RATIS_LEADER_NUM_PENDING_REQUESTS_DEFAULT
-    );
-    RaftServerConfigKeys.Write.setElementLimit(properties, maxPendingRequets);
+
+    // Set the limit on num/ bytes of pending requests a Ratis leader can hold
+    setPendingRequestsLimits(properties);
+
     int logQueueNumElements =
         conf.getInt(OzoneConfigKeys.DFS_CONTAINER_RATIS_LOG_QUEUE_NUM_ELEMENTS,
             
OzoneConfigKeys.DFS_CONTAINER_RATIS_LOG_QUEUE_NUM_ELEMENTS_DEFAULT);
@@ -394,6 +393,21 @@ public final class XceiverServerRatis implements 
XceiverServerSpi {
     return rpc;
   }
 
+  private void setPendingRequestsLimits(RaftProperties properties) {
+    final int maxPendingRequests = conf.getInt(
+        OzoneConfigKeys.DFS_CONTAINER_RATIS_LEADER_NUM_PENDING_REQUESTS,
+        OzoneConfigKeys.DFS_CONTAINER_RATIS_LEADER_NUM_PENDING_REQUESTS_DEFAULT
+    );
+    RaftServerConfigKeys.Write.setElementLimit(properties, maxPendingRequests);
+
+    final int pendingRequestsByteLimit = (int)conf.getStorageSize(
+        OzoneConfigKeys.DFS_CONTAINER_RATIS_LEADER_PENDING_BYTES_LIMIT,
+        OzoneConfigKeys.DFS_CONTAINER_RATIS_LEADER_PENDING_BYTES_LIMIT_DEFAULT,
+        StorageUnit.BYTES);
+    RaftServerConfigKeys.Write.setByteLimit(properties,
+        pendingRequestsByteLimit);
+  }
+
   public static XceiverServerRatis newXceiverServerRatis(
       DatanodeDetails datanodeDetails, OzoneConfiguration ozoneConf,
       ContainerDispatcher dispatcher, ContainerController containerController,


---------------------------------------------------------------------
To unsubscribe, e-mail: ozone-commits-unsubscr...@hadoop.apache.org
For additional commands, e-mail: ozone-commits-h...@hadoop.apache.org

Reply via email to