Prechádzať zdrojové kódy

HDFS-8932. NPE thrown in NameNode when try to get TotalSyncCount metric before editLogStream initialization. Contributed by Surendra Singh Lilhore

Xiaoyu Yao 9 rokov pred
rodič
commit
3b00eaea25

+ 3 - 0
hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt

@@ -1211,6 +1211,9 @@ Release 2.8.0 - UNRELEASED
     HDFS-8948. Use GenericTestUtils to set log levels in TestPread and
     TestReplaceDatanodeOnFailure. (Mingliang Liu via wheat9)
 
+    HDFS-8932. NPE thrown in NameNode when try to get TotalSyncCount metric
+    before editLogStream initialization. (Surendra Singh Lilhore via xyao)
+
 Release 2.7.2 - UNRELEASED
 
   INCOMPATIBLE CHANGES

+ 8 - 4
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLog.java

@@ -1692,10 +1692,14 @@ public class FSEditLog implements LogsPurgeable {
   }
 
   /**
-   +   * Return total number of syncs happened on this edit log.
-   +   * @return long - count
-   +   */
+   * Return total number of syncs happened on this edit log.
+   * @return long - count
+   */
   public long getTotalSyncCount() {
-    return editLogStream.getNumSync();
+    if (editLogStream != null) {
+      return editLogStream.getNumSync();
+    } else {
+      return 0;
+    }
   }
 }

+ 6 - 1
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java

@@ -7295,7 +7295,12 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean,
   @Metric({"TotalSyncTimes",
               "Total time spend in sync operation on various edit logs"})
   public String getTotalSyncTimes() {
-    return fsImage.editLog.getJournalSet().getSyncTimes();
+    JournalSet journalSet = fsImage.editLog.getJournalSet();
+    if (journalSet != null) {
+      return journalSet.getSyncTimes();
+    } else {
+      return "";
+    }
   }
 }