You are viewing a plain text version of this content. The canonical link for it is here.
Posted to yarn-issues@hadoop.apache.org by "Tsuyoshi OZAWA (JIRA)" <ji...@apache.org> on 2014/09/12 05:52:33 UTC

[jira] [Updated] (YARN-2484) FileSystemRMStateStore#readFile/writeFile should close FSData(In|Out)putStream in final block

     [ https://issues.apache.org/jira/browse/YARN-2484?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Tsuyoshi OZAWA updated YARN-2484:
---------------------------------
    Attachment: YARN-2484.2.patch

Thanks for your review, Jason!

Updated:
1. In writeFile, updated to call close() method in try block not to obscure original error.
2. In readFile, updated to use IOUtils.cleanup() instead of close() because we don't need to care the error in close() at RM side.

> FileSystemRMStateStore#readFile/writeFile should close FSData(In|Out)putStream in final block
> ---------------------------------------------------------------------------------------------
>
>                 Key: YARN-2484
>                 URL: https://issues.apache.org/jira/browse/YARN-2484
>             Project: Hadoop YARN
>          Issue Type: Bug
>            Reporter: Tsuyoshi OZAWA
>            Assignee: Tsuyoshi OZAWA
>            Priority: Trivial
>         Attachments: YARN-2484.1.patch, YARN-2484.2.patch
>
>
> File descriptors can leak if exceptions are thrown in these methods.
> {code}
>  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;
>   }
> {code}
> {code}
>   private void writeFile(Path outputPath, byte[] data) throws Exception {
>     Path tempPath =
>         new Path(outputPath.getParent(), outputPath.getName() + ".tmp");
>     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);
>   }
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)