Browse Source

ZOOKEEPER-3877: JMX Bean RemotePeerBean should enclose IPV6 host in square bracket same as LocalPeerBean

…quare bracket same as LocalPeerBean

Author: Mohammad Arshad <arshad@apache.org>

Reviewers: Enrico Olivelli <eolivelli@apache.org>

Closes #1493 from arshadmohammad/ZOOKEEPER-3877-master

(cherry picked from commit 425ee189dcf952fd7a2a38df375ec245dcdfbfc6)
Signed-off-by: Mohammad Arshad <arshad@apache.org>
(cherry picked from commit a51b222de42fd0d0591dd8eda39a9045324a11fc)
Mohammad Arshad 4 years ago
parent
commit
90322afd43

+ 6 - 6
zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/RemotePeerBean.java

@@ -18,11 +18,12 @@
 
 package org.apache.zookeeper.server.quorum;
 
+import static org.apache.zookeeper.common.NetUtils.formatInetAddr;
 import org.apache.zookeeper.jmx.ZKMBeanInfo;
 
 /**
  * A remote peer bean only provides limited information about the remote peer,
- * and the peer cannot be managed remotely. 
+ * and the peer cannot be managed remotely.
  */
 public class RemotePeerBean implements RemotePeerMXBean,ZKMBeanInfo {
     private QuorumPeer.QuorumServer peer;
@@ -45,19 +46,18 @@ public class RemotePeerBean implements RemotePeerMXBean,ZKMBeanInfo {
     }
 
     public String getQuorumAddress() {
-        return peer.addr.getHostString()+":"+peer.addr.getPort();
+        return formatInetAddr(peer.addr);
     }
 
     public String getElectionAddress() {
-        return peer.electionAddr.getHostString() + ":" + peer.electionAddr.getPort();
+        return formatInetAddr(peer.electionAddr);
     }
 
     public String getClientAddress() {
         if (null == peer.clientAddr) {
             return "";
         }
-        return peer.clientAddr.getHostString() + ":"
-                + peer.clientAddr.getPort();
+        return formatInetAddr(peer.clientAddr);
     }
 
     public String getLearnerType() {
@@ -68,5 +68,5 @@ public class RemotePeerBean implements RemotePeerMXBean,ZKMBeanInfo {
     public boolean isLeader() {
         return localPeer.isLeader(peer.getId());
     }
-    
+
 }

+ 15 - 0
zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/RemotePeerBeanTest.java

@@ -61,4 +61,19 @@ public class RemotePeerBeanTest {
         assertFalse(remotePeerBean.isLeader());
     }
 
+    @Test
+    public void testHostPortReturnedWhenIPIsIPV6() {
+        QuorumPeer.QuorumServer quorumServerMock = mock(QuorumPeer.QuorumServer.class);
+        InetSocketAddress address = new InetSocketAddress("127::1", 2181);
+        quorumServerMock.clientAddr = address;
+        quorumServerMock.electionAddr = address;
+        quorumServerMock.addr = address;
+        QuorumPeer peerMock = mock(QuorumPeer.class);
+        RemotePeerBean remotePeerBean = new RemotePeerBean(peerMock, quorumServerMock);
+        String expectedHostPort = "[127:0:0:0:0:0:0:1]:2181";
+        assertEquals(expectedHostPort, remotePeerBean.getClientAddress());
+        assertEquals(expectedHostPort, remotePeerBean.getElectionAddress());
+        assertEquals(expectedHostPort, remotePeerBean.getQuorumAddress());
+    }
+
 }