diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index 86998de41cc..da4cab7a127 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -615,6 +615,8 @@ Release 0.23.2 - UNRELEASED HDFS-2038. Update TestHDFSCLI to handle relative paths with globs. (Kihwal Lee via szetszwo) + HDFS-3101. Cannot read empty file using WebHDFS. (szetszwo) + Release 0.23.1 - 2012-02-17 INCOMPATIBLE CHANGES diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/web/resources/NamenodeWebHdfsMethods.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/web/resources/NamenodeWebHdfsMethods.java index e041b034082..0115ee27579 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/web/resources/NamenodeWebHdfsMethods.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/web/resources/NamenodeWebHdfsMethods.java @@ -146,9 +146,11 @@ public class NamenodeWebHdfsMethods { throw new FileNotFoundException("File " + path + " not found."); } final long len = status.getLen(); - if (op == GetOpParam.Op.OPEN && (openOffset < 0L || openOffset >= len)) { - throw new IOException("Offset=" + openOffset + " out of the range [0, " - + len + "); " + op + ", path=" + path); + if (op == GetOpParam.Op.OPEN) { + if (openOffset < 0L || (openOffset >= len && len > 0)) { + throw new IOException("Offset=" + openOffset + + " out of the range [0, " + len + "); " + op + ", path=" + path); + } } if (len > 0) { diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/web/TestWebHdfsFileSystemContract.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/web/TestWebHdfsFileSystemContract.java index b551dd1927e..df7b656bbec 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/web/TestWebHdfsFileSystemContract.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/web/TestWebHdfsFileSystemContract.java @@ -176,7 +176,21 @@ public class TestWebHdfsFileSystemContract extends FileSystemContractBaseTest { } public void testSeek() throws IOException { - final Path p = new Path("/test/testSeek"); + final Path dir = new Path("/test/testSeek"); + assertTrue(fs.mkdirs(dir)); + + { //test zero file size + final Path zero = new Path(dir, "zero"); + fs.create(zero).close(); + + int count = 0; + final FSDataInputStream in = fs.open(zero); + for(; in.read() != -1; count++); + in.close(); + assertEquals(0, count); + } + + final Path p = new Path(dir, "file"); createFile(p); final int one_third = data.length/3; @@ -248,7 +262,6 @@ public class TestWebHdfsFileSystemContract extends FileSystemContractBaseTest { final FSDataInputStream in = fs.open(root); in.read(); fail(); - fail(); } catch(IOException e) { WebHdfsFileSystem.LOG.info("This is expected.", e); }