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 d80b6293e5 HDDS-6728. SCM UI not showing correct HA roles (#3401)
d80b6293e5 is described below

commit d80b6293e55037ae80e4281b5c74d0522337dedd
Author: Symious <[email protected]>
AuthorDate: Tue Jul 26 17:19:49 2022 +0800

    HDDS-6728. SCM UI not showing correct HA roles (#3401)
---
 .../apache/hadoop/hdds/scm/ha/SCMRatisServerImpl.java  | 18 ++++++++++++------
 .../ozone/scm/TestStorageContainerManagerHA.java       | 14 ++++++++++++++
 2 files changed, 26 insertions(+), 6 deletions(-)

diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMRatisServerImpl.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMRatisServerImpl.java
index f8193fa21b..d549c2bfe9 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMRatisServerImpl.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMRatisServerImpl.java
@@ -37,7 +37,6 @@ import org.apache.hadoop.hdds.ratis.RatisHelper;
 import org.apache.hadoop.hdds.scm.AddSCMRequest;
 import org.apache.hadoop.hdds.scm.ScmConfigKeys;
 import org.apache.hadoop.hdds.scm.server.StorageContainerManager;
-import org.apache.hadoop.net.NetUtils;
 import org.apache.hadoop.hdds.security.x509.SecurityConfig;
 import org.apache.hadoop.ozone.OzoneConsts;
 import org.apache.hadoop.util.Time;
@@ -250,6 +249,7 @@ public class SCMRatisServerImpl implements SCMRatisServer {
   @Override
   public List<String> getRatisRoles() throws IOException {
     Collection<RaftPeer> peers = division.getGroup().getPeers();
+    RaftPeer leader = getLeader();
     List<String> ratisRoles = new ArrayList<>();
     for (RaftPeer peer : peers) {
       InetAddress peerInetAddress = null;
@@ -260,12 +260,8 @@ public class SCMRatisServerImpl implements SCMRatisServer {
         LOG.error("SCM Ratis PeerInetAddress {} is unresolvable",
             peer.getAddress());
       }
-      boolean isLocal = false;
-      if (peerInetAddress != null) {
-        isLocal = NetUtils.isLocalAddress(peerInetAddress);
-      }
       ratisRoles.add((peer.getAddress() == null ? "" :
-              peer.getAddress().concat(isLocal ?
+          peer.getAddress().concat(peer.equals(leader) ?
                   ":".concat(RaftProtos.RaftPeerRole.LEADER.toString()) :
                   ":".concat(RaftProtos.RaftPeerRole.FOLLOWER.toString()))
                   .concat(":".concat(peer.getId().toString()))
@@ -353,4 +349,14 @@ public class SCMRatisServerImpl implements SCMRatisServer {
         UUID.fromString(clusterId.replace(OzoneConsts.CLUSTER_ID_PREFIX, "")));
   }
 
+  private RaftPeer getLeader() {
+    if (division.getInfo().isLeader()) {
+      return division.getPeer();
+    } else {
+      ByteString leaderId = division.getInfo().getRoleInfoProto()
+          .getFollowerInfo().getLeaderInfo().getId().getId();
+      return leaderId.isEmpty() ? null :
+          division.getRaftConf().getPeer(RaftPeerId.valueOf(leaderId));
+    }
+  }
 }
diff --git 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/scm/TestStorageContainerManagerHA.java
 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/scm/TestStorageContainerManagerHA.java
index 30386fe633..fdf3c19820 100644
--- 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/scm/TestStorageContainerManagerHA.java
+++ 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/scm/TestStorageContainerManagerHA.java
@@ -57,7 +57,9 @@ import org.slf4j.LoggerFactory;
 import java.io.IOException;
 import java.time.Instant;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 import java.util.UUID;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
@@ -299,4 +301,16 @@ public class TestStorageContainerManagerHA {
         true);
     Assert.assertTrue(StorageContainerManager.scmBootstrap(conf2));
   }
+
+  @Test
+  public void testGetRatisRolesDetail() throws IOException {
+    Set<String> resultSet = new HashSet<>();
+    for (StorageContainerManager scm: cluster.getStorageContainerManagers()) {
+      resultSet.addAll(scm.getScmHAManager().getRatisServer().getRatisRoles());
+    }
+    System.out.println(resultSet);
+    Assert.assertEquals(3, resultSet.size());
+    Assert.assertEquals(1,
+        resultSet.stream().filter(x -> x.contains("LEADER")).count());
+  }
 }


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

Reply via email to