From 2256fb929866f82130bcb7676e2a61be9dd8386c Mon Sep 17 00:00:00 2001 From: Symious Date: Wed, 11 May 2022 12:14:21 +0800 Subject: [PATCH 1/2] HDDS-6728. Refactor getRatisRoles of SCM --- .../hadoop/hdds/scm/ha/SCMRatisServerImpl.java | 17 +++++++++++------ .../scm/TestStorageContainerManagerHA.java | 14 ++++++++++++++ 2 files changed, 25 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 f8193fa21bb7..b96fdda816b7 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.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; @@ -260,12 +259,8 @@ public List getRatisRoles() throws IOException { 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 == getLeader() ? ":".concat(RaftProtos.RaftPeerRole.LEADER.toString()) : ":".concat(RaftProtos.RaftPeerRole.FOLLOWER.toString())) .concat(":".concat(peer.getId().toString())) @@ -353,4 +348,14 @@ public static RaftGroupId buildRaftGroupId(String clusterId) { 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 fb5b43733449..c35c066cb48d 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 @@ -45,7 +45,9 @@ 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 org.apache.hadoop.hdds.conf.OzoneConfiguration; @@ -251,4 +253,16 @@ public void testBootStrapSCM() throws Exception { true); Assert.assertTrue(StorageContainerManager.scmBootstrap(conf2)); } + + @Test + public void testGetRatisRolesDetail() throws IOException { + Set 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()); + } } From 8eb1a44250b8a449a0c2bb2c426e21f841350089 Mon Sep 17 00:00:00 2001 From: Symious Date: Tue, 26 Jul 2022 11:46:50 +0800 Subject: [PATCH 2/2] HDDS-6728. Fix comments --- .../java/org/apache/hadoop/hdds/scm/ha/SCMRatisServerImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 b96fdda816b7..d549c2bfe9a6 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 @@ -249,6 +249,7 @@ public boolean isStopped() { @Override public List getRatisRoles() throws IOException { Collection peers = division.getGroup().getPeers(); + RaftPeer leader = getLeader(); List ratisRoles = new ArrayList<>(); for (RaftPeer peer : peers) { InetAddress peerInetAddress = null; @@ -260,7 +261,7 @@ public List getRatisRoles() throws IOException { peer.getAddress()); } ratisRoles.add((peer.getAddress() == null ? "" : - peer.getAddress().concat(peer == getLeader() ? + peer.getAddress().concat(peer.equals(leader) ? ":".concat(RaftProtos.RaftPeerRole.LEADER.toString()) : ":".concat(RaftProtos.RaftPeerRole.FOLLOWER.toString())) .concat(":".concat(peer.getId().toString()))