mirror of https://github.com/apache/druid.git
Fix task report streaming in https setups. (#11739)
* Fix task report streaming in https setups. * Trivial change to re-trigger ITs.
This commit is contained in:
parent
02b2057371
commit
cb9bc15e95
|
@ -21,8 +21,11 @@ package org.apache.druid.indexer;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonCreator;
|
import com.fasterxml.jackson.annotation.JsonCreator;
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import org.apache.druid.java.util.common.IAE;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
import java.net.URL;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
public class TaskLocation
|
public class TaskLocation
|
||||||
|
@ -75,6 +78,27 @@ public class TaskLocation
|
||||||
return tlsPort;
|
return tlsPort;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public URL makeURL(final String encodedPathAndQueryString) throws MalformedURLException
|
||||||
|
{
|
||||||
|
final String scheme;
|
||||||
|
final int portToUse;
|
||||||
|
|
||||||
|
if (tlsPort > 0) {
|
||||||
|
scheme = "https";
|
||||||
|
portToUse = tlsPort;
|
||||||
|
} else {
|
||||||
|
scheme = "http";
|
||||||
|
portToUse = port;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!encodedPathAndQueryString.startsWith("/")) {
|
||||||
|
throw new IAE("Path must start with '/'");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use URL constructor, not URI, since the path is already encoded.
|
||||||
|
return new URL(scheme, host, portToUse, encodedPathAndQueryString);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
|
|
|
@ -21,10 +21,28 @@ package org.apache.druid.indexer;
|
||||||
|
|
||||||
|
|
||||||
import nl.jqno.equalsverifier.EqualsVerifier;
|
import nl.jqno.equalsverifier.EqualsVerifier;
|
||||||
|
import org.junit.Assert;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
import java.net.URL;
|
||||||
|
|
||||||
public class TaskLocationTest
|
public class TaskLocationTest
|
||||||
{
|
{
|
||||||
|
@Test
|
||||||
|
@SuppressWarnings("HttpUrlsUsage")
|
||||||
|
public void testMakeURL() throws MalformedURLException
|
||||||
|
{
|
||||||
|
Assert.assertEquals(new URL("http://abc:80/foo"), new TaskLocation("abc", 80, 0).makeURL("/foo"));
|
||||||
|
Assert.assertEquals(new URL("http://abc:80/foo"), new TaskLocation("abc", 80, -1).makeURL("/foo"));
|
||||||
|
Assert.assertEquals(new URL("https://abc:443/foo"), new TaskLocation("abc", 80, 443).makeURL("/foo"));
|
||||||
|
Assert.assertThrows(
|
||||||
|
"URL that does not start with '/'",
|
||||||
|
IllegalArgumentException.class,
|
||||||
|
() -> new TaskLocation("abc", 80, 443).makeURL("foo")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testEqualsAndHashCode()
|
public void testEqualsAndHashCode()
|
||||||
{
|
{
|
||||||
|
|
|
@ -276,16 +276,8 @@ public abstract class IndexTaskClient implements AutoCloseable
|
||||||
byte[] content
|
byte[] content
|
||||||
) throws MalformedURLException
|
) throws MalformedURLException
|
||||||
{
|
{
|
||||||
final String host = location.getHost();
|
|
||||||
final String scheme = location.getTlsPort() >= 0 ? "https" : "http";
|
|
||||||
final int port = location.getTlsPort() >= 0 ? location.getTlsPort() : location.getPort();
|
|
||||||
|
|
||||||
// Use URL constructor, not URI, since the path is already encoded.
|
|
||||||
// The below line can throw a MalformedURLException, and this method should return immediately without rety.
|
// The below line can throw a MalformedURLException, and this method should return immediately without rety.
|
||||||
final URL serviceUrl = new URL(
|
final URL serviceUrl = location.makeURL(
|
||||||
scheme,
|
|
||||||
host,
|
|
||||||
port,
|
|
||||||
encodedQueryString == null ? path : StringUtils.format("%s?%s", path, encodedQueryString)
|
encodedQueryString == null ? path : StringUtils.format("%s?%s", path, encodedQueryString)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -105,14 +105,9 @@ public class TaskRunnerUtils
|
||||||
);
|
);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return new URI(StringUtils.format(
|
return taskLocation.makeURL(path);
|
||||||
"http://%s:%s%s",
|
|
||||||
taskLocation.getHost(),
|
|
||||||
taskLocation.getPort(),
|
|
||||||
path
|
|
||||||
)).toURL();
|
|
||||||
}
|
}
|
||||||
catch (URISyntaxException | MalformedURLException e) {
|
catch (MalformedURLException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
package org.apache.druid.indexing.overlord;
|
package org.apache.druid.indexing.overlord;
|
||||||
|
|
||||||
|
import org.apache.druid.indexer.TaskLocation;
|
||||||
import org.apache.druid.indexing.worker.Worker;
|
import org.apache.druid.indexing.worker.Worker;
|
||||||
import org.apache.druid.indexing.worker.config.WorkerConfig;
|
import org.apache.druid.indexing.worker.config.WorkerConfig;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
|
@ -40,4 +41,15 @@ public class TaskRunnerUtilsTest
|
||||||
Assert.assertEquals("1.2.3.4:8290", url.getAuthority());
|
Assert.assertEquals("1.2.3.4:8290", url.getAuthority());
|
||||||
Assert.assertEquals("/druid/worker/v1/task/foo%20bar%26/log", url.getPath());
|
Assert.assertEquals("/druid/worker/v1/task/foo%20bar%26/log", url.getPath());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testMakeTaskLocationURL()
|
||||||
|
{
|
||||||
|
final URL url = TaskRunnerUtils.makeTaskLocationURL(
|
||||||
|
new TaskLocation("1.2.3.4", 8090, 8290),
|
||||||
|
"/druid/worker/v1/task/%s/log",
|
||||||
|
"foo bar&"
|
||||||
|
);
|
||||||
|
Assert.assertEquals("https://1.2.3.4:8290/druid/worker/v1/task/foo%20bar%26/log", url.toString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue