Skip to content

Commit 3a7fe5b

Browse files
HexiaoqiaoHarshitGupta11
authored andcommitted
HDFS-16504. Add parameter for NameNode to process getBloks request. (apache#4068). Contributed by Max Xie.
Signed-off-by: He Xiaoqiao <[email protected]>
1 parent d78c0bc commit 3a7fe5b

File tree

5 files changed

+40
-16
lines changed

5 files changed

+40
-16
lines changed

hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSConfigKeys.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -746,6 +746,10 @@ public class DFSConfigKeys extends CommonConfigurationKeys {
746746
*/
747747
public static final String DFS_NAMENODE_GETBLOCKS_MAX_QPS_KEY = "dfs.namenode.get-blocks.max-qps";
748748
public static final int DFS_NAMENODE_GETBLOCKS_MAX_QPS_DEFAULT = 20;
749+
public static final String DFS_NAMENODE_GETBLOCKS_CHECK_OPERATION_KEY
750+
= "dfs.namenode.get-blocks.check.operation";
751+
public static final boolean DFS_NAMENODE_GETBLOCKS_CHECK_OPERATION_DEFAULT
752+
= true;
749753

750754
public static final String DFS_BALANCER_MOVEDWINWIDTH_KEY = "dfs.balancer.movedWinWidth";
751755
public static final long DFS_BALANCER_MOVEDWINWIDTH_DEFAULT = 5400*1000L;

hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/balancer/NameNodeConnector.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -147,11 +147,11 @@ public static void checkOtherInstanceRunning(boolean toCheck) {
147147

148148
private final BalancerProtocols namenode;
149149
/**
150-
* If set requestToStandby true, Balancer will getBlocks from
150+
* If set getBlocksToStandby true, Balancer will getBlocks from
151151
* Standby NameNode only and it can reduce the performance impact of Active
152152
* NameNode, especially in a busy HA mode cluster.
153153
*/
154-
private boolean requestToStandby;
154+
private boolean getBlocksToStandby;
155155
private String nsId;
156156
private Configuration config;
157157
private final KeyManager keyManager;
@@ -191,9 +191,9 @@ public NameNodeConnector(String name, URI nameNodeUri, Path idPath,
191191

192192
this.namenode = NameNodeProxies.createProxy(conf, nameNodeUri,
193193
BalancerProtocols.class, fallbackToSimpleAuth).getProxy();
194-
this.requestToStandby = conf.getBoolean(
195-
DFSConfigKeys.DFS_HA_ALLOW_STALE_READ_KEY,
196-
DFSConfigKeys.DFS_HA_ALLOW_STALE_READ_DEFAULT);
194+
this.getBlocksToStandby = !conf.getBoolean(
195+
DFSConfigKeys.DFS_NAMENODE_GETBLOCKS_CHECK_OPERATION_KEY,
196+
DFSConfigKeys.DFS_NAMENODE_GETBLOCKS_CHECK_OPERATION_DEFAULT);
197197
this.config = conf;
198198

199199
this.fs = (DistributedFileSystem)FileSystem.get(nameNodeUri, conf);
@@ -318,7 +318,7 @@ public DatanodeStorageReport[] getLiveDatanodeStorageReport()
318318
private ProxyPair getProxy() throws IOException {
319319
boolean isRequestStandby = false;
320320
ClientProtocol clientProtocol = null;
321-
if (requestToStandby && nsId != null
321+
if (getBlocksToStandby && nsId != null
322322
&& HAUtil.isHAEnabled(config, nsId)) {
323323
List<ClientProtocol> namenodes =
324324
HAUtil.getProxiesForAllNameNodesInNameservice(config, nsId);

hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,12 @@ private boolean isClientPortInfoAbsent(CallerContext ctx){
505505
private final int snapshotDiffReportLimit;
506506
private final int blockDeletionIncrement;
507507

508+
/**
509+
* Whether enable checkOperation when call getBlocks.
510+
* It is enabled by default.
511+
*/
512+
private final boolean isGetBlocksCheckOperationEnabled;
513+
508514
/** Interval between each check of lease to release. */
509515
private final long leaseRecheckIntervalMs;
510516
/** Maximum time the lock is hold to release lease. */
@@ -1066,6 +1072,10 @@ static FSNamesystem loadFromDisk(Configuration conf) throws IOException {
10661072
Preconditions.checkArgument(blockDeletionIncrement > 0,
10671073
DFSConfigKeys.DFS_NAMENODE_BLOCK_DELETION_INCREMENT_KEY +
10681074
" must be a positive integer.");
1075+
this.isGetBlocksCheckOperationEnabled = conf.getBoolean(
1076+
DFSConfigKeys.DFS_NAMENODE_GETBLOCKS_CHECK_OPERATION_KEY,
1077+
DFSConfigKeys.DFS_NAMENODE_GETBLOCKS_CHECK_OPERATION_DEFAULT);
1078+
10691079
} catch(IOException e) {
10701080
LOG.error(getClass().getSimpleName() + " initialization failed.", e);
10711081
close();
@@ -1938,10 +1948,13 @@ public boolean isInStandbyState() {
19381948
*/
19391949
public BlocksWithLocations getBlocks(DatanodeID datanode, long size, long
19401950
minimumBlockSize, long timeInterval) throws IOException {
1941-
checkOperation(OperationCategory.READ);
1951+
OperationCategory checkOp =
1952+
isGetBlocksCheckOperationEnabled ? OperationCategory.READ :
1953+
OperationCategory.UNCHECKED;
1954+
checkOperation(checkOp);
19421955
readLock();
19431956
try {
1944-
checkOperation(OperationCategory.READ);
1957+
checkOperation(checkOp);
19451958
return getBlockManager().getBlocksWithLocations(datanode, size,
19461959
minimumBlockSize, timeInterval);
19471960
} finally {

hadoop-hdfs-project/hadoop-hdfs/src/main/resources/hdfs-default.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4119,6 +4119,14 @@
41194119
Mover, and StoragePolicySatisfier.
41204120
</description>
41214121
</property>
4122+
<property>
4123+
<name>dfs.namenode.get-blocks.check.operation</name>
4124+
<value>true</value>
4125+
<description>
4126+
Set false to disable checkOperation and getBlocks for Balancer
4127+
will route to Standby NameNode for HA mode setup.
4128+
</description>
4129+
</property>
41224130
<property>
41234131
<name>dfs.balancer.dispatcherThreads</name>
41244132
<value>200</value>

hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/balancer/TestBalancerWithHANameNodes.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,7 @@
1818
package org.apache.hadoop.hdfs.server.balancer;
1919

2020
import static org.apache.hadoop.fs.CommonConfigurationKeysPublic.IPC_CLIENT_CONNECT_MAX_RETRIES_KEY;
21-
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_HA_ALLOW_STALE_READ_DEFAULT;
22-
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_HA_ALLOW_STALE_READ_KEY;
23-
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_HA_TAILEDITS_PERIOD_KEY;
21+
import static org.apache.hadoop.hdfs.DFSConfigKeys.*;
2422
import static org.junit.Assert.assertEquals;
2523
import static org.junit.Assert.assertTrue;
2624
import static org.mockito.ArgumentMatchers.any;
@@ -146,8 +144,9 @@ void doTest(Configuration conf, boolean withHA) throws Exception {
146144
TestBalancer.createFile(cluster, TestBalancer.filePath, totalUsedSpace
147145
/ numOfDatanodes, (short) numOfDatanodes, 0);
148146

149-
boolean isRequestStandby = conf.getBoolean(
150-
DFS_HA_ALLOW_STALE_READ_KEY, DFS_HA_ALLOW_STALE_READ_DEFAULT);
147+
boolean isRequestStandby = !conf.getBoolean(
148+
DFS_NAMENODE_GETBLOCKS_CHECK_OPERATION_KEY,
149+
DFS_NAMENODE_GETBLOCKS_CHECK_OPERATION_DEFAULT);
151150
if (isRequestStandby) {
152151
HATestUtil.waitForStandbyToCatchUp(cluster.getNameNode(0),
153152
cluster.getNameNode(1));
@@ -182,7 +181,7 @@ void doTest(Configuration conf, boolean withHA) throws Exception {
182181
@Test(timeout = 60000)
183182
public void testBalancerRequestSBNWithHA() throws Exception {
184183
Configuration conf = new HdfsConfiguration();
185-
conf.setBoolean(DFS_HA_ALLOW_STALE_READ_KEY, true);
184+
conf.setBoolean(DFS_NAMENODE_GETBLOCKS_CHECK_OPERATION_KEY, false);
186185
conf.setLong(DFS_HA_TAILEDITS_PERIOD_KEY, 1);
187186
//conf.setBoolean(DFS_HA_BALANCER_REQUEST_STANDBY_KEY, true);
188187
TestBalancer.initConf(conf);
@@ -329,8 +328,8 @@ nsId, new Path("/test"),
329328
nncActive.close();
330329

331330
// Request to standby namenode.
332-
conf.setBoolean(DFSConfigKeys.DFS_HA_ALLOW_STALE_READ_KEY,
333-
true);
331+
conf.setBoolean(DFS_NAMENODE_GETBLOCKS_CHECK_OPERATION_KEY,
332+
false);
334333
NameNodeConnector nncStandby = new NameNodeConnector(
335334
"nncStandby", namenode,
336335
nsId, new Path("/test"),

0 commit comments

Comments
 (0)