diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/AHSWebServices.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/AHSWebServices.java index d91ae55..2da1f01 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/AHSWebServices.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/AHSWebServices.java @@ -213,7 +213,7 @@ public Response getLogs(@Context HttpServletRequest req, @Context HttpServletResponse res, @PathParam("containerid") String containerIdStr, @PathParam("filename") String filename, - @QueryParam("download") String download, + @QueryParam("format") String format, @QueryParam("size") String size) { init(res); ContainerId containerId; @@ -224,9 +224,6 @@ public Response getLogs(@Context HttpServletRequest req, "Invalid ContainerId: " + containerIdStr); } - boolean downloadFile = parseBooleanParam(download); - - final long length = parseLongParam(size); ApplicationId appId = containerId.getApplicationAttemptId() @@ -237,7 +234,7 @@ public Response getLogs(@Context HttpServletRequest req, } catch (Exception ex) { // directly find logs from HDFS. return sendStreamOutputResponse(appId, null, null, containerIdStr, - filename, downloadFile, length); + filename, format, length); } String appOwner = appInfo.getUser(); @@ -251,7 +248,7 @@ public Response getLogs(@Context HttpServletRequest req, if (isFinishedState(appInfo.getAppState())) { // directly find logs from HDFS. return sendStreamOutputResponse(appId, appOwner, null, containerIdStr, - filename, downloadFile, length); + filename, format, length); } return createBadResponse(Status.INTERNAL_SERVER_ERROR, "Can not get ContainerInfo for the container: " + containerId); @@ -271,7 +268,7 @@ public Response getLogs(@Context HttpServletRequest req, return response.build(); } else if (isFinishedState(appInfo.getAppState())) { return sendStreamOutputResponse(appId, appOwner, nodeId, - containerIdStr, filename, downloadFile, length); + containerIdStr, filename, format, length); } else { return createBadResponse(Status.NOT_FOUND, "The application is not at Running or Finished State."); @@ -294,13 +291,9 @@ private Response createBadResponse(Status status, String errMessage) { return response; } - private boolean parseBooleanParam(String param) { - return ("true").equalsIgnoreCase(param); - } - private Response sendStreamOutputResponse(ApplicationId appId, String appOwner, String nodeId, String containerIdStr, - String fileName, boolean downloadFile, long bytes) { + String fileName, String format, long bytes) { StreamingOutput stream = null; try { stream = getStreamingOutput(appId, appOwner, nodeId, @@ -314,8 +307,8 @@ private Response sendStreamOutputResponse(ApplicationId appId, "Can not get log for container: " + containerIdStr); } ResponseBuilder response = Response.ok(stream); - if (downloadFile) { - response.header("Content-Type", "application/octet-stream"); + if (format != null && !format.isEmpty()) { + response.header("Content-Type", "application/" + format); } return response.build(); } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/webapp/NMWebServices.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/webapp/NMWebServices.java index e13baa7..beb5e19 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/webapp/NMWebServices.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/webapp/NMWebServices.java @@ -216,7 +216,7 @@ public ContainerInfo getNodeContainer(@javax.ws.rs.core.Context @Unstable public Response getLogs(@PathParam("containerid") String containerIdStr, @PathParam("filename") String filename, - @QueryParam("download") String download, + @QueryParam("format") String format, @QueryParam("size") String size) { ContainerId containerId; try { @@ -234,7 +234,6 @@ public Response getLogs(@PathParam("containerid") String containerIdStr, } catch (YarnException ex) { return Response.serverError().entity(ex.getMessage()).build(); } - boolean downloadFile = parseBooleanParam(download); final long bytes = parseLongParam(size); try { @@ -285,8 +284,8 @@ public void write(OutputStream os) throws IOException, } }; ResponseBuilder resp = Response.ok(stream); - if (downloadFile) { - resp.header("Content-Type", "application/octet-stream"); + if (format != null && !format.isEmpty()) { + resp.header("Content-Type", "application/" + format); } return resp.build(); } catch (IOException ex) { @@ -294,13 +293,6 @@ public void write(OutputStream os) throws IOException, } } - private boolean parseBooleanParam(String param) { - if (param != null) { - return ("true").equalsIgnoreCase(param); - } - return false; - } - private long parseLongParam(String bytes) { if (bytes == null || bytes.isEmpty()) { return Long.MAX_VALUE; diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/webapp/TestNMWebServices.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/webapp/TestNMWebServices.java index 4e2feee..d280615 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/webapp/TestNMWebServices.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/webapp/TestNMWebServices.java @@ -394,7 +394,8 @@ public void testContainerLogs() throws IOException { // ask and download it response = r.path("ws").path("v1").path("node").path("containerlogs") - .path(containerIdStr).path(filename).queryParam("download", "true") + .path(containerIdStr).path(filename) + .queryParam("format", "octet-stream") .accept(MediaType.TEXT_PLAIN).get(ClientResponse.class); responseText = response.getEntity(String.class); assertEquals(logMessage, responseText);