[ASTERIXDB-1424][RT] IPv6 Support
Incremental progress towards IPv6 functionality
Change-Id: I6fdb97b89529632a47ecab12fb4c62c2ec7082e5
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2546
Sonar-Qube: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Contrib: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Tested-by: Michael Blow <mblow@apache.org>
Reviewed-by: Murtadha Hubail <mhubail@apache.org>
diff --git a/hyracks-fullstack/hyracks/hyracks-util/pom.xml b/hyracks-fullstack/hyracks/hyracks-util/pom.xml
index 212673e..ff5f622 100644
--- a/hyracks-fullstack/hyracks/hyracks-util/pom.xml
+++ b/hyracks-fullstack/hyracks/hyracks-util/pom.xml
@@ -79,10 +79,22 @@
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
</dependency>
- <dependency>
- <groupId>commons-io</groupId>
- <artifactId>commons-io</artifactId>
- </dependency>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-text</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpcore</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpclient</artifactId>
+ </dependency>
</dependencies>
</project>
diff --git a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/NetworkUtil.java b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/NetworkUtil.java
index f9f45c1..06aeef5 100644
--- a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/NetworkUtil.java
+++ b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/NetworkUtil.java
@@ -19,9 +19,17 @@
package org.apache.hyracks.util;
import java.io.IOException;
+import java.net.InetSocketAddress;
import java.net.StandardSocketOptions;
+import java.net.URI;
+import java.net.URISyntaxException;
import java.nio.channels.SocketChannel;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.http.HttpHost;
+import org.apache.http.client.utils.URIBuilder;
+import org.apache.http.conn.util.InetAddressUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -46,4 +54,56 @@
}
}
}
+
+ public static URI toUri(HttpHost host) throws URISyntaxException {
+ return builderFrom(host).build();
+ }
+
+ public static URI toUri(HttpHost host, String path) throws URISyntaxException {
+ return builderFrom(host).setPath(path).build();
+ }
+
+ public static URIBuilder builderFrom(HttpHost host) {
+ return new URIBuilder().setHost(host.getHostName()).setPort(host.getPort()).setScheme(host.getSchemeName());
+ }
+
+ public static String toHostPort(String host, String port) {
+ return InetAddressUtils.isIPv6Address(host) ? "[" + host + "]:" + port : host + ":" + port;
+ }
+
+ public static String toHostPort(String host, int port) {
+ return InetAddressUtils.isIPv6Address(host) ? "[" + host + "]:" + port : host + ":" + port;
+ }
+
+ public static String toHostPort(InetSocketAddress address) {
+ return toHostPort(address.getHostString(), address.getPort());
+ }
+
+ public static InetSocketAddress parseInetSocketAddress(String hostPortString) {
+ int lastColon = hostPortString.lastIndexOf(':');
+ String host = decodeIPv6LiteralHost(lastColon < 0 ? hostPortString : hostPortString.substring(0, lastColon));
+ int port = lastColon < 0 ? 0 : Integer.parseInt(hostPortString.substring(lastColon + 1));
+ return InetSocketAddress.createUnresolved(host, port);
+ }
+
+ public static InetSocketAddress toInetSocketAddress(String maybeLiteralHost, int port) {
+ return InetSocketAddress.createUnresolved(decodeIPv6LiteralHost(maybeLiteralHost), port);
+ }
+
+ public static List<InetSocketAddress> parseInetSocketAddresses(String... hostPortStrings) {
+ List<InetSocketAddress> hosts = new ArrayList<>();
+ for (String node : hostPortStrings) {
+ hosts.add(parseInetSocketAddress(node));
+ }
+ return hosts;
+ }
+
+ public static String encodeIPv6LiteralHost(String hostname) {
+ return InetAddressUtils.isIPv6Address(hostname) ? "[" + hostname + "]" : hostname;
+ }
+
+ public static String decodeIPv6LiteralHost(String hostname) {
+ return hostname.length() > 0 && hostname.charAt(0) == '[' ? hostname.substring(1, hostname.length() - 1)
+ : hostname;
+ }
}
diff --git a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/StringUtil.java b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/StringUtil.java
index b457c79..11be0ba 100644
--- a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/StringUtil.java
+++ b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/StringUtil.java
@@ -23,7 +23,7 @@
import java.util.regex.Pattern;
import org.apache.commons.collections4.map.LRUMap;
-import org.apache.commons.lang3.text.WordUtils;
+import org.apache.commons.text.WordUtils;
public class StringUtil {
private static final Map<String, String> CAMEL_CACHE = Collections.synchronizedMap(new LRUMap<>(1024));
diff --git a/hyracks-fullstack/pom.xml b/hyracks-fullstack/pom.xml
index 62407a4..d553c3a 100644
--- a/hyracks-fullstack/pom.xml
+++ b/hyracks-fullstack/pom.xml
@@ -128,6 +128,11 @@
<version>2.6</version>
</dependency>
<dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-text</artifactId>
+ <version>1.2</version>
+ </dependency>
+ <dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.4</version>