[ 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