From bec49cab00e15b291a0acdbb6523194376492465 Mon Sep 17 00:00:00 2001 From: Pankaj Kumar Date: Wed, 28 Sep 2016 20:04:13 +0800 Subject: [PATCH] HBASE-16723, RMI registry is not destroyed after stopping JMX Connector Server --- .../main/java/org/apache/hadoop/hbase/JMXListener.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 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 2872cfa..eaf97b5 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 @@ -27,8 +27,10 @@ import org.apache.hadoop.hbase.coprocessor.*; import java.io.IOException; import java.lang.management.ManagementFactory; import java.rmi.registry.LocateRegistry; +import java.rmi.registry.Registry; import java.rmi.server.RMIClientSocketFactory; import java.rmi.server.RMIServerSocketFactory; +import java.rmi.server.UnicastRemoteObject; import java.util.HashMap; import javax.management.MBeanServer; @@ -61,6 +63,7 @@ public class JMXListener implements Coprocessor { * we only load regionserver coprocessor on master */ private static JMXConnectorServer JMX_CS = null; + private static Registry RMI_REGISTRY = null; public static JMXServiceURL buildJMXServiceURL(int rmiRegistryPort, int rmiConnectorPort) throws IOException { @@ -128,7 +131,7 @@ public class JMXListener implements Coprocessor { } // Create the RMI registry - LocateRegistry.createRegistry(rmiRegistryPort); + RMI_REGISTRY = LocateRegistry.createRegistry(rmiRegistryPort); // Retrieve the PlatformMBeanServer. MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); @@ -147,17 +150,25 @@ public class JMXListener implements Coprocessor { LOG.info("ConnectorServer started!"); } catch (IOException e) { LOG.error("fail to start connector server!", e); + // deregister the RMI registry + if (RMI_REGISTRY != null) { + UnicastRemoteObject.unexportObject(RMI_REGISTRY, true); + } } } public void stopConnectorServer() throws IOException { - synchronized(JMXListener.class) { + synchronized (JMXListener.class) { if (JMX_CS != null) { JMX_CS.stop(); LOG.info("ConnectorServer stopped!"); JMX_CS = null; } + // deregister the RMI registry + if (RMI_REGISTRY != null) { + UnicastRemoteObject.unexportObject(RMI_REGISTRY, true); + } } } -- 2.7.2.windows.1