Browse Source

svn merge -c 1301287 from trunk for HDFS-3101.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.23.2@1301289 13f79535-47bb-0310-9956-ffa450edef68
Tsz-wo Sze 13 years ago
parent
commit
aaf5eef4c3

+ 2 - 0
hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt

@@ -81,6 +81,8 @@ Release 0.23.2 - UNRELEASED
     HDFS-2038. Update TestHDFSCLI to handle relative paths with globs.
     HDFS-2038. Update TestHDFSCLI to handle relative paths with globs.
     (Kihwal Lee via szetszwo)
     (Kihwal Lee via szetszwo)
 
 
+    HDFS-3101. Cannot read empty file using WebHDFS.  (szetszwo)
+
 Release 0.23.1 - 2012-02-17 
 Release 0.23.1 - 2012-02-17 
 
 
   INCOMPATIBLE CHANGES
   INCOMPATIBLE CHANGES

+ 5 - 3
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.");
         throw new FileNotFoundException("File " + path + " not found.");
       }
       }
       final long len = status.getLen();
       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) {
       if (len > 0) {

+ 15 - 2
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 {
   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);
     createFile(p);
 
 
     final int one_third = data.length/3;
     final int one_third = data.length/3;
@@ -248,7 +262,6 @@ public class TestWebHdfsFileSystemContract extends FileSystemContractBaseTest {
       final FSDataInputStream in = fs.open(root);
       final FSDataInputStream in = fs.open(root);
       in.read();
       in.read();
       fail();
       fail();
-      fail();
     } catch(IOException e) {
     } catch(IOException e) {
       WebHdfsFileSystem.LOG.info("This is expected.", e);
       WebHdfsFileSystem.LOG.info("This is expected.", e);
     }
     }