You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by te...@apache.org on 2018/11/10 14:09:36 UTC
hbase git commit: HBASE-13468 hbase.zookeeper.quorum supports ipv6
address
Repository: hbase
Updated Branches:
refs/heads/master 6786aca66 -> 5e84997f2
HBASE-13468 hbase.zookeeper.quorum supports ipv6 address
Signed-off-by: tedyu <yu...@gmail.com>
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/5e84997f
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/5e84997f
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/5e84997f
Branch: refs/heads/master
Commit: 5e84997f2ffdbcf5f849d70c30ddbe2db4039ca4
Parents: 6786aca
Author: maoling <ma...@sina.com>
Authored: Fri Oct 12 17:15:41 2018 +0800
Committer: tedyu <yu...@gmail.com>
Committed: Sat Nov 10 06:09:29 2018 -0800
----------------------------------------------------------------------
hbase-common/pom.xml | 5 ++++
.../apache/hadoop/hbase/zookeeper/ZKConfig.java | 31 ++++++++++++++++++--
hbase-shaded/pom.xml | 4 +++
.../hbase/zookeeper/TestZKMainServer.java | 27 +++++++++++++++++
pom.xml | 6 ++++
5 files changed, 70 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/5e84997f/hbase-common/pom.xml
----------------------------------------------------------------------
diff --git a/hbase-common/pom.xml b/hbase-common/pom.xml
index 0aaccb8..7d7deef 100644
--- a/hbase-common/pom.xml
+++ b/hbase-common/pom.xml
@@ -212,6 +212,11 @@
<scope>compile</scope>
</dependency>
<dependency>
+ <groupId>commons-validator</groupId>
+ <artifactId>commons-validator</artifactId>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
</dependency>
http://git-wip-us.apache.org/repos/asf/hbase/blob/5e84997f/hbase-common/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKConfig.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKConfig.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKConfig.java
index f324ec6..9882777 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKConfig.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKConfig.java
@@ -22,6 +22,7 @@ import java.io.IOException;
import java.util.Map.Entry;
import java.util.Properties;
+import org.apache.commons.validator.routines.InetAddressValidator;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.util.StringUtils;
@@ -146,12 +147,36 @@ public final class ZKConfig {
public static String buildZKQuorumServerString(String[] serverHosts, String clientPort) {
StringBuilder quorumStringBuilder = new StringBuilder();
String serverHost;
+ InetAddressValidator validator = new InetAddressValidator();
for (int i = 0; i < serverHosts.length; ++i) {
- if (serverHosts[i].contains(":")) {
- serverHost = serverHosts[i]; // just use the port specified from the input
+ if (serverHosts[i].startsWith("[")) {
+ int index = serverHosts[i].indexOf("]");
+ if (index < 0) {
+ throw new IllegalArgumentException(serverHosts[i]
+ + " starts with '[' but has no matching ']:'");
+ }
+ if (index + 2 == serverHosts[i].length()) {
+ throw new IllegalArgumentException(serverHosts[i]
+ + " doesn't have a port after colon");
+ }
+ //check the IPv6 address e.g. [2001:db8::1]
+ String serverHostWithoutBracket = serverHosts[i].substring(1, index);
+ if (!validator.isValidInet6Address(serverHostWithoutBracket)) {
+ throw new IllegalArgumentException(serverHosts[i]
+ + " is not a valid IPv6 address");
+ }
+ serverHost = serverHosts[i];
+ if ((index + 1 == serverHosts[i].length())) {
+ serverHost = serverHosts[i] + ":" + clientPort;
+ }
} else {
- serverHost = serverHosts[i] + ":" + clientPort;
+ if (serverHosts[i].contains(":")) {
+ serverHost = serverHosts[i]; // just use the port specified from the input
+ } else {
+ serverHost = serverHosts[i] + ":" + clientPort;
+ }
}
+
if (i > 0) {
quorumStringBuilder.append(',');
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/5e84997f/hbase-shaded/pom.xml
----------------------------------------------------------------------
diff --git a/hbase-shaded/pom.xml b/hbase-shaded/pom.xml
index 29ecc1e..92170c8 100644
--- a/hbase-shaded/pom.xml
+++ b/hbase-shaded/pom.xml
@@ -339,6 +339,10 @@
<!-- org.apache.commons not including logging -->
<relocation>
+ <pattern>org.apache.commons.validator</pattern>
+ <shadedPattern>${shaded.prefix}.org.apache.commons.validator</shadedPattern>
+ </relocation>
+ <relocation>
<pattern>org.apache.commons.beanutils</pattern>
<shadedPattern>${shaded.prefix}.org.apache.commons.beanutils</shadedPattern>
</relocation>
http://git-wip-us.apache.org/repos/asf/hbase/blob/5e84997f/hbase-zookeeper/src/test/java/org/apache/hadoop/hbase/zookeeper/TestZKMainServer.java
----------------------------------------------------------------------
diff --git a/hbase-zookeeper/src/test/java/org/apache/hadoop/hbase/zookeeper/TestZKMainServer.java b/hbase-zookeeper/src/test/java/org/apache/hadoop/hbase/zookeeper/TestZKMainServer.java
index d1c18d3..5680c78 100644
--- a/hbase-zookeeper/src/test/java/org/apache/hadoop/hbase/zookeeper/TestZKMainServer.java
+++ b/hbase-zookeeper/src/test/java/org/apache/hadoop/hbase/zookeeper/TestZKMainServer.java
@@ -28,6 +28,7 @@ import org.apache.hadoop.hbase.HBaseZKTestingUtility;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.testclassification.SmallTests;
import org.apache.hadoop.hbase.testclassification.ZKTests;
+import org.junit.Assert;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
@@ -121,5 +122,31 @@ public class TestZKMainServer {
c.set("hbase.zookeeper.quorum", "example1.com:5678,example2.com:9012,example3.com");
ensemble = parser.parse(c);
assertEquals(ensemble, "example1.com:5678,example2.com:9012,example3.com:" + port);
+
+ // multiple servers(IPv6) with its own port
+ c.set("hbase.zookeeper.quorum", "[2001:db8:1::242:ac11:2]:2181," +
+ "[2001:db8:1::242:ac11:3]:5678");
+ ensemble = parser.parse(c);
+ assertEquals("[2001:db8:1::242:ac11:2]:2181," +
+ "[2001:db8:1::242:ac11:3]:5678", ensemble);
+
+ // some servers(IPv6) without its own port, which will be assigned the default client port
+ c.set("hbase.zookeeper.quorum", "[1001:db8:1::242:ac11:8], [2001:db8:1::242:df23:2]:9876," +
+ "[2001:db8:1::242:ac11:3]:5678");
+ ensemble = parser.parse(c);
+ assertEquals("[1001:db8:1::242:ac11:8]:1234, [2001:db8:1::242:df23:2]:9876," +
+ "[2001:db8:1::242:ac11:3]:5678", ensemble);
+
+ //a bad case
+ try {
+ // some servers(IPv6) with an invaild Ipv6 address in it
+ c.set("hbase.zookeeper.quorum", "[1001:db8:1::242:ac11:8], [2001:db8:1::242:df23:2]:9876," +
+ "[1001:db8:1::242:ac11:8:89:67]:5678");
+ ensemble = parser.parse(c);
+ Assert.fail("IPv6 address should be 8 groups.");
+ } catch (IllegalArgumentException e) {
+ //expected
+ }
+
}
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/5e84997f/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index da6de1d..3ace2e0 100755
--- a/pom.xml
+++ b/pom.xml
@@ -1466,6 +1466,7 @@
<audience-annotations.version>0.5.0</audience-annotations.version>
<avro.version>1.7.7</avro.version>
<commons-codec.version>1.10</commons-codec.version>
+ <commons-validator.version>1.6</commons-validator.version>
<!-- pretty outdated -->
<commons-io.version>2.5</commons-io.version>
<commons-lang3.version>3.6</commons-lang3.version>
@@ -1920,6 +1921,11 @@
<version>${commons-codec.version}</version>
</dependency>
<dependency>
+ <groupId>commons-validator</groupId>
+ <artifactId>commons-validator</artifactId>
+ <version>${commons-validator.version}</version>
+ </dependency>
+ <dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>${commons-io.version}</version>