Author: jeagles
Date: Mon Mar 24 18:11:48 2014
New Revision: 1580957
URL: http://svn.apache.org/r1580957
Log:
YARN-1670. aggregated log writer can write more log data then it says is the
log length (Mit Desai via jeagles)
Modified:
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/logaggregation/AggregatedLogFormat.java
Modified:
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/logaggregation/AggregatedLogFormat.java
URL:
http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/logaggregation/AggregatedLogFormat.java?rev=1580957&r1=1580956&r2=1580957&view=diff
==============================================================================
---
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/logaggregation/AggregatedLogFormat.java
(original)
+++
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/logaggregation/AggregatedLogFormat.java
Mon Mar 24 18:11:48 2014
@@ -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) {