You are viewing a plain text version of this content. The canonical link for it is here.
Posted to mapreduce-issues@hadoop.apache.org by "Colin Patrick McCabe (JIRA)" <ji...@apache.org> on 2012/07/23 20:05:35 UTC

[jira] [Commented] (MAPREDUCE-2374) Should not use PrintWriter to write taskjvm.sh

    [ https://issues.apache.org/jira/browse/MAPREDUCE-2374?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13420830#comment-13420830 ] 

Colin Patrick McCabe commented on MAPREDUCE-2374:
-------------------------------------------------

In OpenJDK 6 at least, FileWriter#close doesn't always close the file descriptor.

Starting here:
http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/io/FileWriter.java

I went to OutputStreamWriter.  OutputStreamWriter#close calls StreamEncoder#close, which has:

{code}
void implClose() throws IOException {
    flushLeftoverChar(null, true);
    try {
        for (;;) {
            CoderResult cr = encoder.flush(bb);
            if (cr.isUnderflow())
                break;
            if (cr.isOverflow()) {
                assert bb.position() > 0;
                writeBytes();
                continue;
            }
            cr.throwException();
        }
        if (bb.position() > 0)
            writeBytes();
        if (ch != null)
            ch.close();
        else
            out.close();
    } catch (IOException x) {
        encoder.reset();
        throw x;
    }
}
{code}

So you can see that in the case of exceptions being thrown, the FileChannel is not closed.  The finalizer probably takes care of it, but that's cold comfort to you in this case.

Maybe it would be best to use the FileChannel API directly rather than using FileWriter.
                
> Should not use PrintWriter to write taskjvm.sh
> ----------------------------------------------
>
>                 Key: MAPREDUCE-2374
>                 URL: https://issues.apache.org/jira/browse/MAPREDUCE-2374
>             Project: Hadoop Map/Reduce
>          Issue Type: Bug
>    Affects Versions: 0.22.0
>            Reporter: Todd Lipcon
>            Assignee: Todd Lipcon
>             Fix For: 0.22.1
>
>         Attachments: mapreduce-2374-on-20sec.txt
>
>
> Our use of PrintWriter in TaskController.writeCommand is unsafe, since that class swallows all IO exceptions. We're not currently checking for errors, which I'm seeing result in occasional task failures with the message "Text file busy" - assumedly because the close() call is failing silently for some reason.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira