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]