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

Hudson commented on HADOOP-9665:
--------------------------------

Integrated in Hadoop-Hdfs-trunk #1445 (See 
[https://builds.apache.org/job/Hadoop-Hdfs-trunk/1445/])
    HADOOP-9665. Fixed BlockDecompressorStream#decompress to return -1 rather 
than throw EOF at end of file. Contributed by Zhijie Shen. (Revision 1497922)

     Result = FAILURE
acmurthy : 
http://svn.apache.org/viewcvs.cgi/?root=Apache-SVN&view=rev&rev=1497922
Files : 
* /hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt
* 
/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/compress/BlockDecompressorStream.java
* 
/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/io/compress/TestBlockDecompressorStream.java

                
> BlockDecompressorStream#decompress will throw EOFException instead of return 
> -1 when EOF
> ----------------------------------------------------------------------------------------
>
>                 Key: HADOOP-9665
>                 URL: https://issues.apache.org/jira/browse/HADOOP-9665
>             Project: Hadoop Common
>          Issue Type: Bug
>    Affects Versions: 1.1.2, 2.1.0-beta, 2.2.0
>            Reporter: Zhijie Shen
>            Assignee: Zhijie Shen
>            Priority: Critical
>             Fix For: 2.1.0-beta, 1.2.1
>
>         Attachments: HADOOP-9665.1.patch, HADOOP-9665.2.patch, 
> HADOOP-9665-branch-1.1.patch
>
>
> BlockDecompressorStream#decompress ultimately calls rawReadInt, which will 
> throw EOFException instead of return -1 when encountering end of a stream. 
> Then, decompress will be called by read. However, InputStream#read is 
> supposed to return -1 instead of throwing EOFException to indicate the end of 
> a stream. This explains why in LineReader,
> {code}
>       if (bufferPosn >= bufferLength) {
>         startPosn = bufferPosn = 0;
>         if (prevCharCR)
>           ++bytesConsumed; //account for CR from previous read
>         bufferLength = in.read(buffer);
>         if (bufferLength <= 0)
>           break; // EOF
>       }
> {code}
> -1 is checked instead of catching EOFException.
> Now the problem will occur with SnappyCodec. If an input file is compressed 
> with SnappyCodec, it needs to be decompressed through BlockDecompressorStream 
> when it is read. Then, if it empty, EOFException will been thrown from 
> rawReadInt and break LineReader.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to