This is an automated email from the ASF dual-hosted git repository. imaxon pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/asterixdb.git
commit d28f9addb8d4e0ea80bb3c88f828aa60d5e3783f Author: Michael Blow <mb...@apache.org> AuthorDate: Mon May 3 16:48:08 2021 -0400 [NO ISSUE][MISC] Avoid URI.getHost/Port where hostnames may contain underscore Change-Id: Iff58db84cc4d11609e7d7c459003a8a50f058ac6 Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/11305 Reviewed-by: Michael Blow <mb...@apache.org> Reviewed-by: Ian Maxon <ima...@uci.edu> Integration-Tests: Jenkins <jenk...@fulliautomatix.ics.uci.edu> Tested-by: Jenkins <jenk...@fulliautomatix.ics.uci.edu> --- .../asterix/app/nc/task/RetrieveLibrariesTask.java | 7 +++++-- .../asterix/app/external/ExternalUDFLibrarian.java | 3 ++- .../apache/asterix/test/common/TestExecutor.java | 9 +++------ .../java/org/apache/hyracks/util/NetworkUtil.java | 22 ++++++++++++++++++++++ .../org/apache/hyracks/util/NetworkUtilTest.java | 11 +++++++++++ 5 files changed, 43 insertions(+), 9 deletions(-) diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/task/RetrieveLibrariesTask.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/task/RetrieveLibrariesTask.java index 18d303c..715e626 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/task/RetrieveLibrariesTask.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/task/RetrieveLibrariesTask.java @@ -33,12 +33,14 @@ import org.apache.asterix.common.api.INCLifecycleTask; import org.apache.asterix.common.api.INcApplicationContext; import org.apache.asterix.common.library.ILibraryManager; import org.apache.http.client.utils.URIBuilder; +import org.apache.http.client.utils.URIUtils; import org.apache.hyracks.algebricks.common.utils.Pair; import org.apache.hyracks.api.control.CcId; import org.apache.hyracks.api.exceptions.ErrorCode; import org.apache.hyracks.api.exceptions.HyracksDataException; import org.apache.hyracks.api.io.FileReference; import org.apache.hyracks.api.service.IControllerService; +import org.apache.hyracks.util.NetworkUtil; import org.apache.hyracks.util.file.FileUtil; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -51,7 +53,7 @@ public class RetrieveLibrariesTask implements INCLifecycleTask { public RetrieveLibrariesTask(List<Pair<URI, String>> nodes) { this.nodes = nodes; - if (nodes.size() <= 0) { + if (nodes.isEmpty()) { throw new IllegalArgumentException("No nodes specified to retrieve from"); } } @@ -62,7 +64,8 @@ public class RetrieveLibrariesTask implements INCLifecycleTask { boolean success = false; for (Pair<URI, String> referenceNode : nodes) { try { - LOGGER.info("Retrieving UDFs from " + referenceNode.getFirst().getHost()); + LOGGER.info("Retrieving UDFs from " + + NetworkUtil.toHostPort(URIUtils.extractHost(referenceNode.getFirst()))); retrieveLibrary(referenceNode.getFirst(), referenceNode.getSecond(), appContext); success = true; break; diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/external/ExternalUDFLibrarian.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/external/ExternalUDFLibrarian.java index 2450025..e32f8ea 100644 --- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/external/ExternalUDFLibrarian.java +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/external/ExternalUDFLibrarian.java @@ -33,6 +33,7 @@ import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpDelete; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.protocol.HttpClientContext; +import org.apache.http.client.utils.URIUtils; import org.apache.http.entity.ContentType; import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntityBuilder; @@ -78,7 +79,7 @@ public class ExternalUDFLibrarian implements IExternalUDFLibrarian { private HttpClientContext createHttpClientContext(URI path, Pair<String, String> credentials) { HttpClientContext hcCtx = HttpClientContext.create(); - HttpHost h = new HttpHost(path.getHost(), path.getPort(), "http"); + HttpHost h = URIUtils.extractHost(path); CredentialsProvider cp = new BasicCredentialsProvider(); cp.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(credentials.first, credentials.second)); hcCtx.setCredentialsProvider(cp); diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java index 28b7fb3..40946d3 100644 --- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java @@ -106,7 +106,6 @@ import org.apache.commons.io.IOUtils; import org.apache.commons.io.output.ByteArrayOutputStream; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.mutable.MutableInt; -import org.apache.http.HttpHost; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.NameValuePair; @@ -119,6 +118,7 @@ import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.client.methods.RequestBuilder; import org.apache.http.client.protocol.HttpClientContext; +import org.apache.http.client.utils.URIUtils; import org.apache.http.client.utils.URLEncodedUtils; import org.apache.http.entity.ContentType; import org.apache.http.entity.StringEntity; @@ -207,10 +207,7 @@ public class TestExecutor { private static final int MAX_NON_UTF_8_STATEMENT_SIZE = 64 * 1024; private static final ContentType TEXT_PLAIN_UTF8 = ContentType.create(HttpUtil.ContentType.APPLICATION_JSON, UTF_8); - private final IPollTask plainExecutor = (testCaseCtx, ctx, variableCtx, statement, isDmlRecoveryTest, pb, cUnit, - queryCount, expectedResultFileCtxs, testFile, actualPath, expectedWarnings) -> executeTestFile(testCaseCtx, - ctx, variableCtx, statement, isDmlRecoveryTest, pb, cUnit, queryCount, expectedResultFileCtxs, - testFile, actualPath, expectedWarnings); + private final IPollTask plainExecutor = this::executeTestFile; public static final String DELIVERY_ASYNC = "async"; public static final String DELIVERY_DEFERRED = "deferred"; @@ -675,7 +672,7 @@ public class TestExecutor { cp.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(credentials.first, credentials.second)); HttpClientContext hcCtx = HttpClientContext.create(); AuthCache ac = new BasicAuthCache(); - ac.put(new HttpHost(method.getURI().getHost(), method.getURI().getPort(), "http"), new BasicScheme()); + ac.put(URIUtils.extractHost(method.getURI()), new BasicScheme()); hcCtx.setAuthCache(ac); CloseableHttpClient client = HttpClients.custom().setRetryHandler(StandardHttpRequestRetryHandler.INSTANCE) .setDefaultCredentialsProvider(cp).build(); 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 958310d..4f0c3a8 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 @@ -110,6 +110,28 @@ public class NetworkUtil { return address != null ? toHostPort(address.getHostString(), address.getPort()) : null; } + public static String toHostPort(HttpHost httpHost) { + if (httpHost == null) { + return null; + } + int port = httpHost.getPort(); + if (port == -1) { + port = "https".equalsIgnoreCase(httpHost.getSchemeName()) ? 443 : 80; + } + return toHostPort(httpHost.getHostName(), port); + } + + public static String toHostPort(HttpHost httpHost, int defaultPort) { + if (httpHost == null) { + return null; + } + int port = httpHost.getPort(); + if (port == -1) { + port = defaultPort; + } + return toHostPort(httpHost.getHostName(), port); + } + public static InetSocketAddress parseInetSocketAddress(String hostPortString) { int lastColon = hostPortString.lastIndexOf(':'); String host = decodeIPv6LiteralHost(lastColon < 0 ? hostPortString : hostPortString.substring(0, lastColon)); diff --git a/hyracks-fullstack/hyracks/hyracks-util/src/test/java/org/apache/hyracks/util/NetworkUtilTest.java b/hyracks-fullstack/hyracks/hyracks-util/src/test/java/org/apache/hyracks/util/NetworkUtilTest.java index c5d42c5..9300808 100644 --- a/hyracks-fullstack/hyracks/hyracks-util/src/test/java/org/apache/hyracks/util/NetworkUtilTest.java +++ b/hyracks-fullstack/hyracks/hyracks-util/src/test/java/org/apache/hyracks/util/NetworkUtilTest.java @@ -18,6 +18,9 @@ */ package org.apache.hyracks.util; +import java.net.URI; + +import org.apache.http.client.utils.URIUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.junit.Assert; @@ -38,5 +41,13 @@ public class NetworkUtilTest { Assert.assertEquals("localhost.localdomain.local:1234", NetworkUtil.defaultPort("localhost.localdomain.local:1234", 9999)); + Assert.assertEquals("[::1]:1234", + NetworkUtil.toHostPort(URIUtils.extractHost(URI.create("http://[::1]:1234")))); + Assert.assertEquals("[::1]:80", NetworkUtil.toHostPort(URIUtils.extractHost(URI.create("http://[::1]")))); + Assert.assertEquals("[::1]:443", NetworkUtil.toHostPort(URIUtils.extractHost(URI.create("https://[::1]")))); + Assert.assertEquals("[::1]:1234", + NetworkUtil.toHostPort(URIUtils.extractHost(URI.create("https://[::1]:1234")), 18091)); + Assert.assertEquals("[::1]:8091", + NetworkUtil.toHostPort(URIUtils.extractHost(URI.create("http://[::1]")), 8091)); } }