From 915be4592a3eaa4e0e6770b2ccdad960445d790d Mon Sep 17 00:00:00 2001 From: Mohammad Arafat Khan Date: Wed, 15 Jun 2022 18:39:40 +0530 Subject: [PATCH 01/18] HDDS-6863. Add Group-Id & Ratis-Ring information for OM UI. --- .../org/apache/hadoop/ozone/om/OMMXBean.java | 5 +++ .../apache/hadoop/ozone/om/OzoneManager.java | 33 +++++++++++++++++++ .../webapps/ozoneManager/om-overview.html | 12 +++++++ .../webapps/ozoneManager/ozoneManager.js | 7 ++++ 4 files changed, 57 insertions(+) diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMXBean.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMXBean.java index 84e71e0470d0..75cb9005af06 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMXBean.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMXBean.java @@ -28,4 +28,9 @@ public interface OMMXBean extends ServiceRuntimeInfo { String getRpcPort(); + + String getOmRatisRoles(); + + String getCurrentHost(); + } diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java index 0e27ac05653b..cd8d0b9fe40f 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java @@ -210,6 +210,7 @@ import static org.apache.hadoop.fs.CommonConfigurationKeysPublic.FS_TRASH_INTERVAL_KEY; import static org.apache.hadoop.hdds.HddsConfigKeys.HDDS_BLOCK_TOKEN_ENABLED; import static org.apache.hadoop.hdds.HddsConfigKeys.HDDS_BLOCK_TOKEN_ENABLED_DEFAULT; +import static org.apache.hadoop.hdds.HddsUtils.getHostName; import static org.apache.hadoop.hdds.HddsUtils.getScmAddressForClients; import static org.apache.hadoop.hdds.security.x509.certificates.utils.CertificateSignRequest.getEncodedString; import static org.apache.hadoop.hdds.server.ServerUtils.getRemoteUserName; @@ -2960,6 +2961,38 @@ public String getRpcPort() { return "" + omRpcAddress.getPort(); } + @Override + public String getOmRatisRoles() { + List serviceList = null; + StringBuilder sb = new StringBuilder(); + try { + serviceList = getServiceList(); + } catch (IOException e) { + } + for (ServiceInfo info : serviceList) { + if (info.getOmRoleInfo() != null) { + sb.append( + String.format( + "{ HostName: %s, Ratis Port: %s, Node-Id: %s, Role: %s } ", + info.getHostname(), + info.getPort(ServicePort.Type.RATIS), + info.getOmRoleInfo().getNodeId(), + info.getOmRoleInfo().getServerRole() + )); + }} + return sb.toString(); + } + + @Override + public String getCurrentHost() { + String name = null; + try { + name = getHostName(configuration); + } catch (Exception e) { + } + return name; + } + @VisibleForTesting public OzoneManagerHttpServer getHttpServer() { return httpServer; diff --git a/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/om-overview.html b/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/om-overview.html index 4f52e413b2fd..70e82200cbbd 100644 --- a/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/om-overview.html +++ b/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/om-overview.html @@ -22,5 +22,17 @@

Status

Rpc port {{$ctrl.overview.jmx.RpcPort}} + + OM Roles (HA) + {{$ctrl.overview.jmx.OmRatisRoles}} + + + Current-Host + {{$ctrl.overview.jmx.CurrentHost}} + + + Group-Id + {{$ctrl.role.GroupId}} + diff --git a/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/ozoneManager.js b/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/ozoneManager.js index 6c59a5be5856..6f7786963d59 100644 --- a/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/ozoneManager.js +++ b/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/ozoneManager.js @@ -113,5 +113,12 @@ require: { overview: "^overview" }, + controller: function ($http) { + var ctrl = this; + $http.get("http://localhost:9874/jmx?qry=Ratis:service=RaftServer,group=*,id=*") + .then(function (result) { + ctrl.role = result.data.beans[0]; + }); + } }); })(); From 0c0aab73cd64f7cdfdec936d55db662555163b17 Mon Sep 17 00:00:00 2001 From: Mohammad Arafat Khan Date: Wed, 15 Jun 2022 19:03:36 +0530 Subject: [PATCH 02/18] Fixed styling issues --- .../src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java index 06f0aa15734c..f1ebde3c54cf 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java @@ -2997,6 +2997,8 @@ public String getCurrentHost() { } catch (Exception e) { } return name; + } + public String getRatisLogDirectory() { return OzoneManagerRatisUtils.getOMRatisDirectory(configuration); } From 4f794b37bf9a5da511160a12110d15cdbc86d3e0 Mon Sep 17 00:00:00 2001 From: Mohammad Arafat Khan Date: Wed, 15 Jun 2022 19:15:45 +0530 Subject: [PATCH 03/18] Fixed styling issues --- .../src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java index f1ebde3c54cf..131d38789707 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java @@ -2985,7 +2985,8 @@ public String getOmRatisRoles() { info.getOmRoleInfo().getNodeId(), info.getOmRoleInfo().getServerRole() )); - }} + } + } return sb.toString(); } From b667b5a22568dac84e01092ab3ce9f509d78a97a Mon Sep 17 00:00:00 2001 From: Mohammad Arafat Khan Date: Thu, 16 Jun 2022 11:40:39 +0530 Subject: [PATCH 04/18] Fixed bugs --- .../src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java | 1 + 1 file changed, 1 insertion(+) diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java index 131d38789707..000b4ef531a8 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java @@ -2974,6 +2974,7 @@ public String getOmRatisRoles() { try { serviceList = getServiceList(); } catch (IOException e) { + return ""; } for (ServiceInfo info : serviceList) { if (info.getOmRoleInfo() != null) { From 9e7be9e420766837ccb0ae043697d6ad7659d06b Mon Sep 17 00:00:00 2001 From: Mohammad Arafat Khan Date: Thu, 16 Jun 2022 16:09:07 +0530 Subject: [PATCH 05/18] Made changes for code-review --- .../java/org/apache/hadoop/ozone/OmUtils.java | 19 ++++++++++++++ .../org/apache/hadoop/ozone/om/OMMXBean.java | 4 +-- .../apache/hadoop/ozone/om/OzoneManager.java | 26 ++----------------- .../webapps/ozoneManager/om-overview.html | 4 +-- .../webapps/ozoneManager/ozoneManager.js | 2 +- 5 files changed, 25 insertions(+), 30 deletions(-) diff --git a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java index 853a14aa1e68..ef6de0b38635 100644 --- a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java +++ b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java @@ -49,6 +49,7 @@ import org.apache.hadoop.ozone.om.helpers.OMNodeDetails; import org.apache.hadoop.ozone.om.helpers.OmKeyInfo; import org.apache.hadoop.ozone.om.helpers.RepeatedOmKeyInfo; +import org.apache.hadoop.ozone.om.helpers.ServiceInfo; import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos; import org.apache.commons.lang3.StringUtils; @@ -789,4 +790,22 @@ public static String getOMAddressListPrintString(List omList) { printString.append("]"); return printString.toString(); } + + public static String format(List nodes) { + StringBuilder sb = new StringBuilder(); + for (ServiceInfo info : nodes) { + if (info.getOmRoleInfo() != null) { + sb.append( + String.format( + "{ HostName: %s, Ratis Port: %s, Node-Id: %s, Role: %s } ", + info.getHostname(), + info.getPort(OzoneManagerProtocolProtos.ServicePort.Type.RATIS), + info.getOmRoleInfo().getNodeId(), + info.getOmRoleInfo().getServerRole() + )); + } + } + return sb.toString(); + } + } diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMXBean.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMXBean.java index f546790ec726..5e46ac7aec9c 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMXBean.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMXBean.java @@ -30,9 +30,7 @@ public interface OMMXBean extends ServiceRuntimeInfo { String getRpcPort(); String getOmRatisRoles(); - - String getCurrentHost(); - + String getRatisLogDirectory(); String getRocksDbDirectory(); diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java index 000b4ef531a8..22d45538eb59 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java @@ -210,7 +210,6 @@ import static org.apache.hadoop.fs.CommonConfigurationKeysPublic.FS_TRASH_INTERVAL_KEY; import static org.apache.hadoop.hdds.HddsConfigKeys.HDDS_BLOCK_TOKEN_ENABLED; import static org.apache.hadoop.hdds.HddsConfigKeys.HDDS_BLOCK_TOKEN_ENABLED_DEFAULT; -import static org.apache.hadoop.hdds.HddsUtils.getHostName; import static org.apache.hadoop.hdds.HddsUtils.getScmAddressForClients; import static org.apache.hadoop.hdds.security.x509.certificates.utils.CertificateSignRequest.getEncodedString; import static org.apache.hadoop.hdds.server.ServerUtils.getRemoteUserName; @@ -2974,31 +2973,10 @@ public String getOmRatisRoles() { try { serviceList = getServiceList(); } catch (IOException e) { + LOG.error("IO-Exception Occurred"); return ""; } - for (ServiceInfo info : serviceList) { - if (info.getOmRoleInfo() != null) { - sb.append( - String.format( - "{ HostName: %s, Ratis Port: %s, Node-Id: %s, Role: %s } ", - info.getHostname(), - info.getPort(ServicePort.Type.RATIS), - info.getOmRoleInfo().getNodeId(), - info.getOmRoleInfo().getServerRole() - )); - } - } - return sb.toString(); - } - - @Override - public String getCurrentHost() { - String name = null; - try { - name = getHostName(configuration); - } catch (Exception e) { - } - return name; + return OmUtils.format(serviceList); } public String getRatisLogDirectory() { diff --git a/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/om-overview.html b/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/om-overview.html index 10c431293084..b61d5f778822 100644 --- a/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/om-overview.html +++ b/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/om-overview.html @@ -27,8 +27,8 @@

Status

{{$ctrl.overview.jmx.OmRatisRoles}} - Current-Host - {{$ctrl.overview.jmx.CurrentHost}} + Current-Role + {{$ctrl.role.Role}} Group-Id diff --git a/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/ozoneManager.js b/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/ozoneManager.js index 6f7786963d59..7a53621b6e9d 100644 --- a/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/ozoneManager.js +++ b/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/ozoneManager.js @@ -115,7 +115,7 @@ }, controller: function ($http) { var ctrl = this; - $http.get("http://localhost:9874/jmx?qry=Ratis:service=RaftServer,group=*,id=*") + $http.get("jmx?qry=Ratis:service=RaftServer,group=*,id=*") .then(function (result) { ctrl.role = result.data.beans[0]; }); From 27ecf614b5f0332043869b540f9eaed03e7bd2dd Mon Sep 17 00:00:00 2001 From: Mohammad Arafat Khan Date: Thu, 16 Jun 2022 16:41:10 +0530 Subject: [PATCH 06/18] Made changes for code-review --- .../src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java | 1 - 1 file changed, 1 deletion(-) diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java index 22d45538eb59..20a04cc9859b 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java @@ -2969,7 +2969,6 @@ public String getRpcPort() { public String getOmRatisRoles() { List serviceList = null; - StringBuilder sb = new StringBuilder(); try { serviceList = getServiceList(); } catch (IOException e) { From 0043438d1fc2bfb4429b957baffd9033e9f64923 Mon Sep 17 00:00:00 2001 From: Mohammad Arafat Khan Date: Thu, 23 Jun 2022 13:40:31 +0530 Subject: [PATCH 07/18] Tested the patch in OM environment --- .../java/org/apache/hadoop/ozone/OmUtils.java | 19 ++++++++++++++----- .../apache/hadoop/ozone/om/OzoneManager.java | 5 +++-- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java index ef6de0b38635..67eb1f277ded 100644 --- a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java +++ b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java @@ -41,6 +41,7 @@ import org.apache.hadoop.fs.Path; import org.apache.hadoop.hdds.conf.ConfigurationSource; import org.apache.hadoop.hdds.conf.OzoneConfiguration; +import org.apache.hadoop.hdds.protocol.proto.HddsProtos; import org.apache.hadoop.hdds.scm.client.HddsClientUtils; import org.apache.hadoop.net.NetUtils; import org.apache.hadoop.ozone.conf.OMClientConfig; @@ -791,21 +792,29 @@ public static String getOMAddressListPrintString(List omList) { return printString.toString(); } - public static String format(List nodes) { + public static String format(List nodes, int port) { StringBuilder sb = new StringBuilder(); + int count = 0; for (ServiceInfo info : nodes) { - if (info.getOmRoleInfo() != null) { + // Printing only the OM's running + if (info.getNodeType() == HddsProtos.NodeType.OM) { sb.append( String.format( - "{ HostName: %s, Ratis Port: %s, Node-Id: %s, Role: %s } ", + "{ HostName: %s | Node-Id: %s | Ratis-Port : %d | Role: %s } ", info.getHostname(), - info.getPort(OzoneManagerProtocolProtos.ServicePort.Type.RATIS), info.getOmRoleInfo().getNodeId(), + port, info.getOmRoleInfo().getServerRole() )); + count++; } } - return sb.toString(); + // Print Stand-alone if only one OM exists + if (count == 1) { + return "STANDALONE"; + } else { + return sb.toString(); + } } } diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java index 20a04cc9859b..9fa90d706356 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java @@ -2969,13 +2969,14 @@ public String getRpcPort() { public String getOmRatisRoles() { List serviceList = null; + int port = omNodeDetails.getRatisPort(); try { serviceList = getServiceList(); } catch (IOException e) { LOG.error("IO-Exception Occurred"); - return ""; + return "Null values found"; } - return OmUtils.format(serviceList); + return OmUtils.format(serviceList, port); } public String getRatisLogDirectory() { From e6b6a842a19e5c64e62e03b039aa05fbe218ddbf Mon Sep 17 00:00:00 2001 From: Mohammad Arafat Khan Date: Tue, 28 Jun 2022 21:20:20 +0530 Subject: [PATCH 08/18] Printed Exception in Log error message --- .../main/java/org/apache/hadoop/ozone/om/OzoneManager.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java index 9fa90d706356..36dd982a6abd 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java @@ -2973,8 +2973,8 @@ public String getOmRatisRoles() { try { serviceList = getServiceList(); } catch (IOException e) { - LOG.error("IO-Exception Occurred"); - return "Null values found"; + LOG.error("IO-Exception Occurred", e); + return "Exception: " + e.toString(); } return OmUtils.format(serviceList, port); } From 1eaaa8de23934653690104da7dc0ac7faf6fee46 Mon Sep 17 00:00:00 2001 From: Mohammad Arafat Khan Date: Mon, 18 Jul 2022 21:58:54 +0530 Subject: [PATCH 09/18] Fixed the wrong leader problem --- .../main/java/org/apache/hadoop/ozone/OmUtils.java | 7 ++----- .../java/org/apache/hadoop/ozone/om/OMMXBean.java | 2 ++ .../org/apache/hadoop/ozone/om/OzoneManager.java | 12 +++++++++++- .../ozone/om/ratis/OzoneManagerRatisServer.java | 13 +++++++++++++ .../resources/webapps/ozoneManager/om-overview.html | 4 ++++ 5 files changed, 32 insertions(+), 6 deletions(-) diff --git a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java index 67eb1f277ded..549d96eea886 100644 --- a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java +++ b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java @@ -305,7 +305,6 @@ public static boolean isReadOnly( case SetS3Secret: case RevokeS3Secret: case PurgeDirectories: - case PurgePaths: case CreateTenant: case DeleteTenant: case TenantAssignUserAccessId: @@ -800,11 +799,10 @@ public static String format(List nodes, int port) { if (info.getNodeType() == HddsProtos.NodeType.OM) { sb.append( String.format( - "{ HostName: %s | Node-Id: %s | Ratis-Port : %d | Role: %s } ", + " { HostName: %s | Node-Id: %s | Ratis-Port : %d } ", info.getHostname(), info.getOmRoleInfo().getNodeId(), - port, - info.getOmRoleInfo().getServerRole() + port )); count++; } @@ -816,5 +814,4 @@ public static String format(List nodes, int port) { return sb.toString(); } } - } diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMXBean.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMXBean.java index 5e46ac7aec9c..4005cf1c10de 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMXBean.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMXBean.java @@ -35,4 +35,6 @@ public interface OMMXBean extends ServiceRuntimeInfo { String getRocksDbDirectory(); + String getRatisLeader(); + } diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java index 36dd982a6abd..f23f854ad66d 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java @@ -277,6 +277,7 @@ import static org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.PrepareStatusResponse.PrepareStatus; import org.apache.ratis.proto.RaftProtos.RaftPeerRole; import org.apache.ratis.protocol.RaftGroupId; +import org.apache.ratis.protocol.RaftPeer; import org.apache.ratis.protocol.RaftPeerId; import org.apache.ratis.server.protocol.TermIndex; import org.apache.ratis.util.ExitUtils; @@ -2966,7 +2967,6 @@ public String getRpcPort() { } @Override - public String getOmRatisRoles() { List serviceList = null; int port = omNodeDetails.getRatisPort(); @@ -2979,6 +2979,16 @@ public String getOmRatisRoles() { return OmUtils.format(serviceList, port); } + @Override + public String getRatisLeader() { + RaftPeer leaderId = null; + try { + leaderId = omRatisServer.getLeader(); + } catch (IOException e) { + } + return leaderId.getId().toString(); + } + public String getRatisLogDirectory() { return OzoneManagerRatisUtils.getOMRatisDirectory(configuration); } diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/OzoneManagerRatisServer.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/OzoneManagerRatisServer.java index 5ee7b27c8295..92b685d6a89f 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/OzoneManagerRatisServer.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/OzoneManagerRatisServer.java @@ -82,6 +82,7 @@ import org.apache.ratis.server.RaftServer; import org.apache.ratis.server.RaftServerConfigKeys; import org.apache.ratis.server.protocol.TermIndex; +import org.apache.ratis.thirdparty.com.google.protobuf.ByteString; import org.apache.ratis.util.LifeCycle; import org.apache.ratis.util.SizeInBytes; import org.apache.ratis.util.StringUtils; @@ -728,6 +729,18 @@ private static Map getOMHAConfigs( .getPropsMatchPrefixAndTrimPrefix(OZONE_OM_HA_PREFIX + "."); } + public RaftPeer getLeader() throws IOException { + RaftServer.Division division = server.getDivision(raftGroupId); + 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)); + } + } + /** * Defines RaftServer Status. */ diff --git a/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/om-overview.html b/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/om-overview.html index b61d5f778822..efcf73731884 100644 --- a/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/om-overview.html +++ b/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/om-overview.html @@ -22,6 +22,10 @@

Status

Rpc port {{$ctrl.overview.jmx.RpcPort}} + + Leader-Id + {{$ctrl.overview.jmx.RatisLeader}} + OM Roles (HA) {{$ctrl.overview.jmx.OmRatisRoles}} From 41ad736849e4e9306a550b9ebcfef43320278c74 Mon Sep 17 00:00:00 2001 From: Mohammad Arafat Khan Date: Mon, 18 Jul 2022 22:05:22 +0530 Subject: [PATCH 10/18] Removed an un-wanted change --- .../src/main/java/org/apache/hadoop/ozone/OmUtils.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java index 549d96eea886..584dcf5723c2 100644 --- a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java +++ b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java @@ -269,6 +269,11 @@ public static boolean isReadOnly( case ListTenant: case TenantGetUserInfo: case TenantListUser: + case RangerBGSync: + // RangerBGSync is a read operation in the sense that it doesn't directly + // write to OM DB. And therefore it doesn't need a OMClientRequest. + // Although indirectly the Ranger sync service task could invoke write + // operation SetRangerServiceVersion. return true; case CreateVolume: case SetVolumeProperty: @@ -305,6 +310,7 @@ public static boolean isReadOnly( case SetS3Secret: case RevokeS3Secret: case PurgeDirectories: + case PurgePaths: case CreateTenant: case DeleteTenant: case TenantAssignUserAccessId: From 653c87b24d88723e9ca33cb719fae483b2481547 Mon Sep 17 00:00:00 2001 From: Mohammad Arafat Khan Date: Tue, 19 Jul 2022 10:00:02 +0530 Subject: [PATCH 11/18] Fixed a bug --- .../src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java index f23f854ad66d..71ad656d7118 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java @@ -2980,7 +2980,7 @@ public String getOmRatisRoles() { } @Override - public String getRatisLeader() { + public String getRatisLeader() throws NullPointerException{ RaftPeer leaderId = null; try { leaderId = omRatisServer.getLeader(); From bece496ec5a69b7ae557a108b8de9fc1d3d41ae0 Mon Sep 17 00:00:00 2001 From: Mohammad Arafat Khan Date: Tue, 19 Jul 2022 10:04:28 +0530 Subject: [PATCH 12/18] Fixed styling issues --- .../src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java index 71ad656d7118..31df5452b377 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java @@ -2980,7 +2980,7 @@ public String getOmRatisRoles() { } @Override - public String getRatisLeader() throws NullPointerException{ + public String getRatisLeader() throws NullPointerException { RaftPeer leaderId = null; try { leaderId = omRatisServer.getLeader(); From b8f02e3ba83d4d5cb46570b9b56d3976bbe51eee Mon Sep 17 00:00:00 2001 From: Mohammad Arafat Khan Date: Fri, 22 Jul 2022 10:03:54 +0530 Subject: [PATCH 13/18] Added role-info to ring --- .../main/java/org/apache/hadoop/ozone/OmUtils.java | 14 ++++++-------- .../java/org/apache/hadoop/ozone/om/OMMXBean.java | 3 --- .../org/apache/hadoop/ozone/om/OzoneManager.java | 14 +++----------- 3 files changed, 9 insertions(+), 22 deletions(-) diff --git a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java index 584dcf5723c2..d3ff35f07bb0 100644 --- a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java +++ b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java @@ -269,11 +269,6 @@ public static boolean isReadOnly( case ListTenant: case TenantGetUserInfo: case TenantListUser: - case RangerBGSync: - // RangerBGSync is a read operation in the sense that it doesn't directly - // write to OM DB. And therefore it doesn't need a OMClientRequest. - // Although indirectly the Ranger sync service task could invoke write - // operation SetRangerServiceVersion. return true; case CreateVolume: case SetVolumeProperty: @@ -797,18 +792,21 @@ public static String getOMAddressListPrintString(List omList) { return printString.toString(); } - public static String format(List nodes, int port) { + public static String format(List nodes, int port, + String leaderId) { StringBuilder sb = new StringBuilder(); int count = 0; for (ServiceInfo info : nodes) { // Printing only the OM's running + String role = info.getHostname().equals(leaderId) ? "LEADER" : "FOLLOWER"; if (info.getNodeType() == HddsProtos.NodeType.OM) { sb.append( String.format( - " { HostName: %s | Node-Id: %s | Ratis-Port : %d } ", + " { HostName: %s | Node-Id: %s | Ratis-Port : %d | Role: %s} ", info.getHostname(), info.getOmRoleInfo().getNodeId(), - port + port, + role )); count++; } diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMXBean.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMXBean.java index 4005cf1c10de..a4319aae925c 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMXBean.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMXBean.java @@ -34,7 +34,4 @@ public interface OMMXBean extends ServiceRuntimeInfo { String getRatisLogDirectory(); String getRocksDbDirectory(); - - String getRatisLeader(); - } diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java index 31df5452b377..73bc2bea4258 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java @@ -2970,23 +2970,15 @@ public String getRpcPort() { public String getOmRatisRoles() { List serviceList = null; int port = omNodeDetails.getRatisPort(); + RaftPeer leaderId; try { + leaderId = omRatisServer.getLeader(); serviceList = getServiceList(); } catch (IOException e) { LOG.error("IO-Exception Occurred", e); return "Exception: " + e.toString(); } - return OmUtils.format(serviceList, port); - } - - @Override - public String getRatisLeader() throws NullPointerException { - RaftPeer leaderId = null; - try { - leaderId = omRatisServer.getLeader(); - } catch (IOException e) { - } - return leaderId.getId().toString(); + return OmUtils.format(serviceList, port, leaderId.getId().toString()); } public String getRatisLogDirectory() { From 4053813ac23fbd10bdc704c5894ed1e3ba94e412 Mon Sep 17 00:00:00 2001 From: Mohammad Arafat Khan Date: Fri, 22 Jul 2022 10:46:54 +0530 Subject: [PATCH 14/18] Made changes for the review --- .../src/main/java/org/apache/hadoop/ozone/om/OMMXBean.java | 1 + .../src/main/resources/webapps/ozoneManager/om-overview.html | 4 ---- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMXBean.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMXBean.java index a4319aae925c..5e46ac7aec9c 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMXBean.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMXBean.java @@ -34,4 +34,5 @@ public interface OMMXBean extends ServiceRuntimeInfo { String getRatisLogDirectory(); String getRocksDbDirectory(); + } diff --git a/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/om-overview.html b/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/om-overview.html index efcf73731884..b61d5f778822 100644 --- a/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/om-overview.html +++ b/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/om-overview.html @@ -22,10 +22,6 @@

Status

Rpc port {{$ctrl.overview.jmx.RpcPort}} - - Leader-Id - {{$ctrl.overview.jmx.RatisLeader}} - OM Roles (HA) {{$ctrl.overview.jmx.OmRatisRoles}} From 0d4289cdd11439fda4d5e487ec61e52c713dfff3 Mon Sep 17 00:00:00 2001 From: Mohammad Arafat Khan Date: Wed, 14 Sep 2022 11:29:14 +0530 Subject: [PATCH 15/18] Made changes to the code along with addition of Leader Election info --- .../java/org/apache/hadoop/ozone/OmUtils.java | 6 +++-- .../org/apache/hadoop/ozone/om/OMMXBean.java | 2 +- .../apache/hadoop/ozone/om/OzoneManager.java | 20 +++++++++------- .../webapps/ozoneManager/om-overview.html | 10 +++++++- .../webapps/ozoneManager/ozoneManager.js | 24 +++++++++++++++++++ 5 files changed, 50 insertions(+), 12 deletions(-) diff --git a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java index d3ff35f07bb0..57e79e513f49 100644 --- a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java +++ b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java @@ -798,8 +798,10 @@ public static String format(List nodes, int port, int count = 0; for (ServiceInfo info : nodes) { // Printing only the OM's running - String role = info.getHostname().equals(leaderId) ? "LEADER" : "FOLLOWER"; if (info.getNodeType() == HddsProtos.NodeType.OM) { + String role = + info.getOmRoleInfo().getNodeId().equals(leaderId) ? "LEADER" : + "FOLLOWER"; sb.append( String.format( " { HostName: %s | Node-Id: %s | Ratis-Port : %d | Role: %s} ", @@ -813,7 +815,7 @@ public static String format(List nodes, int port, } // Print Stand-alone if only one OM exists if (count == 1) { - return "STANDALONE"; + return "Not Applicable"; } else { return sb.toString(); } diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMXBean.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMXBean.java index 5e46ac7aec9c..791379bdc86b 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMXBean.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMXBean.java @@ -29,7 +29,7 @@ public interface OMMXBean extends ServiceRuntimeInfo { String getRpcPort(); - String getOmRatisRoles(); + String getRatisRoles(); String getRatisLogDirectory(); diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java index 73bc2bea4258..289b9c550834 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java @@ -2967,18 +2967,22 @@ public String getRpcPort() { } @Override - public String getOmRatisRoles() { + public String getRatisRoles() { List serviceList = null; int port = omNodeDetails.getRatisPort(); RaftPeer leaderId; - try { - leaderId = omRatisServer.getLeader(); - serviceList = getServiceList(); - } catch (IOException e) { - LOG.error("IO-Exception Occurred", e); - return "Exception: " + e.toString(); + if (isRatisEnabled) { + try { + leaderId = omRatisServer.getLeader(); + serviceList = getServiceList(); + } catch (IOException e) { + LOG.error("IO-Exception Occurred", e); + return "Exception: " + e.toString(); + } + return OmUtils.format(serviceList, port, leaderId.getId().toString()); + } else { + return "Ratis-Disabled"; } - return OmUtils.format(serviceList, port, leaderId.getId().toString()); } public String getRatisLogDirectory() { diff --git a/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/om-overview.html b/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/om-overview.html index b61d5f778822..7f844aeb0043 100644 --- a/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/om-overview.html +++ b/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/om-overview.html @@ -24,7 +24,7 @@

Status

OM Roles (HA) - {{$ctrl.overview.jmx.OmRatisRoles}} + {{$ctrl.overview.jmx.RatisRoles}} Current-Role @@ -34,6 +34,14 @@

Status

Group-Id {{$ctrl.role.GroupId}} + + Election-Count + {{$ctrl.electionCount.Count}} + + + Last Election Elapsed Time + {{$ctrl.elapsedTime.Value}} + diff --git a/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/ozoneManager.js b/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/ozoneManager.js index 7a53621b6e9d..de5977983abd 100644 --- a/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/ozoneManager.js +++ b/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/ozoneManager.js @@ -119,6 +119,30 @@ .then(function (result) { ctrl.role = result.data.beans[0]; }); + + $http.get("jmx?qry=ratis:name=ratis.leader_election.*electionCount") + .then(function (result) { + ctrl.electionCount = result.data.beans[0]; + }); + + $http.get("jmx?qry=ratis:name=ratis.leader_election.*lastLeaderElectionElapsedTime") + .then(function (result) { + ctrl.elapsedTime = result.data.beans[0]; + ctrl.elapsedTime.Value = convertMsToTime(ctrl.elapsedTime.Value); + }); } }); + function convertMsToTime(ms) { + if(ms == -1){ + return ""; + } + let seconds = (ms / 1000).toFixed(1); + let minutes = (ms / (1000 * 60)).toFixed(1); + let hours = (ms / (1000 * 60 * 60)).toFixed(1); + let days = (ms / (1000 * 60 * 60 * 24)).toFixed(1); + if (seconds < 60) return seconds + " Seconds"; + else if (minutes < 60) return minutes + " Minutes"; + else if (hours < 24) return hours + " Hours"; + else return days + " Days" + } })(); From 820cdda7b00a79b8f437d7aa1cd5da523b9e18f0 Mon Sep 17 00:00:00 2001 From: Mohammad Arafat Khan Date: Wed, 14 Sep 2022 15:21:06 +0530 Subject: [PATCH 16/18] Made changes as per the code review --- .../src/main/java/org/apache/hadoop/ozone/OmUtils.java | 2 +- .../main/resources/webapps/ozoneManager/om-overview.html | 4 ++-- .../main/resources/webapps/ozoneManager/ozoneManager.js | 7 +++---- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java index 57e79e513f49..5eff819269e7 100644 --- a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java +++ b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java @@ -815,7 +815,7 @@ public static String format(List nodes, int port, } // Print Stand-alone if only one OM exists if (count == 1) { - return "Not Applicable"; + return "STANDALONE"; } else { return sb.toString(); } diff --git a/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/om-overview.html b/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/om-overview.html index 7f844aeb0043..8a54aa0adc55 100644 --- a/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/om-overview.html +++ b/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/om-overview.html @@ -34,11 +34,11 @@

Status

Group-Id {{$ctrl.role.GroupId}} - + Election-Count {{$ctrl.electionCount.Count}} - + Last Election Elapsed Time {{$ctrl.elapsedTime.Value}} diff --git a/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/ozoneManager.js b/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/ozoneManager.js index de5977983abd..bd402b1b43a0 100644 --- a/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/ozoneManager.js +++ b/hadoop-ozone/ozone-manager/src/main/resources/webapps/ozoneManager/ozoneManager.js @@ -128,14 +128,13 @@ $http.get("jmx?qry=ratis:name=ratis.leader_election.*lastLeaderElectionElapsedTime") .then(function (result) { ctrl.elapsedTime = result.data.beans[0]; - ctrl.elapsedTime.Value = convertMsToTime(ctrl.elapsedTime.Value); + if(ctrl.elapsedTime.Value != -1){ + ctrl.elapsedTime.Value = convertMsToTime(ctrl.elapsedTime.Value); + } }); } }); function convertMsToTime(ms) { - if(ms == -1){ - return ""; - } let seconds = (ms / 1000).toFixed(1); let minutes = (ms / (1000 * 60)).toFixed(1); let hours = (ms / (1000 * 60 * 60)).toFixed(1); From 74f2ffd6bad0adb9e4257326c0b32f5e0179e051 Mon Sep 17 00:00:00 2001 From: arafat Date: Tue, 20 Sep 2022 19:56:24 +0530 Subject: [PATCH 17/18] Added ordering for Om's --- .../src/main/java/org/apache/hadoop/ozone/OmUtils.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java index 5eff819269e7..6cfe04554ed1 100644 --- a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java +++ b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java @@ -36,6 +36,8 @@ import java.util.Optional; import java.util.OptionalInt; import java.util.Set; +import java.util.stream.Collectors; +import java.util.Comparator; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.apache.hadoop.fs.Path; @@ -795,8 +797,13 @@ public static String getOMAddressListPrintString(List omList) { public static String format(List nodes, int port, String leaderId) { StringBuilder sb = new StringBuilder(); + // Ensuring OM's are printed in correct order + List omNodes = nodes.stream() + .filter(node -> node.getNodeType() == HddsProtos.NodeType.OM) + .sorted(Comparator.comparing(ServiceInfo::getHostname)) + .collect(Collectors.toList()); int count = 0; - for (ServiceInfo info : nodes) { + for (ServiceInfo info : omNodes) { // Printing only the OM's running if (info.getNodeType() == HddsProtos.NodeType.OM) { String role = From cc2e8e6f8996c5706e12c9e5d2a4bf247ef64662 Mon Sep 17 00:00:00 2001 From: arafat Date: Thu, 22 Sep 2022 11:54:58 +0530 Subject: [PATCH 18/18] Empty-Commit