From 86227e3941e1726039086d46a3335113fe1d0026 Mon Sep 17 00:00:00 2001 From: Russole <850905junior@gmail.com> Date: Fri, 3 Apr 2026 10:45:17 +0800 Subject: [PATCH 1/4] HDDS-14966. SCM Web UI Leader Readiness column does not appear to be displaying the correct status in HA --- .../src/main/java/org/apache/hadoop/ozone/OmUtils.java | 8 +++++--- .../java/org/apache/hadoop/ozone/om/OzoneManager.java | 4 ++-- 2 files changed, 7 insertions(+), 5 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 80d4bf06bcde..15c2bca298e1 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 @@ -1079,7 +1079,7 @@ public static boolean isBucketSnapshotIndicator(String key) { } public static List> format( - List nodes, int port, String leaderId, String leaderReadiness) { + List nodes, int port, String leaderId) { List> omInfoList = new ArrayList<>(); // Ensuring OM's are printed in correct order List omNodes = nodes.stream() @@ -1089,8 +1089,10 @@ public static List> format( for (ServiceInfo info : omNodes) { // Printing only the OM's running if (info.getNodeType() == HddsProtos.NodeType.OM) { - String role = info.getOmRoleInfo().getNodeId().equals(leaderId) - ? "LEADER" : "FOLLOWER"; + String nodeId = info.getOmRoleInfo().getNodeId(); + String role = nodeId.equals(leaderId) ? "LEADER" : "FOLLOWER"; + String leaderReadiness = nodeId.equals(leaderId) + ? "LEADER_AND_READY" : "NOT_LEADER"; List omInfo = new ArrayList<>(); omInfo.add(info.getHostname()); omInfo.add(info.getOmRoleInfo().getNodeId()); 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 0587b71f239c..d27fb5c2cb69 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 @@ -3217,7 +3217,7 @@ public List> getRatisRoles() { if (null == omRatisServer) { return getRatisRolesException("Server is shutting down"); } - String leaderReadiness = omRatisServer.getLeaderStatus().name(); + final RaftPeerId leaderId = omRatisServer.getLeaderId(); if (leaderId == null) { LOG.error(NO_LEADER_ERROR_MESSAGE); @@ -3231,7 +3231,7 @@ public List> getRatisRoles() { LOG.error("Failed to getServiceList", e); return getRatisRolesException("IO-Exception Occurred, " + e.getMessage()); } - return OmUtils.format(serviceList, port, leaderId.toString(), leaderReadiness); + return OmUtils.format(serviceList, port, leaderId.toString()); } /** From fd6979651ca4ab866f2e3b01033f3db3b6b05798 Mon Sep 17 00:00:00 2001 From: Russole <850905junior@gmail.com> Date: Fri, 3 Apr 2026 14:54:36 +0800 Subject: [PATCH 2/4] Replace OM role strings with RaftPeerRole enum --- .../src/main/java/org/apache/hadoop/ozone/OmUtils.java | 5 ++++- 1 file changed, 4 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 15c2bca298e1..5dd11662f50a 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 @@ -39,6 +39,8 @@ import static org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_OM_PORT_DEFAULT; import static org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_OM_SERVICE_IDS_KEY; import static org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.ReadConsistencyProto.READ_CONSISTENCY_UNSPECIFIED; +import static org.apache.ratis.proto.RaftProtos.RaftPeerRole.FOLLOWER; +import static org.apache.ratis.proto.RaftProtos.RaftPeerRole.LEADER; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; @@ -1090,7 +1092,8 @@ public static List> format( // Printing only the OM's running if (info.getNodeType() == HddsProtos.NodeType.OM) { String nodeId = info.getOmRoleInfo().getNodeId(); - String role = nodeId.equals(leaderId) ? "LEADER" : "FOLLOWER"; + String role = nodeId.equals(leaderId) ? + LEADER.name() : FOLLOWER.name(); String leaderReadiness = nodeId.equals(leaderId) ? "LEADER_AND_READY" : "NOT_LEADER"; List omInfo = new ArrayList<>(); From 3cd9499a0634d577c0fc0ac9c8016bd3065b3417 Mon Sep 17 00:00:00 2001 From: Russole <850905junior@gmail.com> Date: Sun, 19 Apr 2026 23:09:47 +0800 Subject: [PATCH 3/4] Update patch based on review comment --- .../java/org/apache/hadoop/ozone/OmUtils.java | 37 +++++++++++-------- .../apache/hadoop/ozone/om/OzoneManager.java | 5 ++- 2 files changed, 25 insertions(+), 17 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 5dd11662f50a..5f23a2b5ed09 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 @@ -1079,9 +1079,10 @@ public static String getOMAddressListPrintString(List omList) { public static boolean isBucketSnapshotIndicator(String key) { return key.startsWith(OM_SNAPSHOT_INDICATOR) && key.split("/").length == 2; } - + public static List> format( - List nodes, int port, String leaderId) { + List nodes, int port, String leaderId, + String localNodeId, String localLeaderStatus) { List> omInfoList = new ArrayList<>(); // Ensuring OM's are printed in correct order List omNodes = nodes.stream() @@ -1089,21 +1090,25 @@ public static List> format( .sorted(Comparator.comparing(ServiceInfo::getHostname)) .collect(Collectors.toList()); for (ServiceInfo info : omNodes) { - // Printing only the OM's running - if (info.getNodeType() == HddsProtos.NodeType.OM) { - String nodeId = info.getOmRoleInfo().getNodeId(); - String role = nodeId.equals(leaderId) ? - LEADER.name() : FOLLOWER.name(); - String leaderReadiness = nodeId.equals(leaderId) - ? "LEADER_AND_READY" : "NOT_LEADER"; - List omInfo = new ArrayList<>(); - omInfo.add(info.getHostname()); - omInfo.add(info.getOmRoleInfo().getNodeId()); - omInfo.add(String.valueOf(port)); - omInfo.add(role); - omInfo.add(leaderReadiness); - omInfoList.add(omInfo); + String nodeId = info.getOmRoleInfo().getNodeId(); + boolean isLeaderNode = nodeId.equals(leaderId); + boolean isLocalNode = nodeId.equals(localNodeId); + String role = info.getOmRoleInfo().getServerRole(); + + String displayValue; + if (isLeaderNode && isLocalNode) { + displayValue = localLeaderStatus; + } else { + displayValue = role; } + + List omInfo = new ArrayList<>(); + omInfo.add(info.getHostname()); + omInfo.add(nodeId); + omInfo.add(String.valueOf(port)); + omInfo.add(role); + omInfo.add(displayValue); + omInfoList.add(omInfo); } return omInfoList; } 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 d27fb5c2cb69..802651510242 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 @@ -3218,6 +3218,8 @@ public List> getRatisRoles() { return getRatisRolesException("Server is shutting down"); } + String localLeaderStatus = omRatisServer.getLeaderStatus().name(); + String localNodeId = omNodeDetails.getNodeId(); final RaftPeerId leaderId = omRatisServer.getLeaderId(); if (leaderId == null) { LOG.error(NO_LEADER_ERROR_MESSAGE); @@ -3231,7 +3233,8 @@ public List> getRatisRoles() { LOG.error("Failed to getServiceList", e); return getRatisRolesException("IO-Exception Occurred, " + e.getMessage()); } - return OmUtils.format(serviceList, port, leaderId.toString()); + return OmUtils.format(serviceList, port, leaderId.toString(), + localNodeId, localLeaderStatus); } /** From b1de8b807f527394dfd1503b0ebfbaa9eea3eb27 Mon Sep 17 00:00:00 2001 From: Russole <850905junior@gmail.com> Date: Sun, 19 Apr 2026 23:26:05 +0800 Subject: [PATCH 4/4] Fix CheckStyle Error --- .../common/src/main/java/org/apache/hadoop/ozone/OmUtils.java | 2 -- 1 file changed, 2 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 5f23a2b5ed09..007462ba7eda 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 @@ -39,8 +39,6 @@ import static org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_OM_PORT_DEFAULT; import static org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_OM_SERVICE_IDS_KEY; import static org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.ReadConsistencyProto.READ_CONSISTENCY_UNSPECIFIED; -import static org.apache.ratis.proto.RaftProtos.RaftPeerRole.FOLLOWER; -import static org.apache.ratis.proto.RaftProtos.RaftPeerRole.LEADER; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions;