diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/HddsUtils.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/HddsUtils.java index e03e9287ef18..307f554491a0 100644 --- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/HddsUtils.java +++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/HddsUtils.java @@ -562,4 +562,21 @@ static String getPassword(ConfigurationSource conf, String alias) { } return password; } + + /** + * Utility string formatter method to display SCM roles. + * + * @param nodes + * @return + */ + public static String format(List nodes) { + StringBuilder sb = new StringBuilder(); + for (String node : nodes) { + String[] x = node.split(":"); + sb.append(String + .format("{ HostName : %s, Ratis Port : %s, Role : %s } ", x[0], x[1], + x[2])); + } + return sb.toString(); + } } diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/SCMMXBean.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/SCMMXBean.java index 6e6d440c0913..63862cee3b70 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/SCMMXBean.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/SCMMXBean.java @@ -18,6 +18,7 @@ package org.apache.hadoop.hdds.scm.server; +import java.io.IOException; import java.util.Map; import org.apache.hadoop.hdds.annotation.InterfaceAudience; @@ -70,4 +71,13 @@ public interface SCMMXBean extends ServiceRuntimeInfo { String getScmId(); String getClusterId(); + + String getScmRatisRoles() throws IOException; + + /** + * Primordial node is the node on which scm init operation is performed. + * @return hostname of primordialNode + */ + String getPrimordialNode(); + } 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 44a7b8a86d22..9b934c83b530 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 @@ -138,6 +138,7 @@ import java.net.InetSocketAddress; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; +import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; @@ -1708,4 +1709,33 @@ ContainerTokenSecretManager getContainerTokenSecretManager() { return containerTokenMgr; } + @Override + public String getScmRatisRoles() throws IOException { + return HddsUtils.format(getScmHAManager().getRatisServer().getRatisRoles()); + } + + /** + * @return hostname of primordialNode + */ + @Override + public String getPrimordialNode() { + if (SCMHAUtils.isSCMHAEnabled(configuration)) { + String primordialNode = SCMHAUtils.getPrimordialSCM(configuration); + // primordialNode can be nodeId too . If it is then return hostname. + if (SCMHAUtils.getSCMNodeIds(configuration).contains(primordialNode)) { + List localAndPeerNodes = + new ArrayList<>(scmHANodeDetails.getPeerNodeDetails()); + localAndPeerNodes.add(getSCMHANodeDetails().getLocalNodeDetails()); + for (SCMNodeDetails nodes : localAndPeerNodes) { + if (nodes.getNodeId().equals(primordialNode)) { + return nodes.getHostName(); + } + } + + } + return primordialNode; + } + return null; + } + } diff --git a/hadoop-hdds/server-scm/src/main/resources/webapps/scm/scm-overview.html b/hadoop-hdds/server-scm/src/main/resources/webapps/scm/scm-overview.html index c9ce21675a72..e7a67edcc390 100644 --- a/hadoop-hdds/server-scm/src/main/resources/webapps/scm/scm-overview.html +++ b/hadoop-hdds/server-scm/src/main/resources/webapps/scm/scm-overview.html @@ -62,6 +62,14 @@

Status

Node Manager: Safe mode status {{$ctrl.overview.jmx.InSafeMode}} + + SCM Roles (HA) + {{$ctrl.overview.jmx.ScmRatisRoles}} + + + Primordial Node (HA) + {{$ctrl.overview.jmx.PrimordialNode}} + diff --git a/hadoop-ozone/dist/src/main/compose/ozone-ha/docker-config b/hadoop-ozone/dist/src/main/compose/ozone-ha/docker-config index bdc0c4331ccf..40f27606faed 100644 --- a/hadoop-ozone/dist/src/main/compose/ozone-ha/docker-config +++ b/hadoop-ozone/dist/src/main/compose/ozone-ha/docker-config @@ -35,6 +35,7 @@ OZONE-SITE.XML_ozone.metadata.dirs=/data/metadata OZONE-SITE.XML_hdds.datanode.dir=/data/hdds OZONE-SITE.XML_ozone.datanode.pipeline.limit=1 OZONE-SITE.XML_hdds.scmclient.max.retry.timeout=30s +OZONE-SITE.XML_ozone.scm.primordial.node.id=scm1 OZONE_CONF_DIR=/etc/hadoop OZONE_LOG_DIR=/var/log/hadoop