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 cn...@apache.org on 2015/01/13 18:50:31 UTC
[30/50] [abbrv] 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/2a06101e
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/2a06101e
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/2a06101e
Branch: refs/heads/HDFS-6994
Commit: 2a06101e61f2f7a08913c2367d9dbefb910e64a7
Parents: 09d31bc
Author: Jing Zhao <ji...@apache.org>
Authored: Fri Jan 9 17:35:57 2015 -0800
Committer: Jing Zhao <ji...@apache.org>
Committed: Fri Jan 9 17:35:57 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/2a06101e/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/2a06101e/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/2a06101e/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) {