diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt index b40db5297af..57ff8df9bab 100644 --- a/hadoop-yarn-project/CHANGES.txt +++ b/hadoop-yarn-project/CHANGES.txt @@ -308,6 +308,9 @@ Release 2.6.0 - UNRELEASED YARN-2541. Fixed ResourceManagerRest.apt.vm table syntax error. (jianhe) + YARN-2484. FileSystemRMStateStore#readFile/writeFile should close + FSData(In|Out)putStream in final block (Tsuyoshi OZAWA via jlowe) + Release 2.5.1 - 2014-09-05 INCOMPATIBLE CHANGES diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/FileSystemRMStateStore.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/FileSystemRMStateStore.java index 4c01a618c89..4d918313b04 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/FileSystemRMStateStore.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/FileSystemRMStateStore.java @@ -39,6 +39,7 @@ import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.fs.PathFilter; import org.apache.hadoop.io.DataInputByteBuffer; +import org.apache.hadoop.io.IOUtils; import org.apache.hadoop.security.Credentials; import org.apache.hadoop.security.token.delegation.DelegationKey; import org.apache.hadoop.yarn.api.records.ApplicationAttemptId; @@ -573,12 +574,16 @@ public class FileSystemRMStateStore extends RMStateStore { } private byte[] readFile(Path inputPath, long len) throws Exception { - FSDataInputStream fsIn = fs.open(inputPath); - // state data will not be that "long" - byte[] data = new byte[(int)len]; - fsIn.readFully(data); - fsIn.close(); - return data; + FSDataInputStream fsIn = null; + try { + fsIn = fs.open(inputPath); + // state data will not be that "long" + byte[] data = new byte[(int) len]; + fsIn.readFully(data); + return data; + } finally { + IOUtils.cleanup(LOG, fsIn); + } } /* @@ -592,10 +597,15 @@ public class FileSystemRMStateStore extends RMStateStore { FSDataOutputStream fsOut = null; // This file will be overwritten when app/attempt finishes for saving the // final status. - fsOut = fs.create(tempPath, true); - fsOut.write(data); - fsOut.close(); - fs.rename(tempPath, outputPath); + try { + fsOut = fs.create(tempPath, true); + fsOut.write(data); + fsOut.close(); + fsOut = null; + fs.rename(tempPath, outputPath); + } finally { + IOUtils.cleanup(LOG, fsOut); + } } /*