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 56e51cf4026e..b1005f22a6fc 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 @@ -3301,12 +3301,24 @@ public List getServiceList() throws IOException { .build()); } - // Since this OM is processing the request, we can assume it to be the - // leader OM - + RaftPeerRole selfRole; + RaftPeerId leaderId = null; + if (omRatisServer == null) { + selfRole = RaftPeerRole.LEADER; + } else { + leaderId = omRatisServer.getLeaderId(); + RaftPeerId selfPeerId = omRatisServer.getRaftPeerId(); + if (leaderId != null && leaderId.equals(selfPeerId)) { + selfRole = RaftPeerRole.LEADER; + } else if (omNodeDetails.isRatisListener()) { + selfRole = RaftPeerRole.LISTENER; + } else { + selfRole = RaftPeerRole.FOLLOWER; + } + } OMRoleInfo omRole = OMRoleInfo.newBuilder() .setNodeId(getOMNodeId()) - .setServerRole(RaftPeerRole.LEADER.name()) + .setServerRole(selfRole.name()) .build(); omServiceInfoBuilder.setOmRoleInfo(omRole); @@ -3330,10 +3342,17 @@ public List getServiceList() throws IOException { .setValue(peerNode.getRpcPort()) .build()); - String role = peerNode.isRatisListener() ? RaftPeerRole.LISTENER.name() : RaftPeerRole.FOLLOWER.name(); + RaftPeerRole roleForPeer; + if (leaderId != null && peerNode.getNodeId().equals(leaderId.toString())) { + roleForPeer = RaftPeerRole.LEADER; + } else if (peerNode.isRatisListener()) { + roleForPeer = RaftPeerRole.LISTENER; + } else { + roleForPeer = RaftPeerRole.FOLLOWER; + } OMRoleInfo peerOmRole = OMRoleInfo.newBuilder() .setNodeId(peerNode.getNodeId()) - .setServerRole(role) + .setServerRole(roleForPeer.name()) .build(); peerOmServiceInfoBuilder.setOmRoleInfo(peerOmRole);