HDFS-7182. JMX metrics aren't accessible when NN is busy. Contributed by Ming Ma.
This commit is contained in:
parent
d847363821
commit
4b589e7cfa
|
@ -228,6 +228,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.
|
||||
|
|
|
@ -410,7 +410,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
|
||||
|
@ -7235,16 +7235,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();
|
||||
}
|
||||
}
|
||||
|
||||
/** Is rolling upgrade in progress? */
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue