You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by to...@apache.org on 2008/06/10 12:14:59 UTC

svn commit: r666056 - in /hadoop/core/trunk: CHANGES.txt src/hdfs/org/apache/hadoop/dfs/FSDirectory.java src/test/org/apache/hadoop/dfs/TestDFSRename.java src/test/org/apache/hadoop/dfs/TestHDFSFileSystemContract.java

Author: tomwhite
Date: Tue Jun 10 03:14:57 2008
New Revision: 666056

URL: http://svn.apache.org/viewvc?rev=666056&view=rev
Log:
HADOOP-3519.  Fix NPE in DFS FileSystem rename.  Contributed by hairong.

Modified:
    hadoop/core/trunk/CHANGES.txt
    hadoop/core/trunk/src/hdfs/org/apache/hadoop/dfs/FSDirectory.java
    hadoop/core/trunk/src/test/org/apache/hadoop/dfs/TestDFSRename.java
    hadoop/core/trunk/src/test/org/apache/hadoop/dfs/TestHDFSFileSystemContract.java

Modified: hadoop/core/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/CHANGES.txt?rev=666056&r1=666055&r2=666056&view=diff
==============================================================================
--- hadoop/core/trunk/CHANGES.txt (original)
+++ hadoop/core/trunk/CHANGES.txt Tue Jun 10 03:14:57 2008
@@ -558,6 +558,8 @@
 
     HADOOP-3513. Improve NNThroughputBenchmark log messages. (shv)
 
+    HADOOP-3519.  Fix NPE in DFS FileSystem rename.  (hairong via tomwhite)
+
 Release 0.17.0 - 2008-05-18
 
   INCOMPATIBLE CHANGES

Modified: hadoop/core/trunk/src/hdfs/org/apache/hadoop/dfs/FSDirectory.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/hdfs/org/apache/hadoop/dfs/FSDirectory.java?rev=666056&r1=666055&r2=666056&view=diff
==============================================================================
--- hadoop/core/trunk/src/hdfs/org/apache/hadoop/dfs/FSDirectory.java (original)
+++ hadoop/core/trunk/src/hdfs/org/apache/hadoop/dfs/FSDirectory.java Tue Jun 10 03:14:57 2008
@@ -363,10 +363,16 @@
       INode[] dstInodes = new INode[dstComponents.length];
       rootDir.getExistingPathINodes(dstComponents, dstInodes);
       
-      // check the existence of the destination
-      if (dstInodes[dstInodes.length-1] != null) {
+      // check the validity of the destination
+      if (dstInodes[dstInodes.length-1] != null) { //check if destination exists
         NameNode.stateChangeLog.warn("DIR* FSDirectory.unprotectedRenameTo: "
-                                     +"failed to rename "+src+" to "+dst+ " because destination exists");
+                                     +"failed to rename "+src+" to "+dst+ 
+                                     " because destination exists");
+        return false;
+      } else if (dstInodes[dstInodes.length-2] == null) { // check if its parent exists
+        NameNode.stateChangeLog.warn("DIR* FSDirectory.unprotectedRenameTo: "
+            +"failed to rename "+src+" to "+dst+ 
+            " because destination's parent does not exists");
         return false;
       }
       

Modified: hadoop/core/trunk/src/test/org/apache/hadoop/dfs/TestDFSRename.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/test/org/apache/hadoop/dfs/TestDFSRename.java?rev=666056&r1=666055&r2=666056&view=diff
==============================================================================
--- hadoop/core/trunk/src/test/org/apache/hadoop/dfs/TestDFSRename.java (original)
+++ hadoop/core/trunk/src/test/org/apache/hadoop/dfs/TestDFSRename.java Tue Jun 10 03:14:57 2008
@@ -71,6 +71,11 @@
       //should not have any lease
       assertEquals(0, countLease(cluster)); 
 
+      // test non-existent destination
+      Path dstPath = new Path("/c/d");
+      assertFalse(fs.exists(dstPath));
+      assertFalse(fs.rename(dir, dstPath));
+      
       fs.delete(dir, true);
     } finally {
       if (cluster != null) {cluster.shutdown();}

Modified: hadoop/core/trunk/src/test/org/apache/hadoop/dfs/TestHDFSFileSystemContract.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/test/org/apache/hadoop/dfs/TestHDFSFileSystemContract.java?rev=666056&r1=666055&r2=666056&view=diff
==============================================================================
--- hadoop/core/trunk/src/test/org/apache/hadoop/dfs/TestHDFSFileSystemContract.java (original)
+++ hadoop/core/trunk/src/test/org/apache/hadoop/dfs/TestHDFSFileSystemContract.java Tue Jun 10 03:14:57 2008
@@ -38,10 +38,4 @@
     cluster.shutdown();
   }
   
-  @Override
-  protected boolean renameSupported() {
-    // disable for the moment as rename tests are not working on HDFS yet
-    return false;
-  }
-
 }