From commits-return-7788-apmail-zookeeper-commits-archive=zookeeper.apache.org@zookeeper.apache.org Thu May 16 14:31:01 2019 Return-Path: X-Original-To: apmail-zookeeper-commits-archive@www.apache.org Delivered-To: apmail-zookeeper-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [207.244.88.153]) by minotaur.apache.org (Postfix) with SMTP id 87C121917A for ; Thu, 16 May 2019 14:31:01 +0000 (UTC) Received: (qmail 34804 invoked by uid 500); 16 May 2019 14:25:50 -0000 Delivered-To: apmail-zookeeper-commits-archive@zookeeper.apache.org Received: (qmail 34785 invoked by uid 500); 16 May 2019 14:25:49 -0000 Mailing-List: contact commits-help@zookeeper.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@zookeeper.apache.org Delivered-To: mailing list commits@zookeeper.apache.org Received: (qmail 34773 invoked by uid 99); 16 May 2019 14:25:49 -0000 Received: from ec2-52-202-80-70.compute-1.amazonaws.com (HELO gitbox.apache.org) (52.202.80.70) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 16 May 2019 14:25:49 +0000 Received: by gitbox.apache.org (ASF Mail Server at gitbox.apache.org, from userid 33) id 6E606873F6; Thu, 16 May 2019 14:25:40 +0000 (UTC) Date: Thu, 16 May 2019 14:25:40 +0000 To: "commits@zookeeper.apache.org" Subject: [zookeeper] branch master updated: ZOOKEEPER-3237: Allow IPv6 wildcard address in peer config MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Message-ID: <155801674032.16627.7517089365833163129@gitbox.apache.org> From: andor@apache.org X-Git-Host: gitbox.apache.org X-Git-Repo: zookeeper X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: e45551fc7c691332ace7bff81926855e42ac2239 X-Git-Newrev: 7ca06c2cbb77695ec33a3d3d2f04e005bbbb63ad X-Git-Rev: 7ca06c2cbb77695ec33a3d3d2f04e005bbbb63ad X-Git-NotificationType: ref_changed_plus_diff X-Git-Multimail-Version: 1.5.dev Auto-Submitted: auto-generated This is an automated email from the ASF dual-hosted git repository. andor pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/zookeeper.git The following commit(s) were added to refs/heads/master by this push: new 7ca06c2 ZOOKEEPER-3237: Allow IPv6 wildcard address in peer config 7ca06c2 is described below commit 7ca06c2cbb77695ec33a3d3d2f04e005bbbb63ad Author: Brian Nixon AuthorDate: Thu May 16 16:25:32 2019 +0200 ZOOKEEPER-3237: Allow IPv6 wildcard address in peer config Author: Brian Nixon Reviewers: eolivelli@apache.org, andor@apache.org Closes #761 from enixon/wildcard and squashes the following commits: c2f12462e [Brian Nixon] refactor QuorumServerTest for greater clarity 311cc1732 [Brian Nixon] move new ServerDuplicateTest tests to QuorumServerTest 1aa517a45 [Brian Nixon] replace use of ReconfigTest with a new class ServerDuplicateTest 5e00c03f1 [Brian Nixon] add a slight delay to remove flakiness 82c73bae9 [Brian Nixon] add ReconfigTest::testWildcards c483c948f [Brian Nixon] ZOOKEEPER-3237: Allow IPv6 wildcard address in peer config --- .../apache/zookeeper/server/quorum/QuorumPeer.java | 5 +- .../zookeeper/server/quorum/QuorumServerTest.java | 86 +++++++++++++++++----- 2 files changed, 68 insertions(+), 23 deletions(-) diff --git a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeer.java b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeer.java index adede8f..61e4c16 100644 --- a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeer.java +++ b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeer.java @@ -390,8 +390,7 @@ public class QuorumPeer extends ZooKeeperThread implements QuorumStats.Provider } private List excludedSpecialAddresses(List addrs) { - List included = new ArrayList(); - InetAddress wcAddr = new InetSocketAddress(0).getAddress(); + List included = new ArrayList<>(); for (InetSocketAddress addr : addrs) { if (addr == null) { @@ -400,7 +399,7 @@ public class QuorumPeer extends ZooKeeperThread implements QuorumStats.Provider InetAddress inetaddr = addr.getAddress(); if (inetaddr == null || - inetaddr.equals(wcAddr) || // wildCard address(0.0.0.0) + inetaddr.isAnyLocalAddress() || // wildCard addresses (0.0.0.0 or [::]) inetaddr.isLoopbackAddress()) { // loopback address(localhost/127.0.0.1) continue; } diff --git a/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/QuorumServerTest.java b/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/QuorumServerTest.java index 78c16af..62d9a7b 100644 --- a/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/QuorumServerTest.java +++ b/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/QuorumServerTest.java @@ -18,45 +18,52 @@ package org.apache.zookeeper.server.quorum; import static org.junit.Assert.assertEquals; +import org.apache.zookeeper.KeeperException; import org.apache.zookeeper.ZKTestCase; import org.apache.zookeeper.server.quorum.QuorumPeer.QuorumServer; import org.apache.zookeeper.server.quorum.QuorumPeerConfig.ConfigException; import org.junit.Assert; import org.junit.Test; +import java.net.InetSocketAddress; + public class QuorumServerTest extends ZKTestCase { + private String ipv6n1 = "[2500:0:0:0:0:0:1:0]"; + private String ipv6n2 = "[2600:0:0:0:0:0:1:0]"; + private String ipv4config = "127.0.0.1:1234:1236"; + @Test public void testToString() throws ConfigException { - String config = "127.0.0.1:1234:1236:participant;0.0.0.0:1237"; - String expected = "127.0.0.1:1234:1236:participant;0.0.0.0:1237"; - QuorumServer qs = new QuorumServer(0, config); + String provided = ipv4config + ":participant;0.0.0.0:1237"; + String expected = ipv4config + ":participant;0.0.0.0:1237"; + QuorumServer qs = new QuorumServer(0, provided); Assert.assertEquals("Use IP address", expected, qs.toString()); - config = "127.0.0.1:1234:1236;0.0.0.0:1237"; - expected = "127.0.0.1:1234:1236:participant;0.0.0.0:1237"; - qs = new QuorumServer(0, config); + provided = ipv4config + ";0.0.0.0:1237"; + expected = ipv4config + ":participant;0.0.0.0:1237"; + qs = new QuorumServer(0, provided); Assert.assertEquals("Type unspecified", expected, qs.toString()); - config = "127.0.0.1:1234:1236:observer;0.0.0.0:1237"; - expected = "127.0.0.1:1234:1236:observer;0.0.0.0:1237"; - qs = new QuorumServer(0, config); + provided = ipv4config + ":observer;0.0.0.0:1237"; + expected = ipv4config + ":observer;0.0.0.0:1237"; + qs = new QuorumServer(0, provided); Assert.assertEquals("Observer type", expected, qs.toString()); - config = "127.0.0.1:1234:1236:participant;1237"; - expected = "127.0.0.1:1234:1236:participant;0.0.0.0:1237"; - qs = new QuorumServer(0, config); + provided = ipv4config + ":participant;1237"; + expected = ipv4config + ":participant;0.0.0.0:1237"; + qs = new QuorumServer(0, provided); Assert.assertEquals("Client address unspecified", expected, qs.toString()); - config = "127.0.0.1:1234:1236:participant;1.2.3.4:1237"; - expected = "127.0.0.1:1234:1236:participant;1.2.3.4:1237"; - qs = new QuorumServer(0, config); + provided = ipv4config + ":participant;1.2.3.4:1237"; + expected = ipv4config + ":participant;1.2.3.4:1237"; + qs = new QuorumServer(0, provided); Assert.assertEquals("Client address specified", expected, qs.toString()); - config = "example.com:1234:1236:participant;1237"; + provided = "example.com:1234:1236:participant;1237"; expected = "example.com:1234:1236:participant;0.0.0.0:1237"; - qs = new QuorumServer(0, config); + qs = new QuorumServer(0, provided); Assert.assertEquals("Use hostname", expected, qs.toString()); } @@ -69,9 +76,9 @@ public class QuorumServerTest extends ZKTestCase { @Test public void constructionUnderstandsIpv6LiteralsInClientConfig() throws ConfigException { - String config = "127.0.0.1:1234:1236:participant;[::1]:1237"; + String config = ipv4config + ":participant;[::1]:1237"; QuorumServer qs = new QuorumServer(0, config); - assertEquals("127.0.0.1:1234:1236:participant;[0:0:0:0:0:0:0:1]:1237", qs.toString()); + assertEquals(ipv4config + ":participant;[0:0:0:0:0:0:0:1]:1237", qs.toString()); } @Test(expected = ConfigException.class) @@ -81,6 +88,45 @@ public class QuorumServerTest extends ZKTestCase { @Test(expected = ConfigException.class) public void unbalancedIpv6LiteralsInClientConfigFailToBeParsed() throws ConfigException { - new QuorumServer(0, "127.0.0.1:1234:1236:participant;[::1:1237"); + new QuorumServer(0, ipv4config + ":participant;[::1:1237"); + } + + @Test + public void testWildcard() throws KeeperException.BadArgumentsException { + String[] addrs = new String[]{"127.0.0.1", "[0:0:0:0:0:0:0:1]", "0.0.0.0", "[::]"}; + for (int i = 0; i < addrs.length; i++) { + for (int j = i; j < addrs.length; j++) { + QuorumPeer.QuorumServer server1 = + new QuorumPeer.QuorumServer(1, + new InetSocketAddress(ipv6n1, 1234), // peer + new InetSocketAddress(ipv6n1, 1236), // election + new InetSocketAddress(addrs[i], 1237) // client + ); + QuorumPeer.QuorumServer server2 = + new QuorumPeer.QuorumServer(2, + new InetSocketAddress(ipv6n2, 1234), // peer + new InetSocketAddress(ipv6n2, 1236), // election + new InetSocketAddress(addrs[j], 1237) // client + ); + server1.checkAddressDuplicate(server2); + } + } + } + + @Test(expected = KeeperException.BadArgumentsException.class) + public void testDuplicate() throws KeeperException.BadArgumentsException { + QuorumPeer.QuorumServer server1 = + new QuorumPeer.QuorumServer(1, + new InetSocketAddress(ipv6n1, 1234), // peer + new InetSocketAddress(ipv6n1, 1236), // election + new InetSocketAddress(ipv6n1, 1237) // client + ); + QuorumPeer.QuorumServer server2 = + new QuorumPeer.QuorumServer(2, + new InetSocketAddress(ipv6n2, 1234), // peer + new InetSocketAddress(ipv6n2, 1236), // election + new InetSocketAddress(ipv6n1, 1237) // client + ); + server1.checkAddressDuplicate(server2); } }