Return-Path: X-Original-To: apmail-hadoop-common-commits-archive@www.apache.org Delivered-To: apmail-hadoop-common-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 5415C17611 for ; Mon, 12 Jan 2015 18:18:52 +0000 (UTC) Received: (qmail 24021 invoked by uid 500); 12 Jan 2015 18:18:44 -0000 Delivered-To: apmail-hadoop-common-commits-archive@hadoop.apache.org Received: (qmail 23664 invoked by uid 500); 12 Jan 2015 18:18:44 -0000 Mailing-List: contact common-commits-help@hadoop.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: common-dev@hadoop.apache.org Delivered-To: mailing list common-commits@hadoop.apache.org Received: (qmail 22608 invoked by uid 99); 12 Jan 2015 18:18:44 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 12 Jan 2015 18:18:44 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id E4463A01B3B; Mon, 12 Jan 2015 18:18:43 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: zhz@apache.org To: common-commits@hadoop.apache.org Date: Mon, 12 Jan 2015 18:19:06 -0000 Message-Id: <97bd02ea6c0647518d59e0d9931247be@git.apache.org> In-Reply-To: <80fa67df918545d79e507e849c37bdb8@git.apache.org> References: <80fa67df918545d79e507e849c37bdb8@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [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 Authored: Fri Jan 9 17:35:57 2015 -0800 Committer: Zhe Zhang 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 mbeans = new HashSet(); + 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) {