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

hexiaoqiao 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 a170d58501cf HDFS-17231. HA: Safemode should exit when resources are 
from low to available. (#6207). Contributed by Gu Peng.
a170d58501cf is described below

commit a170d58501cf9f1bca0f111007122caf3ebe9419
Author: gp1314 <814085...@qq.com>
AuthorDate: Wed Oct 25 11:43:12 2023 +0800

    HDFS-17231. HA: Safemode should exit when resources are from low to 
available. (#6207). Contributed by Gu Peng.
    
    Reviewed-by: Xing Lin <xing...@linkedin.com>
    Signed-off-by: He Xiaoqiao <hexiaoq...@apache.org>
---
 .../org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java | 12 ++++++++++++
 .../hdfs/server/namenode/TestNameNodeResourceChecker.java    |  8 ++++++++
 2 files changed, 20 insertions(+)

diff --git 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
 
b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
index d9b165f96ee0..3d360c6d0dd2 100644
--- 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
+++ 
b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
@@ -4534,6 +4534,11 @@ public class FSNamesystem implements Namesystem, 
FSNamesystemMBean,
               LOG.warn(lowResourcesMsg + "Already in safe mode.");
             }
             enterSafeMode(true);
+          } else {
+            if (isNoManualAndResourceLowSafeMode()) {
+              LOG.info("Namenode has sufficient available resources, exiting 
safe mode.");
+              leaveSafeMode(false);
+            }
           }
           try {
             Thread.sleep(resourceRecheckInterval);
@@ -5265,6 +5270,13 @@ public class FSNamesystem implements Namesystem, 
FSNamesystemMBean,
     return manualSafeMode || resourceLowSafeMode;
   }
 
+  /**
+   * @return true if it is not in manual safe mode and resource low safe mode.
+   */
+  private synchronized boolean isNoManualAndResourceLowSafeMode() {
+    return !manualSafeMode && resourceLowSafeMode;
+  }
+
   private synchronized void setManualAndResourceLowSafeMode(boolean manual,
       boolean resourceLow) {
     this.manualSafeMode = manual;
diff --git 
a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestNameNodeResourceChecker.java
 
b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestNameNodeResourceChecker.java
index f86ce5fc0677..f3e187b5e3cd 100644
--- 
a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestNameNodeResourceChecker.java
+++ 
b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestNameNodeResourceChecker.java
@@ -130,6 +130,14 @@ public class TestNameNodeResourceChecker {
 
       assertTrue("NN should be in safe mode after resources crossed threshold",
           cluster.getNameNode().isInSafeMode());
+
+      mockResourceChecker.setResourcesAvailable(true);
+      while (cluster.getNameNode().isInSafeMode() &&
+          Time.now() < startMillis + (60 * 1000)) {
+        Thread.sleep(1000);
+      }
+      assertTrue("NN should leave safe mode after resources not crossed 
threshold",
+          !cluster.getNameNode().isInSafeMode());
     } finally {
       if (cluster != null)
         cluster.shutdown();


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

Reply via email to