From a725044644fbf5a6ed935595a84afa413a83fd01 Mon Sep 17 00:00:00 2001 From: Ashish Singhi Date: Sat, 25 Apr 2015 16:43:27 +0530 Subject: [PATCH] HBASE-13564 Master MBeans are not published --- .../org/apache/hadoop/hbase/JMXListener.java | 18 +++++++++++++----- .../apache/hadoop/hbase/TestJMXListener.java | 3 +++ src/main/asciidoc/_chapters/configuration.adoc | 5 ++--- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/JMXListener.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/JMXListener.java index 6a115ba7f4a..6d22142a871 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/JMXListener.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/JMXListener.java @@ -51,7 +51,8 @@ public class JMXListener implements Coprocessor { public static final Log LOG = LogFactory.getLog(JMXListener.class); public static final String RMI_REGISTRY_PORT_CONF_KEY = ".rmi.registry.port"; public static final String RMI_CONNECTOR_PORT_CONF_KEY = ".rmi.connector.port"; - public static final int defRMIRegistryPort = 10102; + public static final int defMasterRMIRegistryPort = 10101; + public static final int defRegionserverRMIRegistryPort = 10102; /** * workaround for HBASE-11146 @@ -163,11 +164,17 @@ public class JMXListener implements Coprocessor { Configuration conf = env.getConfiguration(); if (env instanceof MasterCoprocessorEnvironment) { - LOG.error("JMXListener should not be loaded in Master Environment!"); - } else if (env instanceof RegionServerCoprocessorEnvironment) { - // running on RegionServer --since 0.99 HMaster is also a HRegionServer + // running on Master rmiRegistryPort = - conf.getInt("regionserver" + RMI_REGISTRY_PORT_CONF_KEY, defRMIRegistryPort); + conf.getInt("master" + RMI_REGISTRY_PORT_CONF_KEY, defMasterRMIRegistryPort); + rmiConnectorPort = conf.getInt("master" + RMI_CONNECTOR_PORT_CONF_KEY, rmiRegistryPort); + LOG.info("Master rmiRegistryPort:" + rmiRegistryPort + ",Master rmiConnectorPort:" + + rmiConnectorPort); + } else if (env instanceof RegionServerCoprocessorEnvironment) { + // running on RegionServer + rmiRegistryPort = + conf.getInt("regionserver" + RMI_REGISTRY_PORT_CONF_KEY, + defRegionserverRMIRegistryPort); rmiConnectorPort = conf.getInt("regionserver" + RMI_CONNECTOR_PORT_CONF_KEY, rmiRegistryPort); LOG.info("RegionServer rmiRegistryPort:" + rmiRegistryPort @@ -175,6 +182,7 @@ public class JMXListener implements Coprocessor { } else if (env instanceof RegionCoprocessorEnvironment) { LOG.error("JMXListener should not be loaded in Region Environment!"); + return; } synchronized(JMXListener.class) { diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestJMXListener.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestJMXListener.java index ed141a6d7fc..510f1dcea30 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestJMXListener.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestJMXListener.java @@ -53,6 +53,9 @@ public class TestJMXListener { conf.set(CoprocessorHost.REGIONSERVER_COPROCESSOR_CONF_KEY, JMXListener.class.getName()); conf.setInt("regionserver.rmi.registry.port", connectorPort); + + conf.set(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY, JMXListener.class.getName()); + conf.setInt("master.rmi.registry.port", connectorPort - 1); UTIL.startMiniCluster(); } diff --git a/src/main/asciidoc/_chapters/configuration.adoc b/src/main/asciidoc/_chapters/configuration.adoc index ed00a498399..2b09664be45 100644 --- a/src/main/asciidoc/_chapters/configuration.adoc +++ b/src/main/asciidoc/_chapters/configuration.adoc @@ -994,8 +994,7 @@ To enable it in 0.99 or above, add below property in _hbase-site.xml_: NOTE: DO NOT set `com.sun.management.jmxremote.port` for Java VM at the same time. Currently it supports Master and RegionServer Java VM. -The reason why you only configure coprocessor for 'regionserver' is that, starting from HBase 0.99, a Master IS also a RegionServer. -(See link:https://issues.apache.org/jira/browse/HBASE-10569[HBASE-10569] for more information.) By default, the JMX listens on TCP port 10102, you can further configure the port using below properties: +By default, the JMX listens on TCP port 10102, you can further configure the port using below properties: [source,xml] ---- @@ -1062,7 +1061,7 @@ Finally start `jconsole` on the client using the key store: jconsole -J-Djavax.net.ssl.trustStore=/home/tianq/jconsoleKeyStore ---- -NOTE: for HBase 0.98, To enable the HBase JMX implementation on Master, you also need to add below property in _hbase-site.xml_: +NOTE: To enable the HBase JMX implementation on Master, you also need to add below property in _hbase-site.xml_: [source,xml] ----