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

nanda 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 1ca2f2a2aa HDDS-13358. Refactor SafeModeStatus to an enum (#8721)
1ca2f2a2aa is described below

commit 1ca2f2a2aa2b9dc28492dd8cbff7e578f3d7935c
Author: Doroszlai, Attila <[email protected]>
AuthorDate: Fri Jul 4 06:16:25 2025 +0200

    HDDS-13358. Refactor SafeModeStatus to an enum (#8721)
---
 .../org/apache/hadoop/hdds/scm/ha/SCMContext.java  | 18 ++----
 .../hdds/scm/safemode/SCMSafeModeManager.java      | 74 ++++++++--------------
 .../hdds/scm/server/StorageContainerManager.java   |  3 +-
 .../hadoop/hdds/scm/block/TestBlockManager.java    |  5 +-
 .../hdds/scm/ha/TestBackgroundSCMService.java      |  5 +-
 .../apache/hadoop/hdds/scm/ha/TestSCMContext.java  |  7 +-
 .../hadoop/hdds/scm/ha/TestSCMServiceManager.java  | 20 ++----
 .../hadoop/hdds/scm/node/TestDeadNodeHandler.java  |  6 +-
 .../hadoop/hdds/scm/node/TestSCMNodeManager.java   |  6 +-
 .../hdds/scm/pipeline/TestPipelineManagerImpl.java | 21 +++---
 .../scm/ReconStorageContainerManagerFacade.java    |  3 +-
 .../ozone/recon/scm/TestReconPipelineManager.java  |  6 +-
 12 files changed, 72 insertions(+), 102 deletions(-)

diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMContext.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMContext.java
index eca34e6b6e..1b371b7fa0 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMContext.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMContext.java
@@ -18,7 +18,7 @@
 package org.apache.hadoop.hdds.scm.ha;
 
 import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Preconditions;
+import java.util.Objects;
 import java.util.concurrent.locks.ReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 import org.apache.hadoop.hdds.scm.safemode.SCMSafeModeManager.SafeModeStatus;
@@ -72,7 +72,7 @@ public final class SCMContext {
   private SCMContext(Builder b) {
     isLeader = b.isLeader;
     term = b.term;
-    safeModeStatus = SafeModeStatus.of(b.isInSafeMode, b.isPreCheckComplete);
+    safeModeStatus = b.safeModeStatus;
     finalizationCheckpoint = b.finalizationCheckpoint;
     scm = b.scm;
     threadNamePrefix = b.threadNamePrefix;
@@ -276,8 +276,7 @@ public static class Builder {
      */
     private boolean isLeader = false;
     private long term = INVALID_TERM;
-    private boolean isInSafeMode = false;
-    private boolean isPreCheckComplete = true;
+    private SafeModeStatus safeModeStatus = SafeModeStatus.OUT_OF_SAFE_MODE;
     private OzoneStorageContainerManager scm = null;
     private FinalizationCheckpoint finalizationCheckpoint = 
FinalizationCheckpoint.FINALIZATION_COMPLETE;
     private String threadNamePrefix = "";
@@ -292,13 +291,8 @@ public Builder setTerm(long newTerm) {
       return this;
     }
 
-    public Builder setIsInSafeMode(boolean inSafeMode) {
-      this.isInSafeMode = inSafeMode;
-      return this;
-    }
-
-    public Builder setIsPreCheckComplete(boolean preCheckComplete) {
-      this.isPreCheckComplete = preCheckComplete;
+    public Builder setSafeModeStatus(SafeModeStatus status) {
+      this.safeModeStatus = status;
       return this;
     }
 
@@ -320,7 +314,7 @@ public SCMContext.Builder setThreadNamePrefix(String 
prefix) {
     }
 
     public SCMContext build() {
-      Preconditions.checkNotNull(scm, "scm == null");
+      Objects.requireNonNull(scm, "scm == null");
       return buildMaybeInvalid();
     }
 
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 5f8c9fe6bd..95ac0f43d5 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
@@ -24,7 +24,7 @@
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
-import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicReference;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.hadoop.hdds.conf.ConfigurationSource;
 import org.apache.hadoop.hdds.scm.container.ContainerManager;
@@ -69,8 +69,7 @@ public class SCMSafeModeManager implements SafeModeManager {
 
   private static final Logger LOG = 
LoggerFactory.getLogger(SCMSafeModeManager.class);
 
-  private final AtomicBoolean inSafeMode = new AtomicBoolean(true);
-  private final AtomicBoolean preCheckComplete = new AtomicBoolean(false);
+  private final AtomicReference<SafeModeStatus> status = new 
AtomicReference<>(SafeModeStatus.INITIAL);
   private final Map<String, SafeModeExitRule<?>> exitRules = new HashMap<>();
   private final Set<String> preCheckRules = new HashSet<>();
   private final Set<String> validatedRules = new HashSet<>();
@@ -101,7 +100,8 @@ public SCMSafeModeManager(final ConfigurationSource conf,
     final boolean isSafeModeEnabled = 
conf.getBoolean(HDDS_SCM_SAFEMODE_ENABLED, HDDS_SCM_SAFEMODE_ENABLED_DEFAULT);
     if (!isSafeModeEnabled) {
       LOG.info("Safemode is disabled, skipping Safemode rule validation and 
force exiting Safemode.");
-      exitSafeMode();
+      status.set(SafeModeStatus.OUT_OF_SAFE_MODE);
+      emitSafeModeStatus();
     }
   }
 
@@ -118,8 +118,7 @@ public SafeModeMetrics getSafeModeMetrics() {
   }
 
   private void emitSafeModeStatus() {
-    final SafeModeStatus safeModeStatus = SafeModeStatus.of(
-        getInSafeMode(), getPreCheckComplete());
+    final SafeModeStatus safeModeStatus = status.get();
     scmContext.updateSafeModeStatus(safeModeStatus);
 
     // notify SCMServiceManager
@@ -145,43 +144,26 @@ public synchronized void validateSafeModeExitRules(String 
ruleName) {
       LOG.error("No Such Exit rule {}", ruleName);
     }
 
-    if (!getPreCheckComplete()) {
-      completePreCheck();
+    // If all the precheck rules have been validated, set status to 
PRE_CHECKS_PASSED
+    // and notify listeners.
+    if (validatedPreCheckRules.size() == preCheckRules.size()
+        && status.compareAndSet(SafeModeStatus.INITIAL, 
SafeModeStatus.PRE_CHECKS_PASSED)) {
+      LOG.info("All SCM safe mode pre check rules have passed");
+      emitSafeModeStatus();
     }
 
-    if (validatedRules.size() == exitRules.size()) {
+    if (validatedRules.size() == exitRules.size()
+        && status.compareAndSet(SafeModeStatus.PRE_CHECKS_PASSED, 
SafeModeStatus.OUT_OF_SAFE_MODE)) {
       // All rules are satisfied, we can exit safe mode.
       LOG.info("ScmSafeModeManager, all rules are successfully validated");
-      exitSafeMode();
-    }
-  }
-
-  /**
-   * When all the precheck rules have been validated, set preCheckComplete to
-   * true and then emit the safemode status so any listeners get notified of
-   * the safemode state change.
-   */
-  private void completePreCheck() {
-    if (validatedPreCheckRules.size() == preCheckRules.size()) {
-      LOG.info("All SCM safe mode pre check rules have passed");
-      preCheckComplete.set(true);
+      LOG.info("SCM exiting safe mode.");
       emitSafeModeStatus();
     }
   }
 
   public void forceExitSafeMode() {
-    exitSafeMode();
-  }
-
-  private void exitSafeMode() {
-    LOG.info("SCM exiting safe mode.");
-    // If safemode is exiting, then pre-check must also have passed.
-    preCheckComplete.set(true);
-    inSafeMode.set(false);
-
-    // TODO: Remove handler registration as there is no need to listen to
-    //   register events anymore.
-
+    LOG.info("SCM force-exiting safe mode.");
+    status.set(SafeModeStatus.OUT_OF_SAFE_MODE);
     emitSafeModeStatus();
   }
 
@@ -189,7 +171,7 @@ private void exitSafeMode() {
    * Refresh Rule state.
    */
   public void refresh() {
-    if (inSafeMode.get()) {
+    if (getInSafeMode()) {
       exitRules.values().forEach(rule -> {
         // Refresh rule irrespective of validate(), as at this point validate
         // does not represent current state validation, as validate is being
@@ -203,10 +185,10 @@ public void refresh() {
    * Refresh Rule state and validate rules.
    */
   public void refreshAndValidate() {
-    if (inSafeMode.get()) {
+    if (getInSafeMode()) {
       exitRules.values().forEach(rule -> {
         rule.refresh(false);
-        if (rule.validate() && inSafeMode.get()) {
+        if (rule.validate() && getInSafeMode()) {
           validateSafeModeExitRules(rule.getRuleName());
           rule.cleanup();
         }
@@ -216,7 +198,7 @@ public void refreshAndValidate() {
 
   @Override
   public boolean getInSafeMode() {
-    return inSafeMode.get();
+    return status.get().isInSafeMode();
   }
 
   /** Get the safe mode status of all rules. */
@@ -230,7 +212,7 @@ public Map<String, Pair<Boolean, String>> getRuleStatus() {
   }
 
   public boolean getPreCheckComplete() {
-    return preCheckComplete.get();
+    return status.get().isPreCheckComplete();
   }
 
   public static Logger getLogger() {
@@ -244,22 +226,22 @@ public double getCurrentContainerThreshold() {
   }
 
   /**
-   * Class used during SafeMode status event.
+   * Possible states of SCM SafeMode.
    */
-  public static final class SafeModeStatus {
+  public enum SafeModeStatus {
+
+    INITIAL(true, false),
+    PRE_CHECKS_PASSED(true, true),
+    OUT_OF_SAFE_MODE(false, true);
 
     private final boolean safeModeStatus;
     private final boolean preCheckPassed;
 
-    private SafeModeStatus(boolean safeModeState, boolean preCheckPassed) {
+    SafeModeStatus(boolean safeModeState, boolean preCheckPassed) {
       this.safeModeStatus = safeModeState;
       this.preCheckPassed = preCheckPassed;
     }
 
-    public static SafeModeStatus of(boolean safeMode, boolean preCheck) {
-      return new SafeModeStatus(safeMode, preCheck);
-    }
-
     public boolean isInSafeMode() {
       return safeModeStatus;
     }
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 b2fa85ff0e..00163aa214 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
@@ -710,8 +710,7 @@ private void initializeSystemManagers(OzoneConfiguration 
conf,
       scmContext = new SCMContext.Builder()
           .setLeader(false)
           .setTerm(0)
-          .setIsInSafeMode(true)
-          .setIsPreCheckComplete(false)
+          .setSafeModeStatus(SCMSafeModeManager.SafeModeStatus.INITIAL)
           .setSCM(this)
           .setThreadNamePrefix(threadNamePrefix)
           .setFinalizationCheckpoint(finalizationManager.getCheckpoint())
diff --git 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/block/TestBlockManager.java
 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/block/TestBlockManager.java
index 5ed9cefb7b..12656e8a06 100644
--- 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/block/TestBlockManager.java
+++ 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/block/TestBlockManager.java
@@ -186,7 +186,7 @@ void setUp(@TempDir File tempDir) throws Exception {
     replicationConfig = RatisReplicationConfig
         .getInstance(ReplicationFactor.THREE);
 
-    scm.getScmContext().updateSafeModeStatus(SafeModeStatus.of(false, true));
+    scm.getScmContext().updateSafeModeStatus(SafeModeStatus.OUT_OF_SAFE_MODE);
   }
 
   @AfterEach
@@ -450,8 +450,7 @@ public void testAllocateOversizedBlock() {
 
   @Test
   public void testAllocateBlockFailureInSafeMode() {
-    scm.getScmContext().updateSafeModeStatus(
-        SCMSafeModeManager.SafeModeStatus.of(true, true));
+    scm.getScmContext().updateSafeModeStatus(SafeModeStatus.PRE_CHECKS_PASSED);
     // Test1: In safe mode expect an SCMException.
     Throwable t = assertThrows(IOException.class, () ->
         blockManager.allocateBlock(DEFAULT_BLOCK_SIZE,
diff --git 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/ha/TestBackgroundSCMService.java
 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/ha/TestBackgroundSCMService.java
index 4a35daab0a..5acb36aadc 100644
--- 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/ha/TestBackgroundSCMService.java
+++ 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/ha/TestBackgroundSCMService.java
@@ -29,7 +29,7 @@
 import java.time.ZoneOffset;
 import java.util.concurrent.TimeoutException;
 import org.apache.hadoop.hdds.scm.pipeline.PipelineManager;
-import org.apache.hadoop.hdds.scm.safemode.SCMSafeModeManager;
+import org.apache.hadoop.hdds.scm.safemode.SCMSafeModeManager.SafeModeStatus;
 import org.apache.ozone.test.TestClock;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
@@ -91,8 +91,7 @@ public void testNotifyStatusChanged() {
     assertTrue(backgroundSCMService.shouldRun());
 
     // go into safe mode, RUNNING -> PAUSING
-    scmContext.updateSafeModeStatus(
-        SCMSafeModeManager.SafeModeStatus.of(true, true));
+    scmContext.updateSafeModeStatus(SafeModeStatus.PRE_CHECKS_PASSED);
     backgroundSCMService.notifyStatusChanged();
     assertFalse(backgroundSCMService.shouldRun());
   }
diff --git 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/ha/TestSCMContext.java
 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/ha/TestSCMContext.java
index a1d34c82c3..4a46a8d9df 100644
--- 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/ha/TestSCMContext.java
+++ 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/ha/TestSCMContext.java
@@ -54,20 +54,19 @@ void testRaftOperations() throws Exception {
   public void testSafeModeOperations() {
     // in safe mode
     SCMContext scmContext = new SCMContext.Builder()
-        .setIsInSafeMode(true)
-        .setIsPreCheckComplete(false)
+        .setSafeModeStatus(SafeModeStatus.INITIAL)
         .buildMaybeInvalid();
 
     assertTrue(scmContext.isInSafeMode());
     assertFalse(scmContext.isPreCheckComplete());
 
     // in safe mode, pass preCheck
-    scmContext.updateSafeModeStatus(SafeModeStatus.of(true, true));
+    scmContext.updateSafeModeStatus(SafeModeStatus.PRE_CHECKS_PASSED);
     assertTrue(scmContext.isInSafeMode());
     assertTrue(scmContext.isPreCheckComplete());
 
     // out of safe mode
-    scmContext.updateSafeModeStatus(SafeModeStatus.of(false, true));
+    scmContext.updateSafeModeStatus(SafeModeStatus.OUT_OF_SAFE_MODE);
     assertFalse(scmContext.isInSafeMode());
     assertTrue(scmContext.isPreCheckComplete());
   }
diff --git 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/ha/TestSCMServiceManager.java
 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/ha/TestSCMServiceManager.java
index 67ff3ee80c..bc9eb83687 100644
--- 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/ha/TestSCMServiceManager.java
+++ 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/ha/TestSCMServiceManager.java
@@ -20,7 +20,7 @@
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import org.apache.hadoop.hdds.scm.safemode.SCMSafeModeManager;
+import org.apache.hadoop.hdds.scm.safemode.SCMSafeModeManager.SafeModeStatus;
 import org.junit.jupiter.api.Test;
 
 /**
@@ -32,8 +32,7 @@ public void testServiceRunWhenLeader() {
     SCMContext scmContext = new SCMContext.Builder()
         .setLeader(false)
         .setTerm(1)
-        .setIsInSafeMode(true)
-        .setIsPreCheckComplete(false)
+        .setSafeModeStatus(SafeModeStatus.INITIAL)
         .buildMaybeInvalid();
 
     // A service runs when it is leader.
@@ -75,8 +74,7 @@ public void stop() {
     assertFalse(serviceRunWhenLeader.shouldRun());
 
     // PAUSING when out of safe mode.
-    scmContext.updateSafeModeStatus(
-        SCMSafeModeManager.SafeModeStatus.of(false, true));
+    scmContext.updateSafeModeStatus(SafeModeStatus.OUT_OF_SAFE_MODE);
     serviceManager.notifyStatusChanged();
     assertFalse(serviceRunWhenLeader.shouldRun());
 
@@ -86,8 +84,7 @@ public void stop() {
     assertTrue(serviceRunWhenLeader.shouldRun());
 
     // RUNNING when in safe mode.
-    scmContext.updateSafeModeStatus(
-        SCMSafeModeManager.SafeModeStatus.of(true, false));
+    scmContext.updateSafeModeStatus(SafeModeStatus.INITIAL);
     serviceManager.notifyStatusChanged();
     assertTrue(serviceRunWhenLeader.shouldRun());
 
@@ -102,8 +99,7 @@ public void setServiceRunWhenLeaderAndOutOfSafeMode() {
     SCMContext scmContext = new SCMContext.Builder()
         .setLeader(false)
         .setTerm(1)
-        .setIsInSafeMode(true)
-        .setIsPreCheckComplete(false)
+        .setSafeModeStatus(SafeModeStatus.INITIAL)
         .buildMaybeInvalid();
 
     // A service runs when it is leader and out of safe mode.
@@ -145,8 +141,7 @@ public void stop() {
     assertFalse(serviceRunWhenLeaderAndOutOfSafeMode.shouldRun());
 
     // PAUSING when out of safe mode.
-    scmContext.updateSafeModeStatus(
-        SCMSafeModeManager.SafeModeStatus.of(false, true));
+    scmContext.updateSafeModeStatus(SafeModeStatus.OUT_OF_SAFE_MODE);
     serviceManager.notifyStatusChanged();
     assertFalse(serviceRunWhenLeaderAndOutOfSafeMode.shouldRun());
 
@@ -156,8 +151,7 @@ public void stop() {
     assertTrue(serviceRunWhenLeaderAndOutOfSafeMode.shouldRun());
 
     // PAUSING when in safe mode.
-    scmContext.updateSafeModeStatus(
-        SCMSafeModeManager.SafeModeStatus.of(true, false));
+    scmContext.updateSafeModeStatus(SafeModeStatus.INITIAL);
     serviceManager.notifyStatusChanged();
     assertFalse(serviceRunWhenLeaderAndOutOfSafeMode.shouldRun());
 
diff --git 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestDeadNodeHandler.java
 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestDeadNodeHandler.java
index 775fd6f4ca..e676ae9461 100644
--- 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestDeadNodeHandler.java
+++ 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestDeadNodeHandler.java
@@ -60,6 +60,7 @@
 import org.apache.hadoop.hdds.scm.pipeline.PipelineManager;
 import org.apache.hadoop.hdds.scm.pipeline.PipelineManagerImpl;
 import org.apache.hadoop.hdds.scm.pipeline.PipelineProvider;
+import org.apache.hadoop.hdds.scm.safemode.SCMSafeModeManager.SafeModeStatus;
 import org.apache.hadoop.hdds.scm.server.StorageContainerManager;
 import org.apache.hadoop.hdds.server.events.EventPublisher;
 import org.apache.hadoop.hdds.server.events.EventQueue;
@@ -102,8 +103,9 @@ public void setup() throws IOException, 
AuthenticationException {
     eventQueue = new EventQueue();
     scm = HddsTestUtils.getScm(conf);
     nodeManager = (SCMNodeManager) scm.getScmNodeManager();
-    scmContext = new SCMContext.Builder().setIsInSafeMode(true)
-        .setLeader(true).setIsPreCheckComplete(true)
+    scmContext = new SCMContext.Builder()
+        .setSafeModeStatus(SafeModeStatus.PRE_CHECKS_PASSED)
+        .setLeader(true)
         .setSCM(scm).build();
     pipelineManager =
         (PipelineManagerImpl)scm.getPipelineManager();
diff --git 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestSCMNodeManager.java
 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestSCMNodeManager.java
index 0fbdb1ffe9..985283ddac 100644
--- 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestSCMNodeManager.java
+++ 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestSCMNodeManager.java
@@ -95,6 +95,7 @@
 import org.apache.hadoop.hdds.scm.pipeline.Pipeline;
 import org.apache.hadoop.hdds.scm.pipeline.PipelineID;
 import org.apache.hadoop.hdds.scm.pipeline.PipelineManagerImpl;
+import org.apache.hadoop.hdds.scm.safemode.SCMSafeModeManager;
 import 
org.apache.hadoop.hdds.scm.server.SCMDatanodeHeartbeatDispatcher.NodeReportFromDatanode;
 import org.apache.hadoop.hdds.scm.server.SCMStorageConfig;
 import org.apache.hadoop.hdds.scm.server.StorageContainerManager;
@@ -196,8 +197,9 @@ OzoneConfiguration getConf() {
   SCMNodeManager createNodeManager(OzoneConfiguration config)
       throws IOException, AuthenticationException {
     scm = HddsTestUtils.getScm(config);
-    scmContext = new SCMContext.Builder().setIsInSafeMode(true)
-        .setLeader(true).setIsPreCheckComplete(true)
+    scmContext = new SCMContext.Builder()
+        .setSafeModeStatus(SCMSafeModeManager.SafeModeStatus.PRE_CHECKS_PASSED)
+        .setLeader(true)
         .setSCM(scm).build();
     PipelineManagerImpl pipelineManager =
         (PipelineManagerImpl) scm.getPipelineManager();
diff --git 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestPipelineManagerImpl.java
 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestPipelineManagerImpl.java
index f3c6a077cf..e7fc6f14f9 100644
--- 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestPipelineManagerImpl.java
+++ 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestPipelineManagerImpl.java
@@ -97,6 +97,7 @@
 import org.apache.hadoop.hdds.scm.node.NodeStatus;
 import 
org.apache.hadoop.hdds.scm.pipeline.choose.algorithms.HealthyPipelineChoosePolicy;
 import org.apache.hadoop.hdds.scm.safemode.SCMSafeModeManager;
+import org.apache.hadoop.hdds.scm.safemode.SCMSafeModeManager.SafeModeStatus;
 import org.apache.hadoop.hdds.scm.server.SCMDatanodeHeartbeatDispatcher;
 import org.apache.hadoop.hdds.scm.server.StorageContainerManager;
 import org.apache.hadoop.hdds.server.events.EventQueue;
@@ -149,8 +150,9 @@ void init(@TempDir File testDir, @TempDir File dbDir) 
throws Exception {
         conf.getInt(OZONE_DATANODE_PIPELINE_LIMIT,
             OZONE_DATANODE_PIPELINE_LIMIT_DEFAULT) /
         HddsProtos.ReplicationFactor.THREE.getNumber();
-    scmContext = new SCMContext.Builder().setIsInSafeMode(true)
-        .setLeader(true).setIsPreCheckComplete(true)
+    scmContext = new SCMContext.Builder()
+        .setSafeModeStatus(SafeModeStatus.PRE_CHECKS_PASSED)
+        .setLeader(true)
         .setSCM(scm).build();
     serviceManager = new SCMServiceManager();
   }
@@ -616,8 +618,7 @@ public void testPipelineNotCreatedUntilSafeModePrecheck() 
throws Exception {
         OZONE_SCM_PIPELINE_ALLOCATED_TIMEOUT, -1,
         TimeUnit.MILLISECONDS);
 
-    scmContext.updateSafeModeStatus(
-        SCMSafeModeManager.SafeModeStatus.of(true, false));
+    scmContext.updateSafeModeStatus(SafeModeStatus.INITIAL);
 
     PipelineManagerImpl pipelineManager = createPipelineManager(true);
     assertThrows(IOException.class,
@@ -637,8 +638,7 @@ public void testPipelineNotCreatedUntilSafeModePrecheck() 
throws Exception {
         .contains(pipeline));
 
     // Simulate safemode check exiting.
-    scmContext.updateSafeModeStatus(
-        SCMSafeModeManager.SafeModeStatus.of(true, true));
+    scmContext.updateSafeModeStatus(SafeModeStatus.PRE_CHECKS_PASSED);
     GenericTestUtils.waitFor(() -> !pipelineManager.getPipelines().isEmpty(),
         100, 10000);
     pipelineManager.close();
@@ -653,21 +653,18 @@ public void testSafeModeUpdatedOnSafemodeExit() throws 
Exception {
 
     PipelineManagerImpl pipelineManager = createPipelineManager(true);
 
-    scmContext.updateSafeModeStatus(
-        SCMSafeModeManager.SafeModeStatus.of(true, false));
+    scmContext.updateSafeModeStatus(SafeModeStatus.INITIAL);
     assertTrue(pipelineManager.getSafeModeStatus());
     assertFalse(pipelineManager.isPipelineCreationAllowed());
 
     // First pass pre-check as true, but safemode still on
     // Simulate safemode check exiting.
-    scmContext.updateSafeModeStatus(
-        SCMSafeModeManager.SafeModeStatus.of(true, true));
+    scmContext.updateSafeModeStatus(SafeModeStatus.PRE_CHECKS_PASSED);
     assertTrue(pipelineManager.getSafeModeStatus());
     assertTrue(pipelineManager.isPipelineCreationAllowed());
 
     // Then also turn safemode off
-    scmContext.updateSafeModeStatus(
-        SCMSafeModeManager.SafeModeStatus.of(false, true));
+    scmContext.updateSafeModeStatus(SafeModeStatus.OUT_OF_SAFE_MODE);
     assertFalse(pipelineManager.getSafeModeStatus());
     assertTrue(pipelineManager.isPipelineCreationAllowed());
     pipelineManager.close();
diff --git 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconStorageContainerManagerFacade.java
 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconStorageContainerManagerFacade.java
index 91cc35460c..0dacc31955 100644
--- 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconStorageContainerManagerFacade.java
+++ 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconStorageContainerManagerFacade.java
@@ -94,6 +94,7 @@
 import org.apache.hadoop.hdds.scm.pipeline.Pipeline;
 import org.apache.hadoop.hdds.scm.pipeline.PipelineActionHandler;
 import org.apache.hadoop.hdds.scm.pipeline.PipelineManager;
+import org.apache.hadoop.hdds.scm.safemode.SCMSafeModeManager;
 import org.apache.hadoop.hdds.scm.server.OzoneStorageContainerManager;
 import 
org.apache.hadoop.hdds.scm.server.SCMDatanodeHeartbeatDispatcher.ContainerReport;
 import 
org.apache.hadoop.hdds.scm.server.SCMDatanodeHeartbeatDispatcher.ContainerReportFromDatanode;
@@ -195,7 +196,7 @@ public 
ReconStorageContainerManagerFacade(OzoneConfiguration conf,
     eventQueue.setSilent(true);
     this.reconContext = reconContext;
     this.scmContext = new SCMContext.Builder()
-        .setIsPreCheckComplete(true)
+        .setSafeModeStatus(SCMSafeModeManager.SafeModeStatus.OUT_OF_SAFE_MODE)
         .setSCM(this)
         .build();
     this.ozoneConfiguration = getReconScmConfiguration(conf);
diff --git 
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/scm/TestReconPipelineManager.java
 
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/scm/TestReconPipelineManager.java
index 39b2c9bdcf..bb3dceb79f 100644
--- 
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/scm/TestReconPipelineManager.java
+++ 
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/scm/TestReconPipelineManager.java
@@ -54,6 +54,7 @@
 import org.apache.hadoop.hdds.scm.pipeline.PipelineFactory;
 import org.apache.hadoop.hdds.scm.pipeline.PipelineID;
 import org.apache.hadoop.hdds.scm.pipeline.PipelineProvider;
+import org.apache.hadoop.hdds.scm.safemode.SCMSafeModeManager;
 import org.apache.hadoop.hdds.scm.server.SCMStorageConfig;
 import org.apache.hadoop.hdds.scm.server.StorageContainerManager;
 import org.apache.hadoop.hdds.server.events.EventQueue;
@@ -148,8 +149,9 @@ public void testInitialize() throws IOException, 
TimeoutException {
       StorageContainerManager mock = mock(StorageContainerManager.class);
       when(mock.getScmNodeDetails())
           .thenReturn(mock(SCMNodeDetails.class));
-      scmContext = new SCMContext.Builder().setIsInSafeMode(true)
-              .setLeader(true).setIsPreCheckComplete(true)
+      scmContext = new SCMContext.Builder()
+              
.setSafeModeStatus(SCMSafeModeManager.SafeModeStatus.PRE_CHECKS_PASSED)
+              .setLeader(true)
               .setSCM(mock).build();
       reconPipelineManager.setScmContext(scmContext);
       reconPipelineManager.addPipeline(validPipeline);


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

Reply via email to