Author: jing9 Date: Fri Apr 11 16:42:46 2014 New Revision: 1586714 URL: http://svn.apache.org/r1586714 Log: HDFS-6229. Race condition in failover can cause RetryCache fail to work. Contributed by Jing Zhao.
Modified: hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java Modified: hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt?rev=1586714&r1=1586713&r2=1586714&view=diff ============================================================================== --- hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt (original) +++ hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt Fri Apr 11 16:42:46 2014 @@ -381,6 +381,9 @@ Release 2.4.1 - UNRELEASED HDFS-6235. TestFileJournalManager can fail on Windows due to file locking if tests run out of order. (cnauroth) + HDFS-6229. Race condition in failover can cause RetryCache fail to work. + (jing9) + Release 2.4.0 - 2014-04-07 INCOMPATIBLE CHANGES Modified: hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java?rev=1586714&r1=1586713&r2=1586714&view=diff ============================================================================== --- hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java (original) +++ hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java Fri Apr 11 16:42:46 2014 @@ -805,7 +805,19 @@ public class FSNamesystem implements Nam public RetryCache getRetryCache() { return retryCache; } - + + void lockRetryCache() { + if (retryCache != null) { + retryCache.lock(); + } + } + + void unlockRetryCache() { + if (retryCache != null) { + retryCache.unlock(); + } + } + /** Whether or not retry cache is enabled */ boolean hasRetryCache() { return retryCache != null; @@ -6934,8 +6946,8 @@ public class FSNamesystem implements Nam if (cacheEntry != null && cacheEntry.isSuccess()) { return (String) cacheEntry.getPayload(); } - writeLock(); String snapshotPath = null; + writeLock(); try { checkOperation(OperationCategory.WRITE); checkNameNodeSafeMode("Cannot create snapshot for " + snapshotRoot); Modified: hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java?rev=1586714&r1=1586713&r2=1586714&view=diff ============================================================================== --- hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java (original) +++ hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java Fri Apr 11 16:42:46 2014 @@ -1574,10 +1574,12 @@ public class NameNode implements NameNod @Override public void writeLock() { namesystem.writeLock(); + namesystem.lockRetryCache(); } @Override public void writeUnlock() { + namesystem.unlockRetryCache(); namesystem.writeUnlock(); }