Forráskód Böngészése

HDFS-14537. Journaled Edits Cache is not cleared when formatting the JN. Contributed by Ranith Sardar.

Wei-Chiu Chuang 6 éve
szülő
commit
b5303012a0

+ 16 - 8
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/server/Journal.java

@@ -139,12 +139,14 @@ public class Journal implements Closeable {
   
   private final FileJournalManager fjm;
 
-  private final JournaledEditsCache cache;
+  private JournaledEditsCache cache;
 
   private final JournalMetrics metrics;
 
   private long lastJournalTimestamp = 0;
 
+  private Configuration conf = null;
+
   // This variable tracks, have we tried to start journalsyncer
   // with nameServiceId. This will help not to start the journalsyncer
   // on each rpc call, if it has failed to start
@@ -158,6 +160,7 @@ public class Journal implements Closeable {
   Journal(Configuration conf, File logDir, String journalId,
       StartupOption startOpt, StorageErrorReporter errorReporter)
       throws IOException {
+    this.conf = conf;
     storage = new JNStorage(conf, logDir, startOpt, errorReporter);
     this.journalId = journalId;
 
@@ -165,13 +168,8 @@ public class Journal implements Closeable {
     
     this.fjm = storage.getJournalManager();
 
-    if (conf.getBoolean(DFSConfigKeys.DFS_HA_TAILEDITS_INPROGRESS_KEY,
-        DFSConfigKeys.DFS_HA_TAILEDITS_INPROGRESS_DEFAULT)) {
-      this.cache = new JournaledEditsCache(conf);
-    } else {
-      this.cache = null;
-    }
-    
+    this.cache = createCache();
+
     this.metrics = JournalMetrics.create(this);
     
     EditLogFile latest = scanStorageForLatestEdits();
@@ -180,6 +178,15 @@ public class Journal implements Closeable {
     }
   }
 
+  private JournaledEditsCache createCache() {
+    if (conf.getBoolean(DFSConfigKeys.DFS_HA_TAILEDITS_INPROGRESS_KEY,
+        DFSConfigKeys.DFS_HA_TAILEDITS_INPROGRESS_DEFAULT)) {
+      return new JournaledEditsCache(conf);
+    } else {
+      return null;
+    }
+  }
+
   public void setTriedJournalSyncerStartedwithnsId(boolean started) {
     this.triedJournalSyncerStartedwithnsId = started;
   }
@@ -249,6 +256,7 @@ public class Journal implements Closeable {
     LOG.info("Formatting journal id : " + journalId + " with namespace info: " +
         nsInfo);
     storage.format(nsInfo);
+    this.cache = createCache();
     refreshCachedData();
   }