From 28c91be4da713a2adce63daa7c8b37b84ed0a84e Mon Sep 17 00:00:00 2001 From: Nishant Date: Fri, 19 Jan 2018 19:19:55 +0530 Subject: [PATCH 1/3] Fix rewrite of queryPath for encoded joda intervals as query param on druid router --- .../server/AsyncQueryForwardingServlet.java | 17 +++++++++-------- .../server/AsyncQueryForwardingServletTest.java | 7 +++++++ 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/server/src/main/java/io/druid/server/AsyncQueryForwardingServlet.java b/server/src/main/java/io/druid/server/AsyncQueryForwardingServlet.java index b6c5f287235f..8b0518046538 100644 --- a/server/src/main/java/io/druid/server/AsyncQueryForwardingServlet.java +++ b/server/src/main/java/io/druid/server/AsyncQueryForwardingServlet.java @@ -45,6 +45,7 @@ import io.druid.server.router.Router; import io.druid.server.security.AuthConfig; import io.druid.server.security.Escalator; +import org.apache.http.client.utils.URIBuilder; import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.client.api.Request; import org.eclipse.jetty.client.api.Response; @@ -331,15 +332,15 @@ protected URI rewriteURI(HttpServletRequest request, String scheme, String host) protected static URI makeURI(String scheme, String host, String requestURI, String rawQueryString) { try { - return new URI( - scheme, - host, - requestURI, - rawQueryString == null ? null : URLDecoder.decode(rawQueryString, "UTF-8"), - null - ); + return new URIBuilder() + .setScheme(scheme) + .setHost(host) + .setPath(requestURI) + // No need to encode-decode queryString, it is already encoded + .setQuery(rawQueryString) + .build(); } - catch (UnsupportedEncodingException | URISyntaxException e) { + catch (URISyntaxException e) { log.error(e, "Unable to rewrite URI [%s]", e.getMessage()); throw Throwables.propagate(e); } diff --git a/server/src/test/java/io/druid/server/AsyncQueryForwardingServletTest.java b/server/src/test/java/io/druid/server/AsyncQueryForwardingServletTest.java index c1c0d3b2a4ed..64b85b8136f9 100644 --- a/server/src/test/java/io/druid/server/AsyncQueryForwardingServletTest.java +++ b/server/src/test/java/io/druid/server/AsyncQueryForwardingServletTest.java @@ -308,6 +308,13 @@ public void testRewriteURI() throws Exception new URI("http://localhost/"), AsyncQueryForwardingServlet.makeURI("http", "localhost", "/", null) ); + + // Test reWrite Encoded interval with timezone info + // decoded parameters -> intervals=1900-01-01T00:00:00.000+01.00/3000-01-01T00:00:00.000+01:00") + Assert.assertEquals( + new URI("http://localhost:1234/some/path?intervals=1900-01-01T00%3A00%3A00.000%2B01%3A00%2F3000-01-01T00%3A00%3A00.000%2B01%3A00"), + AsyncQueryForwardingServlet.makeURI("http","localhost:1234", "/some/path", "intervals=1900-01-01T00%3A00%3A00.000%2B01%3A00%2F3000-01-01T00%3A00%3A00.000%2B01%3A00") + ); } private static class TestServer implements io.druid.client.selector.Server From 63c1815cea30ed0d19b8dfad2c2a62201dce7886 Mon Sep 17 00:00:00 2001 From: Nishant Date: Fri, 19 Jan 2018 20:36:18 +0530 Subject: [PATCH 2/3] fix checkstyle --- .../io/druid/server/AsyncQueryForwardingServlet.java | 2 -- .../server/AsyncQueryForwardingServletTest.java | 12 +++++++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/server/src/main/java/io/druid/server/AsyncQueryForwardingServlet.java b/server/src/main/java/io/druid/server/AsyncQueryForwardingServlet.java index 8b0518046538..f864a062740b 100644 --- a/server/src/main/java/io/druid/server/AsyncQueryForwardingServlet.java +++ b/server/src/main/java/io/druid/server/AsyncQueryForwardingServlet.java @@ -59,10 +59,8 @@ import javax.servlet.http.HttpServletResponse; import javax.ws.rs.core.MediaType; import java.io.IOException; -import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URISyntaxException; -import java.net.URLDecoder; import java.util.Map; import java.util.UUID; import java.util.concurrent.TimeUnit; diff --git a/server/src/test/java/io/druid/server/AsyncQueryForwardingServletTest.java b/server/src/test/java/io/druid/server/AsyncQueryForwardingServletTest.java index 64b85b8136f9..a9a7a71f0ca1 100644 --- a/server/src/test/java/io/druid/server/AsyncQueryForwardingServletTest.java +++ b/server/src/test/java/io/druid/server/AsyncQueryForwardingServletTest.java @@ -52,9 +52,9 @@ import io.druid.server.router.QueryHostFinder; import io.druid.server.router.RendezvousHashAvaticaConnectionBalancer; import io.druid.server.security.AllowAllAuthorizer; -import io.druid.server.security.NoopEscalator; import io.druid.server.security.Authorizer; import io.druid.server.security.AuthorizerMapper; +import io.druid.server.security.NoopEscalator; import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.server.Server; @@ -312,8 +312,14 @@ public void testRewriteURI() throws Exception // Test reWrite Encoded interval with timezone info // decoded parameters -> intervals=1900-01-01T00:00:00.000+01.00/3000-01-01T00:00:00.000+01:00") Assert.assertEquals( - new URI("http://localhost:1234/some/path?intervals=1900-01-01T00%3A00%3A00.000%2B01%3A00%2F3000-01-01T00%3A00%3A00.000%2B01%3A00"), - AsyncQueryForwardingServlet.makeURI("http","localhost:1234", "/some/path", "intervals=1900-01-01T00%3A00%3A00.000%2B01%3A00%2F3000-01-01T00%3A00%3A00.000%2B01%3A00") + new URI( + "http://localhost:1234/some/path?intervals=1900-01-01T00%3A00%3A00.000%2B01%3A00%2F3000-01-01T00%3A00%3A00.000%2B01%3A00"), + AsyncQueryForwardingServlet.makeURI( + "http", + "localhost:1234", + "/some/path", + "intervals=1900-01-01T00%3A00%3A00.000%2B01%3A00%2F3000-01-01T00%3A00%3A00.000%2B01%3A00" + ) ); } From 7f7e3ba64bab99a70ad0be14a40180ce203fe031 Mon Sep 17 00:00:00 2001 From: Nishant Date: Tue, 23 Jan 2018 00:58:47 +0530 Subject: [PATCH 3/3] fix comment --- .../java/io/druid/server/AsyncQueryForwardingServletTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/test/java/io/druid/server/AsyncQueryForwardingServletTest.java b/server/src/test/java/io/druid/server/AsyncQueryForwardingServletTest.java index a9a7a71f0ca1..9fcf4736fed1 100644 --- a/server/src/test/java/io/druid/server/AsyncQueryForwardingServletTest.java +++ b/server/src/test/java/io/druid/server/AsyncQueryForwardingServletTest.java @@ -310,7 +310,7 @@ public void testRewriteURI() throws Exception ); // Test reWrite Encoded interval with timezone info - // decoded parameters -> intervals=1900-01-01T00:00:00.000+01.00/3000-01-01T00:00:00.000+01:00") + // decoded parameters 1900-01-01T00:00:00.000+01.00 -> 1900-01-01T00:00:00.000+01:00 Assert.assertEquals( new URI( "http://localhost:1234/some/path?intervals=1900-01-01T00%3A00%3A00.000%2B01%3A00%2F3000-01-01T00%3A00%3A00.000%2B01%3A00"),