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

szetszwo 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 9e7ba249136 HDDS-16130. Remove Pair usage from Safe-mode APIs and 
callers. (#10993)
9e7ba249136 is described below

commit 9e7ba2491364bb7a12f13caba2061b4de103e5e5
Author: Navink <[email protected]>
AuthorDate: Fri Aug 21 00:14:12 2026 +0530

    HDDS-16130. Remove Pair usage from Safe-mode APIs and callers. (#10993)
---
 .../apache/hadoop/hdds/scm/client/ScmClient.java   |  7 +++---
 .../protocol/StorageContainerLocationProtocol.java |  5 ++--
 ...inerLocationProtocolClientSideTranslatorPB.java | 29 ++++------------------
 ...inerLocationProtocolServerSideTranslatorPB.java | 24 +++---------------
 .../hdds/scm/safemode/SCMSafeModeManager.java      | 14 ++++++-----
 .../hdds/scm/server/SCMClientProtocolServer.java   | 13 ++++------
 .../hdds/scm/server/StorageContainerManager.java   | 14 +++++------
 .../hdds/scm/safemode/TestSCMSafeModeManager.java  | 25 ++++++++-----------
 .../hdds/scm/cli/ContainerOperationClient.java     |  5 ++--
 .../hdds/scm/cli/SafeModeCheckSubcommand.java      | 17 ++++---------
 10 files changed, 51 insertions(+), 102 deletions(-)

diff --git 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/client/ScmClient.java
 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/client/ScmClient.java
index cd8bd619592..9a41a047ee1 100644
--- 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/client/ScmClient.java
+++ 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/client/ScmClient.java
@@ -23,7 +23,6 @@
 import java.util.Map;
 import java.util.Optional;
 import java.util.UUID;
-import org.apache.commons.lang3.tuple.Pair;
 import org.apache.hadoop.hdds.annotation.InterfaceAudience;
 import org.apache.hadoop.hdds.annotation.InterfaceStability;
 import org.apache.hadoop.hdds.client.ReplicationConfig;
@@ -32,6 +31,7 @@
 import 
org.apache.hadoop.hdds.protocol.proto.HddsProtos.DeletedBlocksTransactionSummary;
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.ContainerBalancerStatusInfoResponseProto;
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.DecommissionScmResponseProto;
+import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.SafeModeRuleStatusProto;
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.StartContainerBalancerResponseProto;
 import org.apache.hadoop.hdds.scm.DatanodeAdminError;
 import org.apache.hadoop.hdds.scm.container.ContainerID;
@@ -276,11 +276,10 @@ Pipeline 
createReplicationPipeline(HddsProtos.ReplicationType type,
   /**
    * Get the safe mode status of all rules.
    *
-   * @return map of rule statuses.
+   * @return list of rule statuses.
    * @throws IOException
    */
-  Map<String, Pair<Boolean, String>> getSafeModeRuleStatuses()
-      throws IOException;
+  List<SafeModeRuleStatusProto> getSafeModeRuleStatuses() throws IOException;
 
   /**
    * Force SCM out of safe mode.
diff --git 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/protocol/StorageContainerLocationProtocol.java
 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/protocol/StorageContainerLocationProtocol.java
index 98f8efa9ae3..cae99a27fca 100644
--- 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/protocol/StorageContainerLocationProtocol.java
+++ 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/protocol/StorageContainerLocationProtocol.java
@@ -27,7 +27,6 @@
 import java.util.Optional;
 import java.util.Set;
 import java.util.UUID;
-import org.apache.commons.lang3.tuple.Pair;
 import org.apache.hadoop.hdds.client.ReplicationConfig;
 import org.apache.hadoop.hdds.protocol.DatanodeDetails;
 import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
@@ -35,6 +34,7 @@
 import 
org.apache.hadoop.hdds.protocol.proto.HddsProtos.DeletedBlocksTransactionSummary;
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.ContainerBalancerStatusInfoResponseProto;
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.DecommissionScmResponseProto;
+import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.SafeModeRuleStatusProto;
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.StartContainerBalancerResponseProto;
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.Type;
 import org.apache.hadoop.hdds.scm.DatanodeAdminError;
@@ -411,8 +411,7 @@ List<DeletedBlocksTransactionInfo> 
getFailedDeletedBlockTxn(int count,
    */
   boolean inSafeMode() throws IOException;
 
-  Map<String, Pair<Boolean, String>> getSafeModeRuleStatuses()
-      throws IOException;
+  List<SafeModeRuleStatusProto> getSafeModeRuleStatuses() throws IOException;
 
   /**
    * Force SCM out of Safe mode.
diff --git 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/protocolPB/StorageContainerLocationProtocolClientSideTranslatorPB.java
 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/protocolPB/StorageContainerLocationProtocolClientSideTranslatorPB.java
index 7808cb286a2..7cdb5fa3365 100644
--- 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/protocolPB/StorageContainerLocationProtocolClientSideTranslatorPB.java
+++ 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/protocolPB/StorageContainerLocationProtocolClientSideTranslatorPB.java
@@ -37,7 +37,6 @@
 import java.util.UUID;
 import java.util.function.Consumer;
 import java.util.stream.Collectors;
-import org.apache.commons.lang3.tuple.Pair;
 import org.apache.hadoop.hdds.annotation.InterfaceAudience;
 import org.apache.hadoop.hdds.client.ECReplicationConfig;
 import org.apache.hadoop.hdds.client.ReplicatedReplicationConfig;
@@ -881,29 +880,11 @@ public boolean inSafeMode() throws IOException {
   }
 
   @Override
-  public Map<String, Pair<Boolean, String>> getSafeModeRuleStatuses()
-      throws IOException {
-    GetSafeModeRuleStatusesRequestProto request =
-        GetSafeModeRuleStatusesRequestProto.getDefaultInstance();
-    GetSafeModeRuleStatusesResponseProto response =
-        submitRequest(Type.GetSafeModeRuleStatuses,
-            builder -> builder.setGetSafeModeRuleStatusesRequest(request))
-            .getGetSafeModeRuleStatusesResponse();
-    return buildSafeModeRuleStatusesMap(response);
-  }
-
-  /**
-   * Helper method to build a map from GetSafeModeRuleStatusesResponseProto.
-   * Extracts rule names and their status information.
-   */
-  private Map<String, Pair<Boolean, String>> buildSafeModeRuleStatusesMap(
-      GetSafeModeRuleStatusesResponseProto response) {
-    Map<String, Pair<Boolean, String>> ruleStatuses = new HashMap<>();
-    for (SafeModeRuleStatusProto statusProto : 
response.getSafeModeRuleStatusesProtoList()) {
-      ruleStatuses.put(statusProto.getRuleName(),
-          Pair.of(statusProto.getValidate(), statusProto.getStatusText()));
-    }
-    return ruleStatuses;
+  public List<SafeModeRuleStatusProto> getSafeModeRuleStatuses() throws 
IOException {
+    GetSafeModeRuleStatusesRequestProto request = 
GetSafeModeRuleStatusesRequestProto.getDefaultInstance();
+    GetSafeModeRuleStatusesResponseProto response = 
submitRequest(Type.GetSafeModeRuleStatuses,
+        builder -> 
builder.setGetSafeModeRuleStatusesRequest(request)).getGetSafeModeRuleStatusesResponse();
+    return response.getSafeModeRuleStatusesProtoList();
   }
 
   /**
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/protocol/StorageContainerLocationProtocolServerSideTranslatorPB.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/protocol/StorageContainerLocationProtocolServerSideTranslatorPB.java
index 00a9b6b3a0c..c1561f0cd19 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/protocol/StorageContainerLocationProtocolServerSideTranslatorPB.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/protocol/StorageContainerLocationProtocolServerSideTranslatorPB.java
@@ -38,7 +38,6 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
-import org.apache.commons.lang3.tuple.Pair;
 import org.apache.hadoop.hdds.annotation.InterfaceAudience;
 import org.apache.hadoop.hdds.client.ECReplicationConfig;
 import org.apache.hadoop.hdds.client.ReplicationConfig;
@@ -93,7 +92,6 @@
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.GetMetricsResponseProto;
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.GetPipelineRequestProto;
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.GetPipelineResponseProto;
-import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.GetSafeModeRuleStatusesRequestProto;
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.GetSafeModeRuleStatusesResponseProto;
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.InSafeModeRequestProto;
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.InSafeModeResponseProto;
@@ -121,7 +119,6 @@
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.SCMListContainerIDsResponseProto;
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.SCMListContainerRequestProto;
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.SCMListContainerResponseProto;
-import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.SafeModeRuleStatusProto;
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.ScmContainerLocationRequest;
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.ScmContainerLocationResponse;
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.ScmContainerLocationResponse.Status;
@@ -628,10 +625,12 @@ public ScmContainerLocationResponse processRequest(
                 request.getGetPipelineRequest(), request.getVersion()))
             .build();
       case GetSafeModeRuleStatuses:
+        final GetSafeModeRuleStatusesResponseProto proto = 
GetSafeModeRuleStatusesResponseProto.newBuilder()
+            .addAllSafeModeRuleStatusesProto(impl.getSafeModeRuleStatuses())
+            .build();
         return ScmContainerLocationResponse.newBuilder()
             .setCmdType(request.getCmdType()).setStatus(Status.OK)
-            .setGetSafeModeRuleStatusesResponse(getSafeModeRuleStatues(
-                request.getGetSafeModeRuleStatusesRequest()))
+            .setGetSafeModeRuleStatusesResponse(proto)
             .build();
       case DecommissionNodes:
         return ScmContainerLocationResponse.newBuilder()
@@ -1055,21 +1054,6 @@ public InSafeModeResponseProto inSafeMode(
 
   }
 
-  public GetSafeModeRuleStatusesResponseProto getSafeModeRuleStatues(
-      GetSafeModeRuleStatusesRequestProto request) throws IOException {
-    Map<String, Pair<Boolean, String>>
-        map = impl.getSafeModeRuleStatuses();
-    List<SafeModeRuleStatusProto> proto = new ArrayList();
-    for (Map.Entry<String, Pair<Boolean, String>> entry : map.entrySet()) {
-      
proto.add(SafeModeRuleStatusProto.newBuilder().setRuleName(entry.getKey())
-          .setValidate(entry.getValue().getLeft())
-          .setStatusText(entry.getValue().getRight())
-          .build());
-    }
-    return GetSafeModeRuleStatusesResponseProto.newBuilder()
-        .addAllSafeModeRuleStatusesProto(proto).build();
-  }
-
   public FinalizeScmUpgradeResponseProto getFinalizeScmUpgrade(
       FinalizeScmUpgradeRequestProto request) throws IOException {
     StatusAndMessages progress =
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 b185f3a37fc..fff90db4a1d 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
@@ -23,8 +23,10 @@
 import static 
org.apache.hadoop.hdds.HddsConfigKeys.HDDS_SCM_SAFEMODE_RULE_REFRESH_INTERVAL_DEFAULT;
 
 import com.google.common.util.concurrent.ThreadFactoryBuilder;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.Executors;
@@ -32,9 +34,9 @@
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
-import org.apache.commons.lang3.tuple.Pair;
 import org.apache.hadoop.hdds.HddsConfigKeys;
 import org.apache.hadoop.hdds.conf.ConfigurationSource;
+import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.SafeModeRuleStatusProto;
 import org.apache.hadoop.hdds.scm.container.ContainerManager;
 import org.apache.hadoop.hdds.scm.ha.SCMContext;
 import org.apache.hadoop.hdds.scm.ha.SCMService.Event;
@@ -271,13 +273,13 @@ public boolean getInSafeMode() {
   }
 
   /** Get the safe mode status of all rules. */
-  public Map<String, Pair<Boolean, String>> getRuleStatus() {
-    Map<String, Pair<Boolean, String>> map = new HashMap<>();
+  public List<SafeModeRuleStatusProto> getRuleStatus() {
+    final List<SafeModeRuleStatusProto> protos = new 
ArrayList<>(exitRules.size());
     for (SafeModeExitRule<?> exitRule : exitRules.values()) {
-      map.put(exitRule.getRuleName(),
-          Pair.of(exitRule.validate(), exitRule.getStatusText()));
+      
protos.add(SafeModeRuleStatusProto.newBuilder().setRuleName(exitRule.getRuleName())
+          
.setValidate(exitRule.validate()).setStatusText(exitRule.getStatusText()).build());
     }
-    return map;
+    return protos;
   }
 
   public boolean getPreCheckComplete() {
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 acb3e64a3ca..96b9efce50f 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
@@ -49,7 +49,6 @@
 import java.util.UUID;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
-import org.apache.commons.lang3.tuple.Pair;
 import org.apache.hadoop.fs.CommonConfigurationKeysPublic;
 import org.apache.hadoop.hdds.client.ReplicationConfig;
 import org.apache.hadoop.hdds.conf.OzoneConfiguration;
@@ -65,6 +64,7 @@
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.ContainerBalancerStatusInfoResponseProto;
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.DecommissionScmResponseProto;
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.DecommissionScmResponseProto.Builder;
+import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.SafeModeRuleStatusProto;
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.StartContainerBalancerResponseProto;
 import org.apache.hadoop.hdds.protocolPB.ReconfigureProtocolPB;
 import 
org.apache.hadoop.hdds.protocolPB.ReconfigureProtocolServerSideTranslatorPB;
@@ -1064,16 +1064,13 @@ public boolean inSafeMode() throws IOException {
   }
 
   @Override
-  public Map<String, Pair<Boolean, String>> getSafeModeRuleStatuses()
-      throws IOException {
+  public List<SafeModeRuleStatusProto> getSafeModeRuleStatuses() {
     try {
-      Map<String, Pair<Boolean, String>> result = scm.getRuleStatus();
-      AUDIT.logReadSuccess(buildAuditMessageForSuccess(
-          SCMAction.GET_SAFE_MODE_RULE_STATUSES, null));
+      final List<SafeModeRuleStatusProto> result = scm.getRuleStatus();
+      
AUDIT.logReadSuccess(buildAuditMessageForSuccess(SCMAction.GET_SAFE_MODE_RULE_STATUSES,
 null));
       return result;
     } catch (Exception ex) {
-      AUDIT.logReadFailure(buildAuditMessageForFailure(
-          SCMAction.GET_SAFE_MODE_RULE_STATUSES, null, ex));
+      
AUDIT.logReadFailure(buildAuditMessageForFailure(SCMAction.GET_SAFE_MODE_RULE_STATUSES,
 null, ex));
       throw ex;
     }
   }
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 93df74a6ea7..745bea6ee1d 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
@@ -55,7 +55,6 @@
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 import javax.management.ObjectName;
-import org.apache.commons.lang3.tuple.Pair;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hdds.HddsConfigKeys;
 import org.apache.hadoop.hdds.HddsUtils;
@@ -67,6 +66,7 @@
 import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
 import org.apache.hadoop.hdds.protocol.proto.HddsProtos.NodeState;
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.SCMCommandProto;
+import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.SafeModeRuleStatusProto;
 import 
org.apache.hadoop.hdds.protocolPB.SCMSecurityProtocolClientSideTranslatorPB;
 import org.apache.hadoop.hdds.scm.PipelineChoosePolicy;
 import org.apache.hadoop.hdds.scm.PlacementPolicy;
@@ -2095,20 +2095,18 @@ public String getNamespace() {
   /**
    * Get the safe mode status of all rules.
    *
-   * @return map of rule statuses.
+   * @return list of rule statuses.
    */
-  public Map<String, Pair<Boolean, String>> getRuleStatus() {
+  public List<SafeModeRuleStatusProto> getRuleStatus() {
     return scmSafeModeManager.getRuleStatus();
   }
 
   @Override
   public Map<String, String[]> getSafeModeRuleStatus() {
     Map<String, String[]> map = new HashMap<>();
-    for (Map.Entry<String, Pair<Boolean, String>> entry :
-        scmSafeModeManager.getRuleStatus().entrySet()) {
-      String[] status =
-          {entry.getValue().getRight(), entry.getValue().getLeft().toString()};
-      map.put(entry.getKey(), status);
+    for (SafeModeRuleStatusProto entry : scmSafeModeManager.getRuleStatus()) {
+      String[] status = {entry.getStatusText(), 
Boolean.toString(entry.getValidate())};
+      map.put(entry.getRuleName(), status);
     }
     return map;
   }
diff --git 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/safemode/TestSCMSafeModeManager.java
 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/safemode/TestSCMSafeModeManager.java
index cf262873eb0..d1556eeea0b 100644
--- 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/safemode/TestSCMSafeModeManager.java
+++ 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/safemode/TestSCMSafeModeManager.java
@@ -35,10 +35,7 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
-import java.util.Map;
-import java.util.Set;
 import java.util.stream.Stream;
-import org.apache.commons.lang3.tuple.Pair;
 import org.apache.hadoop.hdds.HddsConfigKeys;
 import org.apache.hadoop.hdds.client.RatisReplicationConfig;
 import org.apache.hadoop.hdds.conf.OzoneConfiguration;
@@ -47,6 +44,7 @@
 import org.apache.hadoop.hdds.protocol.proto.HddsProtos.ReplicationFactor;
 import org.apache.hadoop.hdds.protocol.proto.HddsProtos.ReplicationType;
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos;
+import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.SafeModeRuleStatusProto;
 import org.apache.hadoop.hdds.scm.HddsTestUtils;
 import org.apache.hadoop.hdds.scm.ScmConfigKeys;
 import org.apache.hadoop.hdds.scm.container.ContainerInfo;
@@ -86,7 +84,8 @@
 import org.junit.jupiter.params.provider.MethodSource;
 import org.junit.jupiter.params.provider.ValueSource;
 
-/** Test class for SCMSafeModeManager.
+/**
+ * Test class for SCMSafeModeManager.
  */
 public class TestSCMSafeModeManager {
 
@@ -478,13 +477,11 @@ public void 
testSafeModeExitRuleWithPipelineAvailabilityCheck(
    * @param stringToMatch string to match in the rule status.
    */
   private void validateRuleStatus(String safeModeRule, String stringToMatch) {
-    Set<Map.Entry<String, Pair<Boolean, String>>> ruleStatuses =
-        scmSafeModeManager.getRuleStatus().entrySet();
-    for (Map.Entry<String, Pair<Boolean, String>> entry : ruleStatuses) {
-      if (entry.getKey().equals(safeModeRule)) {
-        Pair<Boolean, String> value = entry.getValue();
-        assertEquals(false, value.getLeft());
-        assertThat(value.getRight()).containsIgnoringCase(stringToMatch);
+    List<SafeModeRuleStatusProto> ruleStatuses = 
scmSafeModeManager.getRuleStatus();
+    for (SafeModeRuleStatusProto proto : ruleStatuses) {
+      if (proto.getRuleName().equals(safeModeRule)) {
+        assertFalse(proto.getValidate());
+        assertThat(proto.getStatusText()).containsIgnoringCase(stringToMatch);
       }
     }
   }
@@ -1108,7 +1105,7 @@ public void 
testSafeModePeriodicLoggingStopsOnNormalExit() throws Exception {
    */
   private void verifyPeriodicLoggingActive(GenericTestUtils.LogCapturer 
logCapturer)
       throws InterruptedException {
-    Map<String, Pair<Boolean, String>> ruleStatuses = 
scmSafeModeManager.getRuleStatus();
+    List<SafeModeRuleStatusProto> ruleStatuses = 
scmSafeModeManager.getRuleStatus();
     for (int i = 0; i < 2; i++) {
       logCapturer.clearOutput();
       // Wait for configured interval (500ms + small buffer) for next log 
message
@@ -1116,8 +1113,8 @@ private void 
verifyPeriodicLoggingActive(GenericTestUtils.LogCapturer logCapture
       String logOutput = logCapturer.getOutput();
 
       assertThat(logOutput).contains("SCM SafeMode Status | state=");
-      for (String ruleName : ruleStatuses.keySet()) {
-        assertThat(logOutput).contains("SCM SafeMode Status | " + ruleName);
+      for (SafeModeRuleStatusProto proto: ruleStatuses) {
+        assertThat(logOutput).contains("SCM SafeMode Status | " + 
proto.getRuleName());
       }
     }
   }
diff --git 
a/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/ContainerOperationClient.java
 
b/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/ContainerOperationClient.java
index 4cb429269cd..7fee21620d1 100644
--- 
a/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/ContainerOperationClient.java
+++ 
b/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/ContainerOperationClient.java
@@ -26,7 +26,6 @@
 import java.util.Map;
 import java.util.Optional;
 import java.util.UUID;
-import org.apache.commons.lang3.tuple.Pair;
 import org.apache.hadoop.hdds.client.ReplicationConfig;
 import org.apache.hadoop.hdds.conf.ConfigurationSource;
 import org.apache.hadoop.hdds.conf.OzoneConfiguration;
@@ -37,6 +36,7 @@
 import 
org.apache.hadoop.hdds.protocol.proto.HddsProtos.DeletedBlocksTransactionSummary;
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.ContainerBalancerStatusInfoResponseProto;
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.DecommissionScmResponseProto;
+import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.SafeModeRuleStatusProto;
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.StartContainerBalancerResponseProto;
 import org.apache.hadoop.hdds.scm.DatanodeAdminError;
 import org.apache.hadoop.hdds.scm.ScmConfigKeys;
@@ -375,8 +375,7 @@ public boolean inSafeMode() throws IOException {
   }
 
   @Override
-  public Map<String, Pair<Boolean, String>> getSafeModeRuleStatuses()
-      throws IOException {
+  public List<SafeModeRuleStatusProto> getSafeModeRuleStatuses() throws 
IOException {
     return storageContainerLocationClient.getSafeModeRuleStatuses();
   }
 
diff --git 
a/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/SafeModeCheckSubcommand.java
 
b/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/SafeModeCheckSubcommand.java
index 7af5ea3d0c6..d9064640105 100644
--- 
a/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/SafeModeCheckSubcommand.java
+++ 
b/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/SafeModeCheckSubcommand.java
@@ -20,16 +20,15 @@
 import java.io.IOException;
 import java.net.InetAddress;
 import java.util.List;
-import java.util.Map;
 import java.util.OptionalInt;
 import java.util.concurrent.Callable;
 import java.util.stream.Collectors;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.tuple.Pair;
 import org.apache.hadoop.hdds.HddsUtils;
 import org.apache.hadoop.hdds.cli.AbstractSubcommand;
 import org.apache.hadoop.hdds.cli.HddsVersionProvider;
 import org.apache.hadoop.hdds.conf.OzoneConfiguration;
+import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.SafeModeRuleStatusProto;
 import org.apache.hadoop.hdds.scm.client.ScmClient;
 import org.apache.hadoop.hdds.scm.ha.SCMNodeInfo;
 import 
org.apache.hadoop.hdds.scm.protocolPB.StorageContainerLocationProtocolClientSideTranslatorPB.ScmNodeTarget;
@@ -172,9 +171,11 @@ private void queryNode(ScmClient scmClient, ScmNodeTarget 
targetScmNode, SCMNode
       }
 
       if (isVerbose()) {
-        Map<String, Pair<Boolean, String>> rules = 
scmClient.getSafeModeRuleStatuses();
+        List<SafeModeRuleStatusProto> rules = 
scmClient.getSafeModeRuleStatuses();
         if (rules != null && !rules.isEmpty()) {
-          printSafeModeRules(rules);
+          for (SafeModeRuleStatusProto r : rules) {
+            System.out.printf("validated:%s, %s, %s%n", r.getValidate(), 
r.getRuleName(), r.getStatusText());
+          }
         }
       }
     } catch (Exception e) {
@@ -217,12 +218,4 @@ private boolean matchesAddress(String address1, String 
address2) {
       return false;
     }
   }
-  
-  private void printSafeModeRules(Map<String, Pair<Boolean, String>> rules) {
-    for (Map.Entry<String, Pair<Boolean, String>> entry : rules.entrySet()) {
-      Pair<Boolean, String> value = entry.getValue();
-      System.out.printf("validated:%s, %s, %s%n",
-          value.getLeft(), entry.getKey(), value.getRight());
-    }
-  }
 }


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

Reply via email to