diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMRatisServer.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMRatisServer.java index b351c8694c9d..7a19731118fa 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMRatisServer.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMRatisServer.java @@ -23,6 +23,7 @@ import org.apache.ratis.server.RaftServer; import java.io.IOException; +import java.net.UnknownHostException; import java.util.List; import java.util.concurrent.ExecutionException; @@ -45,7 +46,7 @@ SCMRatisResponse submitRequest(SCMRatisRequest request) /** * Returns roles of ratis peers. */ - List getRatisRoles(); + List getRatisRoles() throws UnknownHostException; /** * Returns NotLeaderException with useful info. 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 79da583f4255..01c74f14874a 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 @@ -18,24 +18,29 @@ package org.apache.hadoop.hdds.scm.ha; import java.io.IOException; +import java.net.InetAddress; +import java.net.UnknownHostException; import java.util.ArrayList; import java.util.List; import java.util.UUID; import java.util.Iterator; +import java.util.Collection; import java.util.concurrent.ExecutionException; import java.util.concurrent.atomic.AtomicLong; -import java.util.stream.Collectors; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; +import org.apache.hadoop.hdds.HddsUtils; import org.apache.hadoop.hdds.conf.ConfigurationSource; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.protocol.proto.SCMRatisProtocol.RequestType; import org.apache.hadoop.hdds.scm.AddSCMRequest; import org.apache.hadoop.hdds.scm.server.StorageContainerManager; +import org.apache.hadoop.net.NetUtils; import org.apache.hadoop.ozone.OzoneConsts; import org.apache.hadoop.util.Time; import org.apache.ratis.conf.RaftProperties; +import org.apache.ratis.proto.RaftProtos; import org.apache.ratis.protocol.ClientId; import org.apache.ratis.protocol.RaftClientReply; import org.apache.ratis.protocol.RaftClientRequest; @@ -223,12 +228,18 @@ public void stop() throws IOException { } @Override - public List getRatisRoles() { - return division.getGroup().getPeers().stream() - .map(peer -> peer.getAddress() == null ? "" : peer.getAddress()) - .collect(Collectors.toList()); + public List getRatisRoles() throws UnknownHostException { + Collection peers = division.getGroup().getPeers(); + List ratisRoles = new ArrayList<>(); + for (RaftPeer peer : peers) { + InetAddress peerInetAddress = InetAddress.getByName(HddsUtils.getHostName(peer.getAddress()).get()); + boolean isLocal = NetUtils.isLocalAddress(peerInetAddress); + ratisRoles.add((peer.getAddress() == null ? "" : peer.getAddress() + .concat(isLocal ? ":".concat(RaftProtos.RaftPeerRole.LEADER.toString()) : + ":".concat(RaftProtos.RaftPeerRole.FOLLOWER.toString())))); + } + return ratisRoles; } - /** * {@inheritDoc} */ diff --git a/hadoop-ozone/dist/src/main/smoketest/admincli/scmha.robot b/hadoop-ozone/dist/src/main/smoketest/admincli/scmha.robot index 4d7c23237bfc..9594137d6903 100644 --- a/hadoop-ozone/dist/src/main/smoketest/admincli/scmha.robot +++ b/hadoop-ozone/dist/src/main/smoketest/admincli/scmha.robot @@ -25,4 +25,4 @@ Test Timeout 5 minutes *** Test Cases *** Run scm roles ${output} = Execute ozone admin scm roles - Should contain ${output} [scm:9865] + Should Match Regexp ${output} [scm:9865:(LEADER|FOLLOWER)]