Ver código fonte

HDFS-16244.Add the necessary write lock in Checkpointer#doCheckpoint(). (#3497)

jianghuazhu 3 anos atrás
pai
commit
ff24fe6197

+ 8 - 3
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/Checkpointer.java

@@ -244,9 +244,14 @@ class Checkpointer extends Daemon {
 
 
       if(needReloadImage) {
       if(needReloadImage) {
         LOG.info("Loading image with txid " + sig.mostRecentCheckpointTxId);
         LOG.info("Loading image with txid " + sig.mostRecentCheckpointTxId);
-        File file = bnStorage.findImageFile(NameNodeFile.IMAGE,
-            sig.mostRecentCheckpointTxId);
-        bnImage.reloadFromImageFile(file, backupNode.getNamesystem());
+        backupNode.namesystem.writeLock();
+        try {
+          File file = bnStorage.findImageFile(NameNodeFile.IMAGE,
+              sig.mostRecentCheckpointTxId);
+          bnImage.reloadFromImageFile(file, backupNode.getNamesystem());
+        } finally {
+          backupNode.namesystem.writeUnlock();
+        }
       }
       }
       rollForwardByApplyingLogs(manifest, bnImage, backupNode.getNamesystem());
       rollForwardByApplyingLogs(manifest, bnImage, backupNode.getNamesystem());
     }
     }