diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index 4c9dbafe05..a11371aa3a 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -751,6 +751,9 @@ Release 2.6.0 - UNRELEASED HDFS-6776. Using distcp to copy data between insecure and secure cluster via webdhfs doesn't work. (yzhangal via tucu) + HDFS-7042. Upgrade fails for Windows HA cluster due to file locks held during + rename in JournalNode. (cnauroth) + Release 2.5.1 - UNRELEASED INCOMPATIBLE CHANGES diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/server/Journal.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/server/Journal.java index b36e547056..c79e269b17 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/server/Journal.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/server/Journal.java @@ -988,6 +988,9 @@ public class Journal implements Closeable { } public synchronized void doPreUpgrade() throws IOException { + // Do not hold file lock on committedTxnId, because the containing + // directory will be renamed. It will be reopened lazily on next access. + committedTxnId.close(); storage.getJournalManager().doPreUpgrade(); } @@ -1037,7 +1040,10 @@ public class Journal implements Closeable { targetLayoutVersion); } - public void doRollback() throws IOException { + public synchronized void doRollback() throws IOException { + // Do not hold file lock on committedTxnId, because the containing + // directory will be renamed. It will be reopened lazily on next access. + committedTxnId.close(); storage.getJournalManager().doRollback(); } diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/util/BestEffortLongFile.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/util/BestEffortLongFile.java index b2626e9d18..2fdf5472be 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/util/BestEffortLongFile.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/util/BestEffortLongFile.java @@ -112,6 +112,7 @@ public class BestEffortLongFile implements Closeable { public void close() throws IOException { if (ch != null) { ch.close(); + ch = null; } } }