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

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


The following commit(s) were added to refs/heads/master by this push:
     new 95b2caac7b HDDS-10628. Display if safemode exit was via force exit 
command. (#6494)
95b2caac7b is described below

commit 95b2caac7be1d771af9d0a0b48a40da6ad0b4a96
Author: Sadanand Shenoy <[email protected]>
AuthorDate: Wed Apr 24 11:49:53 2024 +0530

    HDDS-10628. Display if safemode exit was via force exit command. (#6494)
---
 .../hdds/scm/safemode/SCMSafeModeManager.java      | 30 +++++++++++++++++++---
 .../apache/hadoop/hdds/scm/server/SCMMXBean.java   |  7 +++++
 .../hdds/scm/server/StorageContainerManager.java   |  7 ++++-
 .../main/resources/webapps/scm/scm-overview.html   |  4 +++
 4 files changed, 43 insertions(+), 5 deletions(-)

diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/safemode/SCMSafeModeManager.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/safemode/SCMSafeModeManager.java
index f882a627c5..a5ecdb2342 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/safemode/SCMSafeModeManager.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/safemode/SCMSafeModeManager.java
@@ -88,6 +88,7 @@ public class SCMSafeModeManager implements SafeModeManager {
   private final boolean isSafeModeEnabled;
   private AtomicBoolean inSafeMode = new AtomicBoolean(true);
   private AtomicBoolean preCheckComplete = new AtomicBoolean(false);
+  private AtomicBoolean forceExitSafeMode = new AtomicBoolean(false);
 
   private Map<String, SafeModeExitRule> exitRules = new HashMap(1);
   private Set<String> preCheckRules = new HashSet<>(1);
@@ -151,7 +152,7 @@ public class SCMSafeModeManager implements SafeModeManager {
       }
     } else {
       this.safeModeMetrics = null;
-      exitSafeMode(eventQueue);
+      exitSafeMode(eventQueue, true);
     }
   }
 
@@ -173,6 +174,8 @@ public class SCMSafeModeManager implements SafeModeManager {
     SafeModeStatus safeModeStatus =
         new SafeModeStatus(getInSafeMode(), getPreCheckComplete());
 
+    safeModeStatus.setForceExitSafeMode(isForceExitSafeMode());
+
     // update SCMContext
     scmContext.updateSafeModeStatus(safeModeStatus);
 
@@ -213,7 +216,7 @@ public class SCMSafeModeManager implements SafeModeManager {
     if (validatedRules.size() == exitRules.size()) {
       // All rules are satisfied, we can exit safe mode.
       LOG.info("ScmSafeModeManager, all rules are successfully validated");
-      exitSafeMode(eventQueue);
+      exitSafeMode(eventQueue, false);
     }
 
   }
@@ -238,14 +241,16 @@ public class SCMSafeModeManager implements 
SafeModeManager {
    * 3. Cleanup resources.
    * 4. Emit safe mode status.
    * @param eventQueue
+   * @param force
    */
   @VisibleForTesting
-  public void exitSafeMode(EventPublisher eventQueue) {
+  public void exitSafeMode(EventPublisher eventQueue, boolean force) {
     LOG.info("SCM exiting safe mode.");
     // If safemode is exiting, then pre check must also have passed so
     // set it to true.
     setPreCheckComplete(true);
     setInSafeMode(false);
+    setForceExitSafeMode(force);
 
     // TODO: Remove handler registration as there is no need to listen to
     // register events anymore.
@@ -289,7 +294,6 @@ public class SCMSafeModeManager implements SafeModeManager {
     }
     return inSafeMode.get();
   }
-
   /**
    * Get the safe mode status of all rules.
    *
@@ -319,6 +323,14 @@ public class SCMSafeModeManager implements SafeModeManager 
{
     this.preCheckComplete.set(newState);
   }
 
+  public boolean isForceExitSafeMode() {
+    return forceExitSafeMode.get();
+  }
+
+  public void setForceExitSafeMode(boolean forceExitSafeMode) {
+    this.forceExitSafeMode.set(forceExitSafeMode);
+  }
+
   public static Logger getLogger() {
     return LOG;
   }
@@ -350,6 +362,8 @@ public class SCMSafeModeManager implements SafeModeManager {
     private final boolean safeModeStatus;
     private final boolean preCheckPassed;
 
+    private boolean forceExitSafeMode;
+
     public SafeModeStatus(boolean safeModeState, boolean preCheckPassed) {
       this.safeModeStatus = safeModeState;
       this.preCheckPassed = preCheckPassed;
@@ -363,6 +377,14 @@ public class SCMSafeModeManager implements SafeModeManager 
{
       return preCheckPassed;
     }
 
+    public void setForceExitSafeMode(boolean forceExitSafeMode) {
+      this.forceExitSafeMode = forceExitSafeMode;
+    }
+
+    public boolean isForceExitSafeMode() {
+      return forceExitSafeMode;
+    }
+
     @Override
     public String toString() {
       return "SafeModeStatus{" +
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/SCMMXBean.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/SCMMXBean.java
index 6054e1af07..de609356b2 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/SCMMXBean.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/SCMMXBean.java
@@ -48,6 +48,13 @@ public interface SCMMXBean extends ServiceRuntimeInfo {
    */
   boolean isInSafeMode();
 
+
+  /**
+   * Returns if safe mode exit is forceful.
+   * @return boolean
+   */
+  boolean isSafeModeExitForceful();
+
   /**
    * Returns live safe mode container threshold.
    * @return String
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java
index fa67dd68de..e86dab5fd7 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java
@@ -1983,6 +1983,11 @@ public final class StorageContainerManager extends 
ServiceRuntimeInfoImpl
     return scmSafeModeManager.getInSafeMode();
   }
 
+  @Override
+  public boolean isSafeModeExitForceful() {
+    return scmSafeModeManager.isForceExitSafeMode();
+  }
+
   /**
    * Returns EventPublisher.
    */
@@ -2015,7 +2020,7 @@ public final class StorageContainerManager extends 
ServiceRuntimeInfoImpl
    * Force SCM out of safe mode.
    */
   public boolean exitSafeMode() {
-    scmSafeModeManager.exitSafeMode(eventQueue);
+    scmSafeModeManager.exitSafeMode(eventQueue, true);
     return true;
   }
 
diff --git 
a/hadoop-hdds/server-scm/src/main/resources/webapps/scm/scm-overview.html 
b/hadoop-hdds/server-scm/src/main/resources/webapps/scm/scm-overview.html
index fdd8de15b6..be110c9cc5 100644
--- a/hadoop-hdds/server-scm/src/main/resources/webapps/scm/scm-overview.html
+++ b/hadoop-hdds/server-scm/src/main/resources/webapps/scm/scm-overview.html
@@ -124,6 +124,10 @@
         <td>Node Manager: Safe mode status</td>
         <td>{{$ctrl.overview.jmx.InSafeMode}}</td>
     </tr>
+    <tr ng-hide="!$ctrl.overview.jmx.SafeModeExitForceful">
+        <td> Force Exit Safe Mode </td>
+        <td>{{$ctrl.overview.jmx.SafeModeExitForceful}}</td>
+    </tr>
     <tr>
         <td> SCM Roles (HA) </td>
         <td>{{$ctrl.overview.jmx.ScmRatisRoles}}</td>


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to