HDFS-7182. JMX metrics aren't accessible when NN is busy. Contributed by Ming Ma.
This commit is contained in:
parent
09d31bc630
commit
2a06101e61
|
@ -485,6 +485,8 @@ Release 2.7.0 - UNRELEASED
|
||||||
HADOOP-11470. Remove some uses of obsolete guava APIs from the hadoop
|
HADOOP-11470. Remove some uses of obsolete guava APIs from the hadoop
|
||||||
codebase. (Sangjin Lee via Colin P. McCabe)
|
codebase. (Sangjin Lee via Colin P. McCabe)
|
||||||
|
|
||||||
|
HDFS-7182. JMX metrics aren't accessible when NN is busy. (Ming Ma via jing9)
|
||||||
|
|
||||||
OPTIMIZATIONS
|
OPTIMIZATIONS
|
||||||
|
|
||||||
HDFS-7454. Reduce memory footprint for AclEntries in NameNode.
|
HDFS-7454. Reduce memory footprint for AclEntries in NameNode.
|
||||||
|
|
|
@ -422,7 +422,7 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean,
|
||||||
|
|
||||||
private String nameserviceId;
|
private String nameserviceId;
|
||||||
|
|
||||||
private RollingUpgradeInfo rollingUpgradeInfo = null;
|
private volatile RollingUpgradeInfo rollingUpgradeInfo = null;
|
||||||
/**
|
/**
|
||||||
* A flag that indicates whether the checkpointer should checkpoint a rollback
|
* A flag that indicates whether the checkpointer should checkpoint a rollback
|
||||||
* fsimage. The edit log tailer sets this flag. The checkpoint will create a
|
* 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
|
@Override // NameNodeMXBean
|
||||||
public RollingUpgradeInfo.Bean getRollingUpgradeStatus() {
|
public RollingUpgradeInfo.Bean getRollingUpgradeStatus() {
|
||||||
readLock();
|
RollingUpgradeInfo upgradeInfo = getRollingUpgradeInfo();
|
||||||
try {
|
if (upgradeInfo != null) {
|
||||||
RollingUpgradeInfo upgradeInfo = getRollingUpgradeInfo();
|
return new RollingUpgradeInfo.Bean(upgradeInfo);
|
||||||
if (upgradeInfo != null) {
|
|
||||||
return new RollingUpgradeInfo.Bean(upgradeInfo);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
} finally {
|
|
||||||
readUnlock();
|
|
||||||
}
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Is rolling upgrade in progress? */
|
/** Is rolling upgrade in progress? */
|
||||||
|
|
|
@ -17,11 +17,16 @@
|
||||||
*/
|
*/
|
||||||
package org.apache.hadoop.hdfs.server.namenode;
|
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.lang.management.ManagementFactory;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import javax.management.MBeanAttributeInfo;
|
||||||
|
import javax.management.MBeanInfo;
|
||||||
import javax.management.MBeanServer;
|
import javax.management.MBeanServer;
|
||||||
import javax.management.ObjectName;
|
import javax.management.ObjectName;
|
||||||
|
|
||||||
|
@ -51,68 +56,28 @@ public class TestFSNamesystemMBean {
|
||||||
// come from hadoop metrics framework for the class FSNamesystem.
|
// come from hadoop metrics framework for the class FSNamesystem.
|
||||||
ObjectName mxbeanNamefsn = new ObjectName(
|
ObjectName mxbeanNamefsn = new ObjectName(
|
||||||
"Hadoop:service=NameNode,name=FSNamesystem");
|
"Hadoop:service=NameNode,name=FSNamesystem");
|
||||||
Integer blockCapacity = (Integer) (mbs.getAttribute(mxbeanNamefsn,
|
|
||||||
"BlockCapacity"));
|
|
||||||
|
|
||||||
// Metrics that belong to "FSNamesystemState".
|
// Metrics that belong to "FSNamesystemState".
|
||||||
// These are metrics that FSNamesystem registers directly with MBeanServer.
|
// These are metrics that FSNamesystem registers directly with MBeanServer.
|
||||||
ObjectName mxbeanNameFsns = new ObjectName(
|
ObjectName mxbeanNameFsns = new ObjectName(
|
||||||
"Hadoop:service=NameNode,name=FSNamesystemState");
|
"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".
|
// Metrics that belong to "NameNodeInfo".
|
||||||
// These are metrics that FSNamesystem registers directly with MBeanServer.
|
// These are metrics that FSNamesystem registers directly with MBeanServer.
|
||||||
ObjectName mxbeanNameNni = new ObjectName(
|
ObjectName mxbeanNameNni = new ObjectName(
|
||||||
"Hadoop:service=NameNode,name=NameNodeInfo");
|
"Hadoop:service=NameNode,name=NameNodeInfo");
|
||||||
String safemode = (String) (mbs.getAttribute(mxbeanNameNni,
|
|
||||||
"Safemode"));
|
final Set<ObjectName> mbeans = new HashSet<ObjectName>();
|
||||||
String liveNodes = (String) (mbs.getAttribute(mxbeanNameNni,
|
mbeans.add(mxbeanNamefsn);
|
||||||
"LiveNodes"));
|
mbeans.add(mxbeanNameFsns);
|
||||||
String deadNodes = (String) (mbs.getAttribute(mxbeanNameNni,
|
mbeans.add(mxbeanNameNni);
|
||||||
"DeadNodes"));
|
|
||||||
String decomNodes = (String) (mbs.getAttribute(mxbeanNameNni,
|
for(ObjectName mbean : mbeans) {
|
||||||
"DecomNodes"));
|
MBeanInfo attributes = mbs.getMBeanInfo(mbean);
|
||||||
String corruptFiles = (String) (mbs.getAttribute(mxbeanNameNni,
|
for (MBeanAttributeInfo attributeInfo : attributes.getAttributes()) {
|
||||||
"CorruptFiles"));
|
mbs.getAttribute(mbean, attributeInfo.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
succeeded = true;
|
succeeded = true;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|
Loading…
Reference in New Issue