This is an automated email from the ASF dual-hosted git repository.
sodonnel pushed a commit to branch HDDS-14496-zdu
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/HDDS-14496-zdu by this push:
new 0373ab252c8 HDDS-14670. SCM queryFinalizeStatus shouldFinalize should
only be true when out of safemode (#10193)
0373ab252c8 is described below
commit 0373ab252c8c0992907a3c871ba699fb127c271a
Author: Stephen O'Donnell <[email protected]>
AuthorDate: Mon May 11 13:46:22 2026 +0100
HDDS-14670. SCM queryFinalizeStatus shouldFinalize should only be true when
out of safemode (#10193)
---
.../hdds/scm/server/SCMClientProtocolServer.java | 2 +-
.../scm/server/TestSCMClientProtocolServer.java | 26 +++++++++++++++++++++-
2 files changed, 26 insertions(+), 2 deletions(-)
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/SCMClientProtocolServer.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/SCMClientProtocolServer.java
index 5de633082c2..806e0fed9a1 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/SCMClientProtocolServer.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/SCMClientProtocolServer.java
@@ -1213,7 +1213,7 @@ public HddsProtos.UpgradeStatus queryUpgradeStatus()
throws IOException {
scm.getScmNodeManager().getDatanodeFinalizationCounts();
int finalizedDatanodes =
datanodeFinalizationCounts.getNumFinalizedDatanodes();
int healthyDatanodes =
datanodeFinalizationCounts.getTotalHealthyDatanodes();
- boolean shouldFinalize = scmFinalized &&
datanodeFinalizationCounts.allNodesFinalized();
+ boolean shouldFinalize = scmFinalized &&
datanodeFinalizationCounts.allNodesFinalized() && !scm.isInSafeMode();
HddsProtos.UpgradeStatus result = HddsProtos.UpgradeStatus.newBuilder()
.setScmFinalized(scmFinalized)
diff --git
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/server/TestSCMClientProtocolServer.java
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/server/TestSCMClientProtocolServer.java
index 184464658ee..7846c7ee583 100644
---
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/server/TestSCMClientProtocolServer.java
+++
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/server/TestSCMClientProtocolServer.java
@@ -20,6 +20,7 @@
import static
org.apache.hadoop.hdds.protocol.proto.HddsProtos.LifeCycleState.CLOSED;
import static
org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_READONLY_ADMINISTRATORS;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.any;
@@ -46,6 +47,7 @@
import org.apache.hadoop.hdds.scm.ha.SCMNodeDetails;
import org.apache.hadoop.hdds.scm.pipeline.PipelineID;
import
org.apache.hadoop.hdds.scm.protocol.StorageContainerLocationProtocolServerSideTranslatorPB;
+import org.apache.hadoop.hdds.scm.safemode.SCMSafeModeManager;
import org.apache.hadoop.hdds.utils.ProtocolMessageMetrics;
import org.apache.hadoop.ozone.container.common.SCMTestUtils;
import org.apache.hadoop.security.AccessControlException;
@@ -63,17 +65,22 @@ public class TestSCMClientProtocolServer {
private SCMClientProtocolServer server;
private StorageContainerManager scm;
private StorageContainerLocationProtocolServerSideTranslatorPB service;
+ private SCMSafeModeManager mockSafeModeManager;
@BeforeEach
void setUp(@TempDir File testDir) throws Exception {
OzoneConfiguration config = SCMTestUtils.getConf(testDir);
+
+ mockSafeModeManager = mock(SCMSafeModeManager.class);
+ when(mockSafeModeManager.getInSafeMode()).thenReturn(false);
+
SCMConfigurator configurator = new SCMConfigurator();
configurator.setSCMHAManager(SCMHAManagerStub.getInstance(true));
configurator.setScmContext(SCMContext.emptyContext());
+ configurator.setScmSafeModeManager(mockSafeModeManager);
config.set(OZONE_READONLY_ADMINISTRATORS, "testUser");
scm = HddsTestUtils.getScm(config, configurator);
scm.start();
- scm.exitSafeMode();
server = scm.getClientProtocolServer();
service = new
StorageContainerLocationProtocolServerSideTranslatorPB(server,
@@ -186,6 +193,23 @@ public void testQueryUpgradeStatus() throws Exception {
assertTrue(status.getShouldFinalize());
}
+ @Test
+ public void testQueryUpgradeStatusInSafemode() throws Exception {
+ // mockSafeModeManager defaults to returning true for getInSafeMode()
+ when(mockSafeModeManager.getInSafeMode()).thenReturn(true);
+ assertTrue(scm.isInSafeMode());
+
+ HddsProtos.UpgradeStatus status = server.queryUpgradeStatus();
+
+ // SCM starts already finalized in tests
+ assertTrue(status.getScmFinalized());
+ // No datanodes registered
+ assertEquals(0, status.getNumDatanodesFinalized());
+ assertEquals(0, status.getNumDatanodesTotal());
+ // shouldFinalize is false because SCM is in safe mode
+ assertFalse(status.getShouldFinalize());
+ }
+
private ContainerInfo newContainerInfoForTest() {
return new ContainerInfo.Builder()
.setContainerID(1)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]