Author: todd Date: Thu Feb 2 22:10:36 2012 New Revision: 1239877 URL: http://svn.apache.org/viewvc?rev=1239877&view=rev Log: HDFS-2877. If locking of a storage dir fails, it will remove the other NN's lock file on exit. Contributed by Todd Lipcon.
Modified: hadoop/common/branches/branch-1/CHANGES.txt hadoop/common/branches/branch-1/src/hdfs/org/apache/hadoop/hdfs/server/common/Storage.java Modified: hadoop/common/branches/branch-1/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-1/CHANGES.txt?rev=1239877&r1=1239876&r2=1239877&view=diff ============================================================================== --- hadoop/common/branches/branch-1/CHANGES.txt (original) +++ hadoop/common/branches/branch-1/CHANGES.txt Thu Feb 2 22:10:36 2012 @@ -89,6 +89,9 @@ Release 1.1.0 - unreleased HADOOP-7988. Upper case in hostname part of the principals doesn't work with kerberos. (jitendra) + HDFS-2877. If locking of a storage dir fails, it will remove the other + NN's lock file on exit. (todd) + IMPROVEMENTS MAPREDUCE-3597. [Rumen] Provide a way to access other info of history file Modified: hadoop/common/branches/branch-1/src/hdfs/org/apache/hadoop/hdfs/server/common/Storage.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-1/src/hdfs/org/apache/hadoop/hdfs/server/common/Storage.java?rev=1239877&r1=1239876&r2=1239877&view=diff ============================================================================== --- hadoop/common/branches/branch-1/src/hdfs/org/apache/hadoop/hdfs/server/common/Storage.java (original) +++ hadoop/common/branches/branch-1/src/hdfs/org/apache/hadoop/hdfs/server/common/Storage.java Thu Feb 2 22:10:36 2012 @@ -611,8 +611,12 @@ public abstract class Storage extends St * @throws IOException if locking fails. */ FileLock tryLock() throws IOException { + boolean deletionHookAdded = false; File lockF = new File(root, STORAGE_FILE_LOCK); - lockF.deleteOnExit(); + if (!lockF.exists()) { + lockF.deleteOnExit(); + deletionHookAdded = true; + } RandomAccessFile file = new RandomAccessFile(lockF, "rws"); FileLock res = null; try { @@ -625,6 +629,12 @@ public abstract class Storage extends St file.close(); throw e; } + if (res != null && !deletionHookAdded) { + // If the file existed prior to our startup, we didn't + // call deleteOnExit above. But since we successfully locked + // the dir, we can take care of cleaning it up. + lockF.deleteOnExit(); + } return res; }