Author: todd
Date: Fri Jul 13 05:00:47 2012
New Revision: 1361047

URL: http://svn.apache.org/viewvc?rev=1361047&view=rev
Log:
HDFS-3652. FSEditLog failure removes the wrong edit stream when storage dirs 
have same name. Contributed by Todd Lipcon.

Modified:
    hadoop/common/branches/branch-1/CHANGES.txt
    
hadoop/common/branches/branch-1/src/hdfs/org/apache/hadoop/hdfs/server/namenode/FSEditLog.java
    
hadoop/common/branches/branch-1/src/test/org/apache/hadoop/hdfs/server/namenode/TestStorageDirectoryFailure.java

Modified: hadoop/common/branches/branch-1/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/hadoop/common/branches/branch-1/CHANGES.txt?rev=1361047&r1=1361046&r2=1361047&view=diff
==============================================================================
--- hadoop/common/branches/branch-1/CHANGES.txt (original)
+++ hadoop/common/branches/branch-1/CHANGES.txt Fri Jul 13 05:00:47 2012
@@ -386,6 +386,9 @@ Release 1.0.4 - Unreleased
 
   BUG FIXES
 
+    HDFS-3652. FSEditLog failure removes the wrong edit stream when storage
+    dirs have same name. (todd)
+
 Release 1.0.3 - 2012.05.07
 
   NEW FEATURES

Modified: 
hadoop/common/branches/branch-1/src/hdfs/org/apache/hadoop/hdfs/server/namenode/FSEditLog.java
URL: 
http://svn.apache.org/viewvc/hadoop/common/branches/branch-1/src/hdfs/org/apache/hadoop/hdfs/server/namenode/FSEditLog.java?rev=1361047&r1=1361046&r2=1361047&view=diff
==============================================================================
--- 
hadoop/common/branches/branch-1/src/hdfs/org/apache/hadoop/hdfs/server/namenode/FSEditLog.java
 (original)
+++ 
hadoop/common/branches/branch-1/src/hdfs/org/apache/hadoop/hdfs/server/namenode/FSEditLog.java
 Fri Jul 13 05:00:47 2012
@@ -483,8 +483,10 @@ public class FSEditLog {
     }
     for (int idx = 0; idx < editStreams.size(); idx++) {
       File parentDir = getStorageDirForStream(idx);
-      if (parentDir.getName().equals(sd.getRoot().getName())) {
+      if (parentDir.getAbsolutePath().equals(
+            sd.getRoot().getAbsolutePath())) {
         editStreams.remove(idx);
+        idx--;
       }
     }
     exitIfNoStreams();

Modified: 
hadoop/common/branches/branch-1/src/test/org/apache/hadoop/hdfs/server/namenode/TestStorageDirectoryFailure.java
URL: 
http://svn.apache.org/viewvc/hadoop/common/branches/branch-1/src/test/org/apache/hadoop/hdfs/server/namenode/TestStorageDirectoryFailure.java?rev=1361047&r1=1361046&r2=1361047&view=diff
==============================================================================
--- 
hadoop/common/branches/branch-1/src/test/org/apache/hadoop/hdfs/server/namenode/TestStorageDirectoryFailure.java
 (original)
+++ 
hadoop/common/branches/branch-1/src/test/org/apache/hadoop/hdfs/server/namenode/TestStorageDirectoryFailure.java
 Fri Jul 13 05:00:47 2012
@@ -63,9 +63,11 @@ public class TestStorageDirectoryFailure
     String baseDir = System.getProperty("test.build.data", "/tmp");
     File dfsDir = new File(baseDir, "dfs");
     nameDirs = new ArrayList<String>();
-    nameDirs.add(new File(dfsDir, "name1").getPath());
-    nameDirs.add(new File(dfsDir, "name2").getPath());
-    nameDirs.add(new File(dfsDir, "name3").getPath());
+    // Have all the name dirs with the same filename: important for regression
+    // testing HDFS-3652.
+    nameDirs.add(new File(new File(dfsDir, "name1"), "nn").getPath());
+    nameDirs.add(new File(new File(dfsDir, "name2"), "nn").getPath());
+    nameDirs.add(new File(new File(dfsDir, "name3"), "nn").getPath());
 
     conf.set("dfs.name.dir", StringUtils.join(nameDirs, ","));
     conf.set("dfs.data.dir", new File(dfsDir, "data").getPath());


Reply via email to