Michael Blow has submitted this change and it was merged. Change subject: [ASTERIXDB-1424][RT] IPv6 Support ......................................................................
[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 <[email protected]> Tested-by: Jenkins <[email protected]> Contrib: Jenkins <[email protected]> Integration-Tests: Jenkins <[email protected]> Tested-by: Michael Blow <[email protected]> Reviewed-by: Murtadha Hubail <[email protected]> --- M asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/StorageApiServlet.java M hyracks-fullstack/hyracks/hyracks-util/pom.xml M hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/NetworkUtil.java M hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/StringUtil.java M hyracks-fullstack/pom.xml 5 files changed, 85 insertions(+), 7 deletions(-) Approvals: Jenkins: Verified; No violations found; ; Verified Michael Blow: Verified Murtadha Hubail: Looks good to me, approved diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/StorageApiServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/StorageApiServlet.java index 8dd4290..6b632a1 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/StorageApiServlet.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/StorageApiServlet.java @@ -18,6 +18,8 @@ */ package org.apache.asterix.api.http.server; +import static org.apache.hyracks.util.NetworkUtil.toHostPort; + import java.io.IOException; import java.io.PrintWriter; import java.net.InetSocketAddress; @@ -131,8 +133,7 @@ ArrayNode replicasArray = OBJECT_MAPPER.createArrayNode(); for (IPartitionReplica replica : replicas) { final ObjectNode replicaJson = OBJECT_MAPPER.createObjectNode(); - final InetSocketAddress location = replica.getIdentifier().getLocation(); - replicaJson.put("location", location.getHostString() + ":" + location.getPort()); + replicaJson.put("location", toHostPort(replica.getIdentifier().getLocation())); replicaJson.put("status", replica.getStatus().toString()); replicasArray.add(replicaJson); } 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> -- To view, visit https://asterix-gerrit.ics.uci.edu/2546 To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings Gerrit-MessageType: merged Gerrit-Change-Id: I6fdb97b89529632a47ecab12fb4c62c2ec7082e5 Gerrit-PatchSet: 6 Gerrit-Project: asterixdb Gerrit-Branch: master Gerrit-Owner: Michael Blow <[email protected]> Gerrit-Reviewer: Jenkins <[email protected]> Gerrit-Reviewer: Michael Blow <[email protected]> Gerrit-Reviewer: Murtadha Hubail <[email protected]> Gerrit-Reviewer: Till Westmann <[email protected]>
