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());