Author: devaraj Date: Thu May 29 07:05:26 2014 New Revision: 1598209 URL: http://svn.apache.org/r1598209 Log: MAPREDUCE-5895. Close streams properly to avoid leakage in TaskLog. Contributed by Kousuke Saruta.
Modified: hadoop/common/trunk/hadoop-mapreduce-project/CHANGES.txt hadoop/common/trunk/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapred/TaskLog.java Modified: hadoop/common/trunk/hadoop-mapreduce-project/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-mapreduce-project/CHANGES.txt?rev=1598209&r1=1598208&r2=1598209&view=diff ============================================================================== --- hadoop/common/trunk/hadoop-mapreduce-project/CHANGES.txt (original) +++ hadoop/common/trunk/hadoop-mapreduce-project/CHANGES.txt Thu May 29 07:05:26 2014 @@ -244,6 +244,9 @@ Release 2.5.0 - UNRELEASED MAPREDUCE-5862. Line records longer than 2x split size aren't handled correctly (bc Wong via jlowe) + MAPREDUCE-5895. Close streams properly to avoid leakage in TaskLog. + (Kousuke Saruta via devaraj) + Release 2.4.1 - UNRELEASED INCOMPATIBLE CHANGES Modified: hadoop/common/trunk/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapred/TaskLog.java URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapred/TaskLog.java?rev=1598209&r1=1598208&r2=1598209&view=diff ============================================================================== --- hadoop/common/trunk/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapred/TaskLog.java (original) +++ hadoop/common/trunk/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapred/TaskLog.java Thu May 29 07:05:26 2014 @@ -199,16 +199,18 @@ public class TaskLog { // file first and then rename. File tmpIndexFile = getTmpIndexFile(currentTaskid, isCleanup); - BufferedOutputStream bos = - new BufferedOutputStream( - SecureIOUtils.createForWrite(tmpIndexFile, 0644)); - DataOutputStream dos = new DataOutputStream(bos); - //the format of the index file is - //LOG_DIR: <the dir where the task logs are really stored> - //STDOUT: <start-offset in the stdout file> <length> - //STDERR: <start-offset in the stderr file> <length> - //SYSLOG: <start-offset in the syslog file> <length> + BufferedOutputStream bos = null; + DataOutputStream dos = null; try{ + bos = new BufferedOutputStream( + SecureIOUtils.createForWrite(tmpIndexFile, 0644)); + dos = new DataOutputStream(bos); + //the format of the index file is + //LOG_DIR: <the dir where the task logs are really stored> + //STDOUT: <start-offset in the stdout file> <length> + //STDERR: <start-offset in the stderr file> <length> + //SYSLOG: <start-offset in the syslog file> <length> + dos.writeBytes(LogFileDetail.LOCATION + logLocation + "\n" + LogName.STDOUT.toString() + ":"); dos.writeBytes(Long.toString(prevOutLength) + " "); @@ -225,8 +227,10 @@ public class TaskLog { + "\n"); dos.close(); dos = null; + bos.close(); + bos = null; } finally { - IOUtils.cleanup(LOG, dos); + IOUtils.cleanup(LOG, dos, bos); } File indexFile = getIndexFile(currentTaskid, isCleanup);