You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by ay...@apache.org on 2021/09/14 08:55:01 UTC
[hadoop] branch trunk updated: HDFS-15920.Solve the problem that
the value of SafeModeMonitor#RECHECK_INTERVAL can be configured. (#2831).
Contributed by JiangHua Zhu.
This is an automated email from the ASF dual-hosted git repository.
ayushsaxena pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/hadoop.git
The following commit(s) were added to refs/heads/trunk by this push:
new 1032104 HDFS-15920.Solve the problem that the value of SafeModeMonitor#RECHECK_INTERVAL can be configured. (#2831). Contributed by JiangHua Zhu.
1032104 is described below
commit 1032104b9ac473b25d3ed7cc53dca7a8530d79e1
Author: jianghuazhu <74...@qq.com>
AuthorDate: Tue Sep 14 16:54:36 2021 +0800
HDFS-15920.Solve the problem that the value of SafeModeMonitor#RECHECK_INTERVAL can be configured. (#2831). Contributed by JiangHua Zhu.
Signed-off-by: Ayush Saxena <ay...@apache.org>
---
.../java/org/apache/hadoop/hdfs/DFSConfigKeys.java | 4 ++++
.../blockmanagement/BlockManagerSafeMode.java | 22 ++++++++++++++++++----
.../src/main/resources/hdfs-default.xml | 8 ++++++++
.../blockmanagement/TestBlockManagerSafeMode.java | 12 ++++++++++++
4 files changed, 42 insertions(+), 4 deletions(-)
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSConfigKeys.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSConfigKeys.java
index f6c54dd..942929a 100755
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSConfigKeys.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSConfigKeys.java
@@ -207,6 +207,10 @@ public class DFSConfigKeys extends CommonConfigurationKeys {
"dfs.namenode.replqueue.threshold-pct";
public static final String DFS_NAMENODE_SAFEMODE_MIN_DATANODES_KEY = "dfs.namenode.safemode.min.datanodes";
public static final int DFS_NAMENODE_SAFEMODE_MIN_DATANODES_DEFAULT = 0;
+ public static final String DFS_NAMENODE_SAFEMODE_RECHECK_INTERVAL_KEY =
+ "dfs.namenode.safemode.recheck.interval";
+ public static final long DFS_NAMENODE_SAFEMODE_RECHECK_INTERVAL_DEFAULT =
+ 1000;
public static final String DFS_NAMENODE_SECONDARY_HTTP_ADDRESS_KEY =
HdfsClientConfigKeys.DeprecatedKeys.DFS_NAMENODE_SECONDARY_HTTP_ADDRESS_KEY;
public static final String DFS_NAMENODE_SECONDARY_HTTP_ADDRESS_DEFAULT =
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManagerSafeMode.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManagerSafeMode.java
index d731143..0bc6613 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManagerSafeMode.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManagerSafeMode.java
@@ -109,7 +109,7 @@ class BlockManagerSafeMode {
/** Timestamp of the safe mode initialized. */
private long startTime;
/** the safe mode monitor thread. */
- private final Daemon smmthread = new Daemon(new SafeModeMonitor());
+ private final Daemon smmthread;
/** time of the last status printout */
private long lastStatusReport;
@@ -156,6 +156,7 @@ class BlockManagerSafeMode {
MILLISECONDS);
this.inRollBack = isInRollBackMode(NameNode.getStartupOption(conf));
+ this.smmthread = new Daemon(new SafeModeMonitor(conf));
LOG.info("{} = {}", DFS_NAMENODE_SAFEMODE_THRESHOLD_PCT_KEY, threshold);
LOG.info("{} = {}", DFS_NAMENODE_SAFEMODE_MIN_DATANODES_KEY,
@@ -638,9 +639,22 @@ class BlockManagerSafeMode {
* Periodically check whether it is time to leave safe mode.
* This thread starts when the threshold level is reached.
*/
- private class SafeModeMonitor implements Runnable {
+ final private class SafeModeMonitor implements Runnable {
/** Interval in msec for checking safe mode. */
- private static final long RECHECK_INTERVAL = 1000;
+ private long recheckInterval;
+
+ private SafeModeMonitor(Configuration conf) {
+ recheckInterval = conf.getLong(
+ DFSConfigKeys.DFS_NAMENODE_SAFEMODE_RECHECK_INTERVAL_KEY,
+ DFSConfigKeys.DFS_NAMENODE_SAFEMODE_RECHECK_INTERVAL_DEFAULT);
+ if (recheckInterval < 1) {
+ LOG.warn("Invalid value for " +
+ DFSConfigKeys.DFS_NAMENODE_SAFEMODE_RECHECK_INTERVAL_DEFAULT +
+ ".Should be greater than 0, but is {}", recheckInterval);
+ recheckInterval = DFSConfigKeys.DFS_NAMENODE_SAFEMODE_RECHECK_INTERVAL_DEFAULT;
+ }
+ LOG.info("Using {} as SafeModeMonitor Interval", recheckInterval);
+ }
@Override
public void run() {
@@ -660,7 +674,7 @@ class BlockManagerSafeMode {
}
try {
- Thread.sleep(RECHECK_INTERVAL);
+ Thread.sleep(recheckInterval);
} catch (InterruptedException ignored) {
}
}
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/resources/hdfs-default.xml b/hadoop-hdfs-project/hadoop-hdfs/src/main/resources/hdfs-default.xml
index 7b580d2..16eddff 100755
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/resources/hdfs-default.xml
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/resources/hdfs-default.xml
@@ -1012,6 +1012,14 @@
</property>
<property>
+ <name>dfs.namenode.safemode.recheck.interval</name>
+ <value>1000</value>
+ <description>
+ Interval in msec for checking safe mode.
+ </description>
+</property>
+
+<property>
<name>dfs.namenode.safemode.extension</name>
<value>30000</value>
<description>
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestBlockManagerSafeMode.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestBlockManagerSafeMode.java
index 5d2a07e..291b7c6 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestBlockManagerSafeMode.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestBlockManagerSafeMode.java
@@ -230,6 +230,18 @@ public class TestBlockManagerSafeMode {
assertEquals(BMSafeModeStatus.OFF, getSafeModeStatus());
}
+ @Test(timeout = 20000)
+ public void testCheckSafeMode9() throws Exception {
+ Configuration conf = new HdfsConfiguration();
+ conf.setLong(DFSConfigKeys.DFS_NAMENODE_SAFEMODE_RECHECK_INTERVAL_KEY, 3000);
+ GenericTestUtils.LogCapturer logs =
+ GenericTestUtils.LogCapturer.captureLogs(BlockManagerSafeMode.LOG);
+ BlockManagerSafeMode blockManagerSafeMode = new BlockManagerSafeMode(bm,
+ fsn, true, conf);
+ String content = logs.getOutput();
+ assertTrue(content.contains("Using 3000 as SafeModeMonitor Interval"));
+ }
+
/**
* Test that the block safe increases up to block threshold.
*
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org