You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ozone.apache.org by bh...@apache.org on 2021/05/26 16:33:12 UTC

[ozone] branch master updated: HDDS-5241. SCM UI should have leader/follower and Primordial SCM information (#2260)

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

bharat 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 d9ae1b3  HDDS-5241. SCM UI should have leader/follower and Primordial SCM information (#2260)
d9ae1b3 is described below

commit d9ae1b3b03b2ae322dac56031087fc0c130c0de1
Author: Sadanand Shenoy <sa...@gmail.com>
AuthorDate: Wed May 26 22:02:45 2021 +0530

    HDDS-5241. SCM UI should have leader/follower and Primordial SCM information (#2260)
    
    Co-authored-by: Sadanand Shenoy <sa...@cloudera.com>
---
 .../java/org/apache/hadoop/hdds/HddsUtils.java     | 17 ++++++++++++
 .../apache/hadoop/hdds/scm/server/SCMMXBean.java   | 10 ++++++++
 .../hdds/scm/server/StorageContainerManager.java   | 30 ++++++++++++++++++++++
 .../main/resources/webapps/scm/scm-overview.html   |  8 ++++++
 .../dist/src/main/compose/ozone-ha/docker-config   |  1 +
 5 files changed, 66 insertions(+)

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 6e701d5..c38ff3d 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
@@ -586,4 +586,21 @@ public final class HddsUtils {
     }
     return password;
   }
+
+  /**
+   * Utility string formatter method to display SCM roles.
+   *
+   * @param nodes
+   * @return
+   */
+  public static String format(List<String> 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 6e6d440..63862ce 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 09529d5..9f4a501 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.InetAddress;
 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;
@@ -1730,4 +1731,33 @@ public final class StorageContainerManager extends ServiceRuntimeInfoImpl
     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<SCMNodeDetails> 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 c9ce216..e7a67ed 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 @@
         <td>Node Manager: Safe mode status</td>
         <td>{{$ctrl.overview.jmx.InSafeMode}}</td>
     </tr>
+    <tr>
+        <td> SCM Roles (HA) </td>
+        <td>{{$ctrl.overview.jmx.ScmRatisRoles}}</td>
+    </tr>
+    <tr ng-hide="!$ctrl.overview.jmx.PrimordialNode">
+        <td> Primordial Node (HA) </td>
+        <td>{{$ctrl.overview.jmx.PrimordialNode}}</td>
+    </tr>
     </tbody>
 </table>
 
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 bdc0c43..40f2760 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

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@ozone.apache.org
For additional commands, e-mail: commits-help@ozone.apache.org