You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by zh...@apache.org on 2015/01/12 19:19:06 UTC

[24/34] hadoop git commit: HDFS-7182. JMX metrics aren't accessible when NN is busy. Contributed by Ming Ma.

HDFS-7182. JMX metrics aren't accessible when NN is busy. Contributed by Ming Ma.


Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/4febc247
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/4febc247
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/4febc247

Branch: refs/heads/HDFS-EC
Commit: 4febc2479143aa55994daf15188de3c2324bd721
Parents: 63947cc
Author: Jing Zhao <ji...@apache.org>
Authored: Fri Jan 9 17:35:57 2015 -0800
Committer: Zhe Zhang <zh...@apache.org>
Committed: Mon Jan 12 10:18:02 2015 -0800

----------------------------------------------------------------------
 hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt     |  2 +
 .../hdfs/server/namenode/FSNamesystem.java      | 15 ++---
 .../server/namenode/TestFSNamesystemMBean.java  | 71 +++++---------------
 3 files changed, 25 insertions(+), 63 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hadoop/blob/4febc247/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
index b9704a2..c8500a4 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
+++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
@@ -485,6 +485,8 @@ Release 2.7.0 - UNRELEASED
     HADOOP-11470. Remove some uses of obsolete guava APIs from the hadoop
     codebase. (Sangjin Lee via Colin P. McCabe)
 
+    HDFS-7182. JMX metrics aren't accessible when NN is busy. (Ming Ma via jing9)
+
   OPTIMIZATIONS
 
     HDFS-7454. Reduce memory footprint for AclEntries in NameNode.

http://git-wip-us.apache.org/repos/asf/hadoop/blob/4febc247/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
----------------------------------------------------------------------
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 0e25189..36a4334 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
@@ -422,7 +422,7 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean,
 
   private String nameserviceId;
 
-  private RollingUpgradeInfo rollingUpgradeInfo = null;
+  private volatile RollingUpgradeInfo rollingUpgradeInfo = null;
   /**
    * A flag that indicates whether the checkpointer should checkpoint a rollback
    * fsimage. The edit log tailer sets this flag. The checkpoint will create a
@@ -7236,16 +7236,11 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean,
 
   @Override  // NameNodeMXBean
   public RollingUpgradeInfo.Bean getRollingUpgradeStatus() {
-    readLock();
-    try {
-      RollingUpgradeInfo upgradeInfo = getRollingUpgradeInfo();
-      if (upgradeInfo != null) {
-        return new RollingUpgradeInfo.Bean(upgradeInfo);
-      }
-      return null;
-    } finally {
-      readUnlock();
+    RollingUpgradeInfo upgradeInfo = getRollingUpgradeInfo();
+    if (upgradeInfo != null) {
+      return new RollingUpgradeInfo.Bean(upgradeInfo);
     }
+    return null;
   }
 
   /** Is rolling upgrade in progress? */

http://git-wip-us.apache.org/repos/asf/hadoop/blob/4febc247/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestFSNamesystemMBean.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestFSNamesystemMBean.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestFSNamesystemMBean.java
index 3703c2d..c044fb0 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestFSNamesystemMBean.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestFSNamesystemMBean.java
@@ -17,11 +17,16 @@
  */
 package org.apache.hadoop.hdfs.server.namenode;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertNotNull;
 
 import java.lang.management.ManagementFactory;
+import java.util.HashSet;
 import java.util.Map;
+import java.util.Set;
 
+import javax.management.MBeanAttributeInfo;
+import javax.management.MBeanInfo;
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
@@ -51,68 +56,28 @@ public class TestFSNamesystemMBean {
         // come from hadoop metrics framework for the class FSNamesystem.
         ObjectName mxbeanNamefsn = new ObjectName(
             "Hadoop:service=NameNode,name=FSNamesystem");
-        Integer blockCapacity = (Integer) (mbs.getAttribute(mxbeanNamefsn,
-            "BlockCapacity"));
 
         // Metrics that belong to "FSNamesystemState".
         // These are metrics that FSNamesystem registers directly with MBeanServer.
         ObjectName mxbeanNameFsns = new ObjectName(
             "Hadoop:service=NameNode,name=FSNamesystemState");
-        String FSState = (String) (mbs.getAttribute(mxbeanNameFsns,
-            "FSState"));
-        Long blocksTotal = (Long) (mbs.getAttribute(mxbeanNameFsns,
-            "BlocksTotal"));
-        Long capacityTotal = (Long) (mbs.getAttribute(mxbeanNameFsns,
-            "CapacityTotal"));
-        Long capacityRemaining = (Long) (mbs.getAttribute(mxbeanNameFsns,
-            "CapacityRemaining"));
-        Long capacityUsed = (Long) (mbs.getAttribute(mxbeanNameFsns,
-            "CapacityUsed"));
-        Long filesTotal = (Long) (mbs.getAttribute(mxbeanNameFsns,
-            "FilesTotal"));
-        Long pendingReplicationBlocks = (Long) (mbs.getAttribute(mxbeanNameFsns,
-            "PendingReplicationBlocks"));
-        Long underReplicatedBlocks = (Long) (mbs.getAttribute(mxbeanNameFsns,
-            "UnderReplicatedBlocks"));
-        Long scheduledReplicationBlocks = (Long) (mbs.getAttribute(mxbeanNameFsns,
-            "ScheduledReplicationBlocks"));
-        Integer totalLoad = (Integer) (mbs.getAttribute(mxbeanNameFsns,
-            "TotalLoad"));
-        Integer numLiveDataNodes = (Integer) (mbs.getAttribute(mxbeanNameFsns,
-            "NumLiveDataNodes"));
-        Integer numDeadDataNodes = (Integer) (mbs.getAttribute(mxbeanNameFsns,
-           "NumDeadDataNodes"));
-        Integer numStaleDataNodes = (Integer) (mbs.getAttribute(mxbeanNameFsns,
-            "NumStaleDataNodes"));
-        Integer numDecomLiveDataNodes = (Integer) (mbs.getAttribute(mxbeanNameFsns,
-            "NumDecomLiveDataNodes"));
-        Integer numDecomDeadDataNodes = (Integer) (mbs.getAttribute(mxbeanNameFsns,
-            "NumDecomDeadDataNodes"));
-        Integer numDecommissioningDataNodes = (Integer) (mbs.getAttribute(mxbeanNameFsns,
-            "NumDecommissioningDataNodes"));
-        String snapshotStats = (String) (mbs.getAttribute(mxbeanNameFsns,
-            "SnapshotStats"));
-        Long MaxObjects = (Long) (mbs.getAttribute(mxbeanNameFsns,
-            "MaxObjects"));
-        Integer numStaleStorages = (Integer) (mbs.getAttribute(
-            mxbeanNameFsns, "NumStaleStorages"));
-        String topUsers =
-            (String) (mbs.getAttribute(mxbeanNameFsns, "TopUserOpCounts"));
 
         // Metrics that belong to "NameNodeInfo".
         // These are metrics that FSNamesystem registers directly with MBeanServer.
         ObjectName mxbeanNameNni = new ObjectName(
             "Hadoop:service=NameNode,name=NameNodeInfo");
-        String safemode = (String) (mbs.getAttribute(mxbeanNameNni,
-            "Safemode"));
-        String liveNodes = (String) (mbs.getAttribute(mxbeanNameNni,
-            "LiveNodes"));
-        String deadNodes = (String) (mbs.getAttribute(mxbeanNameNni,
-            "DeadNodes"));
-        String decomNodes = (String) (mbs.getAttribute(mxbeanNameNni,
-            "DecomNodes"));
-        String corruptFiles = (String) (mbs.getAttribute(mxbeanNameNni,
-            "CorruptFiles"));
+
+        final Set<ObjectName> mbeans = new HashSet<ObjectName>();
+        mbeans.add(mxbeanNamefsn);
+        mbeans.add(mxbeanNameFsns);
+        mbeans.add(mxbeanNameNni);
+
+        for(ObjectName mbean : mbeans) {
+          MBeanInfo attributes = mbs.getMBeanInfo(mbean);
+          for (MBeanAttributeInfo attributeInfo : attributes.getAttributes()) {
+            mbs.getAttribute(mbean, attributeInfo.getName());
+          }
+        }
 
         succeeded = true;
       } catch (Exception e) {