HDFS-4156. Seeking to a negative position should throw an IOE. Contributed by Eli Reisman
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1410813 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
e90d0ef396
commit
b4d01a0041
|
@ -250,6 +250,9 @@ Release 2.0.3-alpha - Unreleased
|
|||
HDFS-4105. The SPNEGO user for secondary namenode should use the web
|
||||
keytab. (Arpit Gupta via jitendra)
|
||||
|
||||
HDFS-4156. Seeking to a negative position should throw an IOE.
|
||||
(Eli Reisman via eli)
|
||||
|
||||
Release 2.0.2-alpha - 2012-09-07
|
||||
|
||||
INCOMPATIBLE CHANGES
|
||||
|
|
|
@ -1076,6 +1076,9 @@ public class DFSInputStream extends FSInputStream implements ByteBufferReadable
|
|||
if (targetPos > getFileLength()) {
|
||||
throw new IOException("Cannot seek after EOF");
|
||||
}
|
||||
if (targetPos < 0) {
|
||||
throw new IOException("Cannot seek to negative offset");
|
||||
}
|
||||
if (closed) {
|
||||
throw new IOException("Stream is closed!");
|
||||
}
|
||||
|
|
|
@ -141,7 +141,69 @@ public class TestSeekBug {
|
|||
cluster.shutdown();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Test (expected to throw IOE) for negative
|
||||
* <code>FSDataInpuStream#seek</code> argument
|
||||
*/
|
||||
@Test (expected=IOException.class)
|
||||
public void testNegativeSeek() throws IOException {
|
||||
Configuration conf = new HdfsConfiguration();
|
||||
MiniDFSCluster cluster = new MiniDFSCluster.Builder(conf).build();
|
||||
FileSystem fs = cluster.getFileSystem();
|
||||
try {
|
||||
Path seekFile = new Path("seekboundaries.dat");
|
||||
DFSTestUtil.createFile(
|
||||
fs,
|
||||
seekFile,
|
||||
ONEMB,
|
||||
ONEMB,
|
||||
fs.getDefaultBlockSize(seekFile),
|
||||
fs.getDefaultReplication(seekFile),
|
||||
seed);
|
||||
FSDataInputStream stream = fs.open(seekFile);
|
||||
// Perform "safe seek" (expected to pass)
|
||||
stream.seek(65536);
|
||||
assertEquals(65536, stream.getPos());
|
||||
// expect IOE for this call
|
||||
stream.seek(-73);
|
||||
} finally {
|
||||
fs.close();
|
||||
cluster.shutdown();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test (expected to throw IOE) for <code>FSDataInpuStream#seek</code>
|
||||
* when the position argument is larger than the file size.
|
||||
*/
|
||||
@Test (expected=IOException.class)
|
||||
public void testSeekPastFileSize() throws IOException {
|
||||
Configuration conf = new HdfsConfiguration();
|
||||
MiniDFSCluster cluster = new MiniDFSCluster.Builder(conf).build();
|
||||
FileSystem fs = cluster.getFileSystem();
|
||||
try {
|
||||
Path seekFile = new Path("seekboundaries.dat");
|
||||
DFSTestUtil.createFile(
|
||||
fs,
|
||||
seekFile,
|
||||
ONEMB,
|
||||
ONEMB,
|
||||
fs.getDefaultBlockSize(seekFile),
|
||||
fs.getDefaultReplication(seekFile),
|
||||
seed);
|
||||
FSDataInputStream stream = fs.open(seekFile);
|
||||
// Perform "safe seek" (expected to pass)
|
||||
stream.seek(65536);
|
||||
assertEquals(65536, stream.getPos());
|
||||
// expect IOE for this call
|
||||
stream.seek(ONEMB + ONEMB + ONEMB);
|
||||
} finally {
|
||||
fs.close();
|
||||
cluster.shutdown();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests if the seek bug exists in FSDataInputStream in LocalFS.
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue