You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ap...@apache.org on 2018/12/14 00:15:15 UTC
[47/50] [abbrv] hbase git commit: HBASE-20857 balancer status tag in
jmx metrics
HBASE-20857 balancer status tag in jmx metrics
Signed-off-by: Andrew Purtell <ap...@apache.org>
Amending-Author: Andrew Purtell <ap...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/10c4f59e
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/10c4f59e
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/10c4f59e
Branch: refs/heads/branch-1.3
Commit: 10c4f59eca5c8b6e037e5551388e19928cd20fce
Parents: 785e21f
Author: Kiran Kumar Maturi <ma...@gmail.com>
Authored: Tue Sep 18 09:45:26 2018 +0530
Committer: Andrew Purtell <ap...@apache.org>
Committed: Wed Dec 12 19:25:56 2018 -0800
----------------------------------------------------------------------
.../master/balancer/MetricsBalancerSource.java | 3 +
.../balancer/MetricsBalancerSourceImpl.java | 7 +-
.../org/apache/hadoop/hbase/master/HMaster.java | 5 +
.../hadoop/hbase/master/LoadBalancer.java | 3 +
.../hadoop/hbase/master/MasterRpcServices.java | 1 +
.../hadoop/hbase/master/MasterServices.java | 5 +
.../hbase/master/balancer/BaseLoadBalancer.java | 7 ++
.../hbase/master/balancer/MetricsBalancer.java | 4 +
.../balancer/MetricsStochasticBalancer.java | 8 ++
.../hbase/master/MockNoopMasterServices.java | 5 +
.../hadoop/hbase/master/TestCatalogJanitor.java | 5 +
.../TestBalancerStatusTagInJMXMetrics.java | 108 +++++++++++++++++++
12 files changed, 160 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/10c4f59e/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/master/balancer/MetricsBalancerSource.java
----------------------------------------------------------------------
diff --git a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/master/balancer/MetricsBalancerSource.java b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/master/balancer/MetricsBalancerSource.java
index 1c9a61e..f9cc62b 100644
--- a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/master/balancer/MetricsBalancerSource.java
+++ b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/master/balancer/MetricsBalancerSource.java
@@ -39,6 +39,7 @@ public interface MetricsBalancerSource extends BaseSource {
String BALANCE_CLUSTER = "balancerCluster";
String MISC_INVOATION_COUNT = "miscInvocationCount";
+ String BALANCER_STATUS = "isBalancerActive";
/**
* Description
@@ -48,4 +49,6 @@ public interface MetricsBalancerSource extends BaseSource {
void updateBalanceCluster(long time);
void incrMiscInvocations();
+
+ void updateBalancerStatus(boolean status);
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/10c4f59e/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/master/balancer/MetricsBalancerSourceImpl.java
----------------------------------------------------------------------
diff --git a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/master/balancer/MetricsBalancerSourceImpl.java b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/master/balancer/MetricsBalancerSourceImpl.java
index 0a74630..de904d4 100644
--- a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/master/balancer/MetricsBalancerSourceImpl.java
+++ b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/master/balancer/MetricsBalancerSourceImpl.java
@@ -37,6 +37,7 @@ public class MetricsBalancerSourceImpl extends BaseSourceImpl implements Metrics
String metricsDescription,
String metricsContext, String metricsJmxContext) {
super(metricsName, metricsDescription, metricsContext, metricsJmxContext);
+ updateBalancerStatus(true);
}
@@ -44,7 +45,6 @@ public class MetricsBalancerSourceImpl extends BaseSourceImpl implements Metrics
public void init() {
blanceClusterHisto = metricsRegistry.newTimeHistogram(BALANCE_CLUSTER);
miscCount = metricsRegistry.newCounter(MISC_INVOATION_COUNT, "", 0L);
-
}
@Override
@@ -56,4 +56,9 @@ public class MetricsBalancerSourceImpl extends BaseSourceImpl implements Metrics
public void incrMiscInvocations() {
miscCount.incr();
}
+
+ @Override
+ public void updateBalancerStatus(boolean status) {
+ metricsRegistry.tag(BALANCER_STATUS,"", String.valueOf(status), true);
+ }
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/10c4f59e/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
index 74e1500..e1f7ad1 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
@@ -2427,6 +2427,11 @@ public class HMaster extends HRegionServer implements MasterServices, Server {
}
@Override
+ public LoadBalancer getLoadBalancer() {
+ return balancer;
+ }
+
+ @Override
public ServerName getServerName() {
return this.serverName;
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/10c4f59e/hbase-server/src/main/java/org/apache/hadoop/hbase/master/LoadBalancer.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/LoadBalancer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/LoadBalancer.java
index 1642af1..d5fdeb1 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/LoadBalancer.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/LoadBalancer.java
@@ -154,4 +154,7 @@ public interface LoadBalancer extends Configurable, Stoppable, ConfigurationObse
* If balancer needs to do initialization after Master has started up, lets do that here.
*/
void postMasterStartupInitialize();
+
+ /*Updates balancer status tag reported to JMX*/
+ void updateBalancerStatus(boolean status);
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/10c4f59e/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java
index 94554b8..b5b0a78 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java
@@ -272,6 +272,7 @@ public class MasterRpcServices extends RSRpcServices
if (master.cpHost != null) {
master.cpHost.postBalanceSwitch(oldValue, newValue);
}
+ master.getLoadBalancer().updateBalancerStatus(newValue);
} catch (IOException ioe) {
LOG.warn("Error flipping balance switch", ioe);
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/10c4f59e/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterServices.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterServices.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterServices.java
index 368441f..cfc93c4 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterServices.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterServices.java
@@ -97,6 +97,11 @@ public interface MasterServices extends Server {
ProcedureExecutor<MasterProcedureEnv> getMasterProcedureExecutor();
/**
+ * @return load balancer
+ */
+ LoadBalancer getLoadBalancer();
+
+ /**
* Check table is modifiable; i.e. exists and is offline.
* @param tableName Name of table to check.
* @throws TableNotDisabledException
http://git-wip-us.apache.org/repos/asf/hbase/blob/10c4f59e/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java
index c6d8e7b..3e26373 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java
@@ -1535,6 +1535,13 @@ public abstract class BaseLoadBalancer implements LoadBalancer {
}
/**
+ * Updates the balancer status tag reported to JMX
+ */
+ public void updateBalancerStatus(boolean status) {
+ metricsBalancer.balancerStatus(status);
+ }
+
+ /**
* Used to assign a single region to a random server.
*/
private ServerName randomAssignment(Cluster cluster, HRegionInfo regionInfo,
http://git-wip-us.apache.org/repos/asf/hbase/blob/10c4f59e/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/MetricsBalancer.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/MetricsBalancer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/MetricsBalancer.java
index ac2a517..40fb2e0 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/MetricsBalancer.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/MetricsBalancer.java
@@ -46,4 +46,8 @@ public class MetricsBalancer {
public void incrMiscInvocations() {
source.incrMiscInvocations();
}
+
+ public void balancerStatus(boolean status) {
+ source.updateBalancerStatus(status);
+ }
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/10c4f59e/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/MetricsStochasticBalancer.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/MetricsStochasticBalancer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/MetricsStochasticBalancer.java
index 850a9f5..0a1f4ae 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/MetricsStochasticBalancer.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/MetricsStochasticBalancer.java
@@ -55,6 +55,14 @@ public class MetricsStochasticBalancer extends MetricsBalancer {
}
/**
+ * Updates the balancer status tag reported to JMX
+ */
+ @Override
+ public void balancerStatus(boolean status) {
+ stochasticSource.updateBalancerStatus(status);
+ }
+
+ /**
* Updates the number of metrics reported to JMX
*/
public void updateMetricsSize(int size) {
http://git-wip-us.apache.org/repos/asf/hbase/blob/10c4f59e/hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockNoopMasterServices.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockNoopMasterServices.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockNoopMasterServices.java
index 530359a..94e9e20 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockNoopMasterServices.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockNoopMasterServices.java
@@ -85,6 +85,11 @@ public class MockNoopMasterServices implements MasterServices, Server {
}
@Override
+ public LoadBalancer getLoadBalancer() {
+ return null;
+ }
+
+ @Override
public void checkTableModifiable(TableName tableName) throws IOException, TableNotFoundException, TableNotDisabledException {
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/10c4f59e/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestCatalogJanitor.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestCatalogJanitor.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestCatalogJanitor.java
index 59c7a10..c53ab01 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestCatalogJanitor.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestCatalogJanitor.java
@@ -284,6 +284,11 @@ public class TestCatalogJanitor {
}
@Override
+ public LoadBalancer getLoadBalancer() {
+ return null;
+ }
+
+ @Override
public ServerManager getServerManager() {
return sm;
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/10c4f59e/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestBalancerStatusTagInJMXMetrics.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestBalancerStatusTagInJMXMetrics.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestBalancerStatusTagInJMXMetrics.java
new file mode 100644
index 0000000..03488ea
--- /dev/null
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestBalancerStatusTagInJMXMetrics.java
@@ -0,0 +1,108 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable
+ * law or agreed to in writing, software distributed under the License is distributed on an "AS IS"
+ * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License
+ * for the specific language governing permissions and limitations under the License.
+ */
+
+package org.apache.hadoop.hbase.master.balancer;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.Random;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hbase.HBaseTestingUtility;
+import org.apache.hadoop.hbase.MiniHBaseCluster;
+import org.apache.hadoop.hbase.master.HMaster;
+import org.apache.hadoop.hbase.testclassification.MediumTests;
+import org.apache.hadoop.metrics2.MetricsSource;
+import org.apache.hadoop.metrics2.MetricsTag;
+import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+@Category({ MediumTests.class })
+public class TestBalancerStatusTagInJMXMetrics extends BalancerTestBase {
+ private static final Log LOG = LogFactory.getLog(TestBalancerStatusTagInJMXMetrics.class);
+ private static HBaseTestingUtility UTIL = new HBaseTestingUtility();
+ private static int connectorPort = 61120;
+ private static HMaster master;
+ private static MiniHBaseCluster cluster;
+ private static Configuration conf = null;
+
+ /**
+ * Setup the environment for the test.
+ */
+ @BeforeClass
+ public static void setupBeforeClass() throws Exception {
+
+ conf = UTIL.getConfiguration();
+ Random rand = new Random();
+ for (int i = 0; i < 10; i++) {
+ do {
+ int sign = i % 2 == 0 ? 1 : -1;
+ connectorPort += sign * rand.nextInt(100);
+ } while (!HBaseTestingUtility.available(connectorPort));
+ try {
+ conf.setInt("regionserver.rmi.registry.port", connectorPort);
+ cluster = UTIL.startMiniCluster();
+ LOG.info("Waiting for active/ready master");
+ cluster.waitForActiveAndReadyMaster();
+ master = cluster.getMaster();
+ break;
+ } catch (Exception e) {
+ LOG.debug("Encountered exception when starting mini cluster. Trying port " + connectorPort,
+ e);
+ try {
+ // this is to avoid "IllegalStateException: A mini-cluster is already running"
+ UTIL.shutdownMiniCluster();
+ } catch (Exception ex) {
+ LOG.debug("Encountered exception shutting down cluster", ex);
+ }
+ }
+ }
+ }
+
+ @AfterClass
+ public static void tearDownAfterClass() throws Exception {
+ UTIL.shutdownMiniCluster();
+ }
+
+ /**
+ * Tests the status change using the Default Metrics System
+ */
+ @Test
+ public void testJmxMetrics() throws Exception {
+
+ assertEquals(getStatus(), "true");
+ master.getLoadBalancer().updateBalancerStatus(false);
+ assertEquals(getStatus(), "false");
+
+ }
+
+ /**
+ * Gets the balancer status tag from the Metrics registry
+ */
+ public String getStatus() throws Exception {
+ MetricsSource source =
+ DefaultMetricsSystem.instance().getSource(MetricsBalancerSource.METRICS_JMX_CONTEXT);
+ if (source instanceof MetricsBalancerSourceImpl) {
+ MetricsTag status = ((MetricsBalancerSourceImpl) source).getMetricsRegistry()
+ .getTag(MetricsBalancerSource.BALANCER_STATUS);
+ return status.value();
+ } else {
+ LOG.warn("Balancer JMX Metrics not registered");
+ throw new Exception("MetricsBalancer JMX Context not found");
+ }
+ }
+
+}