From c2d8ab60857f15729e5d4005c827b4e28aeb6846 Mon Sep 17 00:00:00 2001 From: Jonathan Turner Eagles Date: Mon, 24 Mar 2014 18:17:02 +0000 Subject: [PATCH] YARN-1670. aggregated log writer can write more log data then it says is the log length (Mit Desai via jeagles) git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1580963 13f79535-47bb-0310-9956-ffa450edef68 --- .../logaggregation/AggregatedLogFormat.java | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/logaggregation/AggregatedLogFormat.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/logaggregation/AggregatedLogFormat.java index c4ec30f86b2..3568de26744 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/logaggregation/AggregatedLogFormat.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/logaggregation/AggregatedLogFormat.java @@ -182,28 +182,36 @@ public class AggregatedLogFormat { Arrays.sort(logFiles); for (File logFile : logFiles) { - long fileLength = 0; + final long fileLength = logFile.length(); // Write the logFile Type out.writeUTF(logFile.getName()); // Write the log length as UTF so that it is printable - out.writeUTF(String.valueOf(fileLength = logFile.length())); + out.writeUTF(String.valueOf(fileLength)); // Write the log itself FileInputStream in = null; try { in = SecureIOUtils.openForRead(logFile, getUser(), null); byte[] buf = new byte[65535]; - long curRead = 0; int len = 0; - while ( ((len = in.read(buf)) != -1) && (curRead < fileLength) ) { - out.write(buf, 0, len); - curRead += len; + long bytesLeft = fileLength; + while ((len = in.read(buf)) != -1) { + //If buffer contents within fileLength, write + if (len < bytesLeft) { + out.write(buf, 0, len); + bytesLeft-=len; + } + //else only write contents within fileLength, then exit early + else { + out.write(buf, 0, (int)bytesLeft); + break; + } } long newLength = logFile.length(); if(fileLength < newLength) { - LOG.warn("Aggregated Logs Truncated by "+ + LOG.warn("Aggregated logs truncated by approximately "+ (newLength-fileLength) +" bytes."); } } catch (IOException e) {