hadoop git commit: YARN-3239. WebAppProxy does not support a final tracking url which has query fragments and params. Contributed by Jian He (cherry picked from commit 1a68fc43464d3948418f453bb2f80df7
Repository: hadoop Updated Branches: refs/heads/branch-2.6.1 406ec495b -> a4b8897b3 YARN-3239. WebAppProxy does not support a final tracking url which has query fragments and params. Contributed by Jian He (cherry picked from commit 1a68fc43464d3948418f453bb2f80df7ce773097) (cherry picked from commit 257087417e424e628f090b6b648ccb3b9c880250) (cherry picked from commit 49468108c203bf093acdc93c1798d90c480c3a17) Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/a4b8897b Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/a4b8897b Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/a4b8897b Branch: refs/heads/branch-2.6.1 Commit: a4b8897b306103c20b97d9fbc20cc93e968620ae Parents: 406ec49 Author: Jason LoweAuthored: Wed Feb 25 16:14:34 2015 + Committer: Vinod Kumar Vavilapalli Committed: Tue Sep 1 13:32:21 2015 -0700 -- hadoop-yarn-project/CHANGES.txt | 3 +++ .../server/webproxy/WebAppProxyServlet.java | 23 ++-- .../server/webproxy/TestWebAppProxyServlet.java | 23 +++- 3 files changed, 41 insertions(+), 8 deletions(-) -- http://git-wip-us.apache.org/repos/asf/hadoop/blob/a4b8897b/hadoop-yarn-project/CHANGES.txt -- diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt index d96a0d9..78d7093 100644 --- a/hadoop-yarn-project/CHANGES.txt +++ b/hadoop-yarn-project/CHANGES.txt @@ -85,6 +85,9 @@ Release 2.6.1 - UNRELEASED YARN-3238. Connection timeouts to nodemanagers are retried at multiple levels (Jason Lowe via xgong) +YARN-3239. WebAppProxy does not support a final tracking url which has +query fragments and params (Jian He via jlowe) + Release 2.6.0 - 2014-11-18 INCOMPATIBLE CHANGES http://git-wip-us.apache.org/repos/asf/hadoop/blob/a4b8897b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/main/java/org/apache/hadoop/yarn/server/webproxy/WebAppProxyServlet.java -- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/main/java/org/apache/hadoop/yarn/server/webproxy/WebAppProxyServlet.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/main/java/org/apache/hadoop/yarn/server/webproxy/WebAppProxyServlet.java index 19ae9dc..d41374a 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/main/java/org/apache/hadoop/yarn/server/webproxy/WebAppProxyServlet.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/main/java/org/apache/hadoop/yarn/server/webproxy/WebAppProxyServlet.java @@ -36,6 +36,7 @@ import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.core.UriBuilder; import org.apache.commons.httpclient.Header; import org.apache.commons.httpclient.HostConfiguration; @@ -58,6 +59,8 @@ import org.apache.hadoop.yarn.util.TrackingUriPlugin; import org.apache.hadoop.yarn.webapp.MimeType; import org.apache.hadoop.yarn.webapp.hamlet.Hamlet; import org.apache.hadoop.yarn.webapp.util.WebAppUtils; +import org.apache.http.NameValuePair; +import org.apache.http.client.utils.URLEncodedUtils; public class WebAppProxyServlet extends HttpServlet { private static final long serialVersionUID = 1L; @@ -322,13 +325,19 @@ public class WebAppProxyServlet extends HttpServlet { req.getQueryString(), true), runningUser, id); return; } - URI toFetch = new URI(trackingUri.getScheme(), - trackingUri.getAuthority(), - StringHelper.ujoin(trackingUri.getPath(), rest), req.getQueryString(), - null); - - LOG.info(req.getRemoteUser()+" is accessing unchecked "+toFetch+ - " which is the app master GUI of "+appId+" owned by "+runningUser); + + // Append the user-provided path and query parameter to the original + // tracking url. + List queryPairs = + URLEncodedUtils.parse(req.getQueryString(), null); + UriBuilder builder = UriBuilder.fromUri(trackingUri); + for (NameValuePair pair : queryPairs) { +builder.queryParam(pair.getName(), pair.getValue()); + } + URI toFetch = builder.path(rest).build(); + + LOG.info(remoteUser+" is accessing unchecked "+toFetch+ +" which is the app master GUI of "+appId+" owned by "+runningUser); switch(applicationReport.getYarnApplicationState()) { case KILLED:
hadoop git commit: YARN-3239. WebAppProxy does not support a final tracking url which has query fragments and params. Contributed by Jian He (cherry picked from commit 1a68fc43464d3948418f453bb2f80df7
Repository: hadoop Updated Branches: refs/heads/branch-2 75fd43be0 - 257087417 YARN-3239. WebAppProxy does not support a final tracking url which has query fragments and params. Contributed by Jian He (cherry picked from commit 1a68fc43464d3948418f453bb2f80df7ce773097) Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/25708741 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/25708741 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/25708741 Branch: refs/heads/branch-2 Commit: 257087417e424e628f090b6b648ccb3b9c880250 Parents: 75fd43b Author: Jason Lowe jl...@apache.org Authored: Wed Feb 25 16:14:34 2015 + Committer: Jason Lowe jl...@apache.org Committed: Wed Feb 25 16:15:35 2015 + -- hadoop-yarn-project/CHANGES.txt | 3 +++ .../server/webproxy/WebAppProxyServlet.java | 21 +- .../server/webproxy/TestWebAppProxyServlet.java | 23 +++- 3 files changed, 40 insertions(+), 7 deletions(-) -- http://git-wip-us.apache.org/repos/asf/hadoop/blob/25708741/hadoop-yarn-project/CHANGES.txt -- diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt index 3124b3a..9046482 100644 --- a/hadoop-yarn-project/CHANGES.txt +++ b/hadoop-yarn-project/CHANGES.txt @@ -616,6 +616,9 @@ Release 2.7.0 - UNRELEASED YARN-3247. TestQueueMappings should use CapacityScheduler explicitly. (Zhihai Xu via ozawa) +YARN-3239. WebAppProxy does not support a final tracking url which has +query fragments and params (Jian He via jlowe) + Release 2.6.0 - 2014-11-18 INCOMPATIBLE CHANGES http://git-wip-us.apache.org/repos/asf/hadoop/blob/25708741/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/main/java/org/apache/hadoop/yarn/server/webproxy/WebAppProxyServlet.java -- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/main/java/org/apache/hadoop/yarn/server/webproxy/WebAppProxyServlet.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/main/java/org/apache/hadoop/yarn/server/webproxy/WebAppProxyServlet.java index 6c0391f..47f7769 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/main/java/org/apache/hadoop/yarn/server/webproxy/WebAppProxyServlet.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/main/java/org/apache/hadoop/yarn/server/webproxy/WebAppProxyServlet.java @@ -20,9 +20,9 @@ package org.apache.hadoop.yarn.server.webproxy; import java.io.IOException; import java.io.InputStream; +import java.io.ObjectInputStream; import java.io.OutputStream; import java.io.PrintWriter; -import java.io.ObjectInputStream; import java.net.InetAddress; import java.net.URI; import java.net.URISyntaxException; @@ -38,6 +38,7 @@ import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.core.UriBuilder; import org.apache.commons.httpclient.Header; import org.apache.commons.httpclient.HostConfiguration; @@ -58,6 +59,8 @@ import org.apache.hadoop.yarn.util.TrackingUriPlugin; import org.apache.hadoop.yarn.webapp.MimeType; import org.apache.hadoop.yarn.webapp.hamlet.Hamlet; import org.apache.hadoop.yarn.webapp.util.WebAppUtils; +import org.apache.http.NameValuePair; +import org.apache.http.client.utils.URLEncodedUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -325,11 +328,17 @@ public class WebAppProxyServlet extends HttpServlet { req.getQueryString(), true), runningUser, id); return; } - URI toFetch = new URI(trackingUri.getScheme(), - trackingUri.getAuthority(), - StringHelper.ujoin(trackingUri.getPath(), rest), req.getQueryString(), - null); - + + // Append the user-provided path and query parameter to the original + // tracking url. + ListNameValuePair queryPairs = + URLEncodedUtils.parse(req.getQueryString(), null); + UriBuilder builder = UriBuilder.fromUri(trackingUri); + for (NameValuePair pair : queryPairs) { +builder.queryParam(pair.getName(), pair.getValue()); + } + URI toFetch = builder.path(rest).build(); + LOG.info({} is accessing unchecked {} + which is the app master GUI of {} owned by {}, remoteUser, toFetch, appId, runningUser);