diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index 2e9047830da..1d2a76afa19 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -904,6 +904,9 @@ Release 2.7.0 - UNRELEASED HDFS-7769. TestHDFSCLI should not create files in hdfs project root dir. (szetszwo) + HDFS-7753. Fix Multithreaded correctness Warnings in BackupImage. + (Rakesh R and shv) + Release 2.6.1 - UNRELEASED INCOMPATIBLE CHANGES diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/BackupImage.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/BackupImage.java index 1900b4082de..dc449592dee 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/BackupImage.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/BackupImage.java @@ -92,9 +92,16 @@ public class BackupImage extends FSImage { storage.setDisablePreUpgradableLayoutCheck(true); bnState = BNState.DROP_UNTIL_NEXT_ROLL; } - - void setNamesystem(FSNamesystem fsn) { - this.namesystem = fsn; + + synchronized FSNamesystem getNamesystem() { + return namesystem; + } + + synchronized void setNamesystem(FSNamesystem fsn) { + // Avoids overriding this.namesystem object + if (namesystem == null) { + this.namesystem = fsn; + } } /** @@ -195,7 +202,7 @@ public class BackupImage extends FSImage { } FSEditLogLoader logLoader = - new FSEditLogLoader(namesystem, lastAppliedTxId); + new FSEditLogLoader(getNamesystem(), lastAppliedTxId); int logVersion = storage.getLayoutVersion(); backupInputStream.setBytes(data, logVersion); @@ -209,7 +216,7 @@ public class BackupImage extends FSImage { } lastAppliedTxId = logLoader.getLastAppliedTxId(); - FSImage.updateCountForQuota(namesystem.dir.rootDir); // inefficient! + FSImage.updateCountForQuota(getNamesystem().dir.getRoot()); // inefficient! } finally { backupInputStream.clear(); } @@ -258,7 +265,7 @@ public class BackupImage extends FSImage { editStreams.add(s); } } - loadEdits(editStreams, namesystem); + loadEdits(editStreams, getNamesystem()); } // now, need to load the in-progress file @@ -293,7 +300,7 @@ public class BackupImage extends FSImage { + " txns from in-progress stream " + stream); FSEditLogLoader loader = - new FSEditLogLoader(namesystem, lastAppliedTxId); + new FSEditLogLoader(getNamesystem(), lastAppliedTxId); loader.loadFSEdits(stream, lastAppliedTxId + 1); lastAppliedTxId = loader.getLastAppliedTxId(); assert lastAppliedTxId == getEditLog().getLastWrittenTxId();