You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2015/09/13 16:31:13 UTC
hbase git commit: HBASE-14423
TestStochasticBalancerJmxMetrics.testJmxMetrics_PerTableMode:183 NullPointer
Repository: hbase
Updated Branches:
refs/heads/master a9157379a -> 439ca071e
HBASE-14423 TestStochasticBalancerJmxMetrics.testJmxMetrics_PerTableMode:183 NullPointer
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/439ca071
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/439ca071
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/439ca071
Branch: refs/heads/master
Commit: 439ca071ecbbf09d80eca840d8a7279c9dde33de
Parents: a915737
Author: stack <st...@apache.org>
Authored: Sun Sep 13 07:30:51 2015 -0700
Committer: stack <st...@apache.org>
Committed: Sun Sep 13 07:30:51 2015 -0700
----------------------------------------------------------------------
.../hbase/TestStochasticBalancerJmxMetrics.java | 44 ++++++++++++++++----
1 file changed, 36 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/439ca071/hbase-server/src/test/java/org/apache/hadoop/hbase/TestStochasticBalancerJmxMetrics.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestStochasticBalancerJmxMetrics.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestStochasticBalancerJmxMetrics.java
index d343427..1f149bf 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestStochasticBalancerJmxMetrics.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestStochasticBalancerJmxMetrics.java
@@ -20,8 +20,10 @@ package org.apache.hadoop.hbase;
import static org.junit.Assert.assertTrue;
+import java.io.IOException;
import java.util.HashSet;
import java.util.Hashtable;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Random;
@@ -30,6 +32,7 @@ import java.util.Set;
import javax.management.MBeanAttributeInfo;
import javax.management.MBeanInfo;
import javax.management.MBeanServerConnection;
+import javax.management.ObjectInstance;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
@@ -42,6 +45,7 @@ import org.apache.hadoop.hbase.master.balancer.BalancerTestBase;
import org.apache.hadoop.hbase.master.balancer.StochasticLoadBalancer;
import org.apache.hadoop.hbase.testclassification.MediumTests;
import org.apache.hadoop.hbase.testclassification.MiscTests;
+import org.apache.hadoop.hbase.util.Threads;
import org.apache.hadoop.net.DNSToSwitchMapping;
import org.junit.AfterClass;
import org.junit.BeforeClass;
@@ -114,7 +118,7 @@ public class TestStochasticBalancerJmxMetrics extends BalancerTestBase {
/**
* In Ensemble mode, there should be only one ensemble table
*/
- @Test
+ @Test (timeout=60000)
public void testJmxMetrics_EnsembleMode() throws Exception {
loadBalancer = new StochasticLoadBalancer();
@@ -127,7 +131,7 @@ public class TestStochasticBalancerJmxMetrics extends BalancerTestBase {
String[] tableNames = new String[] { tableName.getNameAsString() };
String[] functionNames = loadBalancer.getCostFunctionNames();
- Set<String> jmxMetrics = readJmxMetrics();
+ Set<String> jmxMetrics = readJmxMetricsWithRetry();
Set<String> expectedMetrics = getExpectedJmxMetrics(tableNames, functionNames);
// printMetrics(jmxMetrics, "existing metrics in ensemble mode");
@@ -143,7 +147,7 @@ public class TestStochasticBalancerJmxMetrics extends BalancerTestBase {
/**
* In per-table mode, each table has a set of metrics
*/
- @Test
+ @Test (timeout=60000)
public void testJmxMetrics_PerTableMode() throws Exception {
loadBalancer = new StochasticLoadBalancer();
@@ -172,7 +176,7 @@ public class TestStochasticBalancerJmxMetrics extends BalancerTestBase {
loadBalancer.balanceCluster(tableName, clusterState);
String[] tableNames = new String[] { TABLE_NAME_1, TABLE_NAME_2, TABLE_NAME_NAMESPACE };
- Set<String> jmxMetrics = readJmxMetrics();
+ Set<String> jmxMetrics = readJmxMetricsWithRetry();
Set<String> expectedMetrics = getExpectedJmxMetrics(tableNames, functionNames);
// printMetrics(jmxMetrics, "existing metrics in per-table mode");
@@ -185,21 +189,35 @@ public class TestStochasticBalancerJmxMetrics extends BalancerTestBase {
}
}
+ private Set<String> readJmxMetricsWithRetry() throws IOException {
+ final int count = 0;
+ for (int i = 0; i < 10; i++) {
+ Set<String> metrics = readJmxMetrics();
+ if (metrics != null) return metrics;
+ LOG.warn("Failed to get jmxmetrics... sleeping, retrying; " + i + " of " + count + " times");
+ Threads.sleep(1000);
+ }
+ return null;
+ }
+
/**
* Read the attributes from Hadoop->HBase->Master->Balancer in JMX
+ * @throws IOException
*/
- private Set<String> readJmxMetrics() {
+ private Set<String> readJmxMetrics() throws IOException {
JMXConnector connector = null;
+ ObjectName target = null;
+ MBeanServerConnection mb = null;
try {
connector =
JMXConnectorFactory.connect(JMXListener.buildJMXServiceURL(connectorPort, connectorPort));
- MBeanServerConnection mb = connector.getMBeanServerConnection();
+ mb = connector.getMBeanServerConnection();
Hashtable<String, String> pairs = new Hashtable<>();
pairs.put("service", "HBase");
pairs.put("name", "Master");
pairs.put("sub", "Balancer");
- ObjectName target = new ObjectName("Hadoop", pairs);
+ target = new ObjectName("Hadoop", pairs);
MBeanInfo beanInfo = mb.getMBeanInfo(target);
Set<String> existingAttrs = new HashSet<String>();
@@ -208,7 +226,17 @@ public class TestStochasticBalancerJmxMetrics extends BalancerTestBase {
}
return existingAttrs;
} catch (Exception e) {
- e.printStackTrace();
+ LOG.warn("Failed to get bean!!! " + target, e);
+ if (mb != null) {
+ Set<ObjectInstance> instances = mb.queryMBeans(null, null);
+ Iterator<ObjectInstance> iterator = instances.iterator();
+ System.out.println("MBean Found:");
+ while (iterator.hasNext()) {
+ ObjectInstance instance = iterator.next();
+ System.out.println("Class Name: " + instance.getClassName());
+ System.out.println("Object Name: " + instance.getObjectName());
+ }
+ }
} finally {
if (connector != null) {
try {