Merge -c 1497922 from trunk to branch-2 to fix HADOOP-9665. Fixed BlockDecompressorStream#decompress to return -1 rather than throw EOF at end of file. Contributed by Zhijie Shen.
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1497923 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
1731028a94
commit
448d56ad31
|
@ -509,6 +509,9 @@ Release 2.1.0-beta - 2013-07-02
|
||||||
HADOOP-9264. Port change to use Java untar API on Windows from
|
HADOOP-9264. Port change to use Java untar API on Windows from
|
||||||
branch-1-win to trunk. (Chris Nauroth via suresh)
|
branch-1-win to trunk. (Chris Nauroth via suresh)
|
||||||
|
|
||||||
|
HADOOP-9665. Fixed BlockDecompressorStream#decompress to return -1 rather
|
||||||
|
than throw EOF at end of file. (Zhijie Shen via acmurthy)
|
||||||
|
|
||||||
Release 2.0.5-alpha - 06/06/2013
|
Release 2.0.5-alpha - 06/06/2013
|
||||||
|
|
||||||
INCOMPATIBLE CHANGES
|
INCOMPATIBLE CHANGES
|
||||||
|
|
|
@ -93,7 +93,13 @@ public class BlockDecompressorStream extends DecompressorStream {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (decompressor.needsInput()) {
|
if (decompressor.needsInput()) {
|
||||||
int m = getCompressedData();
|
int m;
|
||||||
|
try {
|
||||||
|
m = getCompressedData();
|
||||||
|
} catch (EOFException e) {
|
||||||
|
eof = true;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
// Send the read data to the decompressor
|
// Send the read data to the decompressor
|
||||||
decompressor.setInput(buffer, 0, m);
|
decompressor.setInput(buffer, 0, m);
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,14 +17,16 @@
|
||||||
*/
|
*/
|
||||||
package org.apache.hadoop.io.compress;
|
package org.apache.hadoop.io.compress;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
|
|
||||||
import org.apache.hadoop.conf.Configuration;
|
import org.apache.hadoop.conf.Configuration;
|
||||||
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import static org.junit.Assert.*;
|
|
||||||
|
|
||||||
public class TestBlockDecompressorStream {
|
public class TestBlockDecompressorStream {
|
||||||
|
|
||||||
|
@ -33,9 +35,23 @@ public class TestBlockDecompressorStream {
|
||||||
private ByteArrayOutputStream bytesOut;
|
private ByteArrayOutputStream bytesOut;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testRead() throws IOException {
|
public void testRead1() throws IOException {
|
||||||
|
testRead(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testRead2() throws IOException {
|
||||||
|
// Test eof after getting non-zero block size info
|
||||||
|
testRead(4);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void testRead(int bufLen) throws IOException {
|
||||||
// compress empty stream
|
// compress empty stream
|
||||||
bytesOut = new ByteArrayOutputStream();
|
bytesOut = new ByteArrayOutputStream();
|
||||||
|
if (bufLen > 0) {
|
||||||
|
bytesOut.write(ByteBuffer.allocate(bufLen).putInt(1024).array(), 0,
|
||||||
|
bufLen);
|
||||||
|
}
|
||||||
BlockCompressorStream blockCompressorStream =
|
BlockCompressorStream blockCompressorStream =
|
||||||
new BlockCompressorStream(bytesOut,
|
new BlockCompressorStream(bytesOut,
|
||||||
new FakeCompressor(), 1024, 0);
|
new FakeCompressor(), 1024, 0);
|
||||||
|
@ -44,7 +60,8 @@ public class TestBlockDecompressorStream {
|
||||||
|
|
||||||
// check compressed output
|
// check compressed output
|
||||||
buf = bytesOut.toByteArray();
|
buf = bytesOut.toByteArray();
|
||||||
assertEquals("empty file compressed output size is not 4", 4, buf.length);
|
assertEquals("empty file compressed output size is not " + (bufLen + 4),
|
||||||
|
bufLen + 4, buf.length);
|
||||||
|
|
||||||
// use compressed output as input for decompression
|
// use compressed output as input for decompression
|
||||||
bytesIn = new ByteArrayInputStream(buf);
|
bytesIn = new ByteArrayInputStream(buf);
|
||||||
|
@ -57,6 +74,8 @@ public class TestBlockDecompressorStream {
|
||||||
-1 , blockDecompressorStream.read());
|
-1 , blockDecompressorStream.read());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
fail("unexpected IOException : " + e);
|
fail("unexpected IOException : " + e);
|
||||||
|
} finally {
|
||||||
|
blockDecompressorStream.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue