From 3a12886474549aa72370fc6cb933d7c896e4e4c9 Mon Sep 17 00:00:00 2001 From: zhujianghua Date: Wed, 7 Jul 2021 18:21:58 +0800 Subject: [PATCH] HDFS-16118.Improve the number of handlers that initialize NameNodeRpcServer#clientRpcServer. --- .../java/org/apache/hadoop/ipc/Server.java | 5 ++++ .../server/namenode/NameNodeRpcServer.java | 1 + .../namenode/TestNameNodeRpcServer.java | 26 +++++++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Server.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Server.java index 77d580e227fd3..964f867218008 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Server.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Server.java @@ -3588,6 +3588,11 @@ public int getNumReaders() { return readThreads; } + @VisibleForTesting + public int getHandlerCount() { + return handlerCount; + } + /** * When the read or write buffer size is larger than this limit, i/o will be * done in chunks of this size. Most RPC requests and responses would be diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNodeRpcServer.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNodeRpcServer.java index 580a991f343a8..de7e9b2990d31 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNodeRpcServer.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNodeRpcServer.java @@ -411,6 +411,7 @@ public NameNodeRpcServer(Configuration conf, NameNode nn) DFS_NAMENODE_LIFELINE_HANDLER_RATIO_DEFAULT); lifelineHandlerCount = Math.max( (int)(handlerCount * lifelineHandlerRatio), 1); + handlerCount = handlerCount - lifelineHandlerCount; } lifelineRpcServer = new RPC.Builder(conf) .setProtocol(HAServiceProtocolPB.class) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestNameNodeRpcServer.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestNameNodeRpcServer.java index ada93e84f0ead..6285eea708ffe 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestNameNodeRpcServer.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestNameNodeRpcServer.java @@ -29,6 +29,7 @@ import java.io.IOException; import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.hdfs.DFSConfigKeys; import org.apache.hadoop.hdfs.HdfsConfiguration; import org.apache.hadoop.hdfs.MiniDFSCluster; @@ -59,5 +60,30 @@ public void testNamenodeRpcBindAny() throws IOException { conf.unset(DFS_NAMENODE_RPC_BIND_HOST_KEY); } } + + @Test + public void testLifelineHandlerCount() throws IOException { + Configuration conf = new HdfsConfiguration(); + conf.set(DFSConfigKeys.DFS_NAMENODE_LIFELINE_RPC_ADDRESS_KEY, "0.0.0.0:0"); + conf.setInt(DFSConfigKeys.DFS_NAMENODE_HANDLER_COUNT_KEY, 20); + conf.setInt(DFSConfigKeys.DFS_NAMENODE_LIFELINE_HANDLER_COUNT_KEY, -1); + + MiniDFSCluster cluster = null; + try { + cluster = new MiniDFSCluster.Builder(conf).build(); + cluster.waitActive(); + int lifeHandlerCount = ((NameNodeRpcServer)cluster.getNameNodeRpc()) + .getLifelineRpcServer().getHandlerCount(); + assertEquals(2, lifeHandlerCount); + + int clientHandlerCount = ((NameNodeRpcServer)cluster.getNameNodeRpc()) + .getClientRpcServer().getHandlerCount(); + assertEquals(18, clientHandlerCount); + } finally { + if (cluster != null) { + cluster.shutdown(); + } + } + } }