From 3b00eaea256d252be3361a7d9106b88756fcb9ba Mon Sep 17 00:00:00 2001 From: Xiaoyu Yao Date: Mon, 24 Aug 2015 16:56:24 -0700 Subject: [PATCH] HDFS-8932. NPE thrown in NameNode when try to get TotalSyncCount metric before editLogStream initialization. Contributed by Surendra Singh Lilhore --- hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 3 +++ .../hadoop/hdfs/server/namenode/FSEditLog.java | 12 ++++++++---- .../hadoop/hdfs/server/namenode/FSNamesystem.java | 7 ++++++- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index 18443570169..7aadcc60337 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/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 diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLog.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLog.java index b1960d94305..faaea633448 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLog.java +++ b/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; + } } } diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java index 6baa70fcc44..3c3ef0b9797 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java +++ b/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 ""; + } } }