You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zookeeper.apache.org by ma...@apache.org on 2009/02/06 22:21:21 UTC
svn commit: r741731 - in /hadoop/zookeeper/branches/branch-3.1: ./
src/java/main/org/apache/zookeeper/jmx/
src/java/main/org/apache/zookeeper/server/
src/java/main/org/apache/zookeeper/server/quorum/
Author: mahadev
Date: Fri Feb 6 21:21:21 2009
New Revision: 741731
URL: http://svn.apache.org/viewvc?rev=741731&view=rev
Log:
ZOOKEEPER-302. Quote values in JMX ObjectNames. (tom and pat via mahadev)
Modified:
hadoop/zookeeper/branches/branch-3.1/CHANGES.txt
hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/jmx/MBeanRegistry.java
hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/server/ConnectionBean.java
hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/server/NIOServerCnxn.java
hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/server/ZooKeeperServer.java
hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/server/ZooKeeperServerBean.java
hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/server/quorum/FollowerZooKeeperServer.java
hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/server/quorum/LeaderZooKeeperServer.java
hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeer.java
Modified: hadoop/zookeeper/branches/branch-3.1/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/branches/branch-3.1/CHANGES.txt?rev=741731&r1=741730&r2=741731&view=diff
==============================================================================
--- hadoop/zookeeper/branches/branch-3.1/CHANGES.txt (original)
+++ hadoop/zookeeper/branches/branch-3.1/CHANGES.txt Fri Feb 6 21:21:21 2009
@@ -91,6 +91,8 @@
ZOOKEEPER-293. zoo_set needs to be abi compatible (3.1 changed the
signature), fix this by adding zoo_set2 (pat via mahadev)
+ ZOOKEEPER-302. Quote values in JMX ObjectNames. (tom and pat via mahadev)
+
IMPROVEMENTS:
ZOOKEEPER-64. Log system env information when initializing server and
Modified: hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/jmx/MBeanRegistry.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/jmx/MBeanRegistry.java?rev=741731&r1=741730&r2=741731&view=diff
==============================================================================
--- hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/jmx/MBeanRegistry.java (original)
+++ hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/jmx/MBeanRegistry.java Fri Feb 6 21:21:21 2009
@@ -22,7 +22,9 @@
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
+import javax.management.JMException;
import javax.management.MBeanServer;
+import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import org.apache.log4j.Logger;
@@ -54,7 +56,9 @@
* @param parent if not null, the new bean will be registered as a child
* node of this parent.
*/
- public void register(ZKMBeanInfo bean, ZKMBeanInfo parent) {
+ public void register(ZKMBeanInfo bean, ZKMBeanInfo parent)
+ throws JMException
+ {
assert bean != null;
String path = null;
if (parent != null) {
@@ -70,9 +74,9 @@
ObjectName oname = makeObjectName(path, bean);
try {
mbs.registerMBean(bean, oname);
- } catch (Exception e) {
- LOG.error("Failed to register MBean " + bean.getName());
- e.printStackTrace();
+ } catch (JMException e) {
+ LOG.warn("Failed to register MBean " + bean.getName());
+ throw e;
}
}
@@ -81,16 +85,16 @@
* @param path
* @param bean
*/
- private void unregister(String path,ZKMBeanInfo bean){
+ private void unregister(String path,ZKMBeanInfo bean) throws JMException {
if(path==null)
return;
if (!bean.isHidden()) {
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
try {
mbs.unregisterMBean(makeObjectName(path, bean));
- } catch (Exception e) {
- LOG.error("Failed to unregister MBean " + bean.getName());
- e.printStackTrace();
+ } catch (JMException e) {
+ LOG.warn("Failed to unregister MBean " + bean.getName());
+ throw e;
}
}
}
@@ -99,20 +103,28 @@
* Unregister MBean.
* @param bean
*/
- public void unregister(ZKMBeanInfo bean){
+ public void unregister(ZKMBeanInfo bean) {
if(bean==null)
return;
String path=mapBean2Path.get(bean);
- unregister(path,bean);
+ try {
+ unregister(path,bean);
+ } catch (JMException e) {
+ LOG.warn("Error during unregister", e);
+ }
mapBean2Path.remove(bean);
mapName2Bean.remove(bean.getName());
}
/**
* Unregister all currently registered MBeans
*/
- public void unregisterAll(){
- for(Map.Entry<ZKMBeanInfo,String> e: mapBean2Path.entrySet()){
- unregister(e.getValue(),e.getKey());
+ public void unregisterAll() {
+ for(Map.Entry<ZKMBeanInfo,String> e: mapBean2Path.entrySet()) {
+ try {
+ unregister(e.getValue(), e.getKey());
+ } catch (JMException e1) {
+ LOG.warn("Error during unregister", e1);
+ }
}
mapBean2Path.clear();
mapName2Bean.clear();
@@ -123,7 +135,7 @@
* @param name path elements
* @return absolute path
*/
- public String makeFullPath(String prefix, String... name){
+ public String makeFullPath(String prefix, String... name) {
StringBuilder sb=new StringBuilder(prefix == null ? "/" : (prefix.equals("/")?prefix:prefix+"/"));
boolean first=true;
for (String s : name) {
@@ -159,9 +171,11 @@
* Builds an MBean path and creates an ObjectName instance using the path.
* @param path MBean path
* @param bean the MBean instance
- * @return ObjectName to be registered with the paltform MBean server
+ * @return ObjectName to be registered with the platform MBean server
*/
- protected ObjectName makeObjectName(String path, ZKMBeanInfo bean) {
+ protected ObjectName makeObjectName(String path, ZKMBeanInfo bean)
+ throws MalformedObjectNameException
+ {
if(path==null)
return null;
StringBuilder beanName = new StringBuilder(CommonNames.DOMAIN + ":");
@@ -171,10 +185,10 @@
beanName.deleteCharAt(beanName.length()-1);
try {
return new ObjectName(beanName.toString());
- } catch (Exception e) {
- e.printStackTrace();
- assert false;
+ } catch (MalformedObjectNameException e) {
+ LOG.warn("Invalid name \"" + beanName.toString() + "\" for class "
+ + bean.getClass().toString());
+ throw e;
}
- return null;
}
}
Modified: hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/server/ConnectionBean.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/server/ConnectionBean.java?rev=741731&r1=741730&r2=741731&view=diff
==============================================================================
--- hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/server/ConnectionBean.java (original)
+++ hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/server/ConnectionBean.java Fri Feb 6 21:21:21 2009
@@ -18,9 +18,14 @@
package org.apache.zookeeper.server;
+import java.net.Inet6Address;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
import java.util.Arrays;
import java.util.Date;
+import javax.management.ObjectName;
+
import org.apache.log4j.Logger;
import org.apache.zookeeper.jmx.MBeanRegistry;
import org.apache.zookeeper.jmx.ZKMBeanInfo;
@@ -44,15 +49,20 @@
return "0x" + Long.toHexString(connection.getSessionId());
}
-
public String getSourceIP() {
- return connection.getRemoteAddress().getAddress().getHostAddress()+
- ":"+connection.getRemoteAddress().getPort();
+ InetSocketAddress sockAddr = connection.getRemoteAddress();
+ return sockAddr.getAddress().getHostAddress()
+ + ":" + sockAddr.getPort();
}
-
+
public String getName() {
- String ip=connection.getRemoteAddress().getAddress().getHostAddress();
- return MBeanRegistry.getInstance().makeFullPath("Connections", ip,getSessionId());
+ InetAddress addr = connection.getRemoteAddress().getAddress();
+ String ip = addr.getHostAddress();
+ if (addr instanceof Inet6Address) {
+ ip = ObjectName.quote(ip);
+ }
+ return MBeanRegistry.getInstance().makeFullPath("Connections", ip,
+ getSessionId());
}
public boolean isHidden() {
@@ -61,7 +71,8 @@
public String[] getEphemeralNodes() {
if(zk.dataTree!=null){
- String[] res=zk.dataTree.getEphemerals(connection.getSessionId()).toArray(new String[0]);
+ String[] res=zk.dataTree.getEphemerals(connection.getSessionId())
+ .toArray(new String[0]);
Arrays.sort(res);
return res;
}
@@ -84,10 +95,11 @@
public void terminateConnection() {
connection.close();
}
-
+
@Override
public String toString() {
- return "ConnectionBean{ClientIP="+getSourceIP()+",SessionId=0x"+getSessionId()+"}";
+ return "ConnectionBean{ClientIP=" + ObjectName.quote(getSourceIP())
+ + ",SessionId=0x" + getSessionId() + "}";
}
public long getOutstandingRequests() {
Modified: hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/server/NIOServerCnxn.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/server/NIOServerCnxn.java?rev=741731&r1=741730&r2=741731&view=diff
==============================================================================
--- hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/server/NIOServerCnxn.java (original)
+++ hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/server/NIOServerCnxn.java Fri Feb 6 21:21:21 2009
@@ -861,6 +861,7 @@
MBeanRegistry.getInstance().register(jmxConnectionBean, zk.jmxServerBean);
} catch (Exception e) {
LOG.warn("Failed to register with JMX", e);
+ jmxConnectionBean = null;
}
try {
Modified: hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/server/ZooKeeperServer.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/server/ZooKeeperServer.java?rev=741731&r1=741730&r2=741731&view=diff
==============================================================================
--- hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/server/ZooKeeperServer.java (original)
+++ hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/server/ZooKeeperServer.java Fri Feb 6 21:21:21 2009
@@ -334,10 +334,17 @@
try {
jmxServerBean = new ZooKeeperServerBean(this);
MBeanRegistry.getInstance().register(jmxServerBean, null);
- jmxDataTreeBean = new DataTreeBean(dataTree);
- MBeanRegistry.getInstance().register(jmxDataTreeBean, jmxServerBean);
+
+ try {
+ jmxDataTreeBean = new DataTreeBean(dataTree);
+ MBeanRegistry.getInstance().register(jmxDataTreeBean, jmxServerBean);
+ } catch (Exception e) {
+ LOG.warn("Failed to register with JMX", e);
+ jmxDataTreeBean = null;
+ }
} catch (Exception e) {
LOG.warn("Failed to register with JMX", e);
+ jmxServerBean = null;
}
}
@@ -397,6 +404,10 @@
if (jmxDataTreeBean != null) {
MBeanRegistry.getInstance().unregister(jmxDataTreeBean);
}
+ } catch (Exception e) {
+ LOG.warn("Failed to unregister with JMX", e);
+ }
+ try {
if (jmxServerBean != null) {
MBeanRegistry.getInstance().unregister(jmxServerBean);
}
Modified: hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/server/ZooKeeperServerBean.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/server/ZooKeeperServerBean.java?rev=741731&r1=741730&r2=741731&view=diff
==============================================================================
--- hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/server/ZooKeeperServerBean.java (original)
+++ hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/server/ZooKeeperServerBean.java Fri Feb 6 21:21:21 2009
@@ -24,8 +24,6 @@
import org.apache.zookeeper.Version;
import org.apache.zookeeper.jmx.ZKMBeanInfo;
-import org.apache.zookeeper.server.ServerStats;
-import org.apache.zookeeper.server.ZooKeeperServer;
/**
* This class implements the ZooKeeper server MBean interface.
@@ -45,7 +43,7 @@
public String getClientPort() {
try {
return InetAddress.getLocalHost().getHostAddress() + ":"
- + zks.getClientPort();
+ + zks.getClientPort();
} catch (UnknownHostException e) {
return "localhost:" + zks.getClientPort();
}
Modified: hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/server/quorum/FollowerZooKeeperServer.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/server/quorum/FollowerZooKeeperServer.java?rev=741731&r1=741730&r2=741731&view=diff
==============================================================================
--- hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/server/quorum/FollowerZooKeeperServer.java (original)
+++ hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/server/quorum/FollowerZooKeeperServer.java Fri Feb 6 21:21:21 2009
@@ -187,6 +187,7 @@
MBeanRegistry.getInstance().register(jmxDataTreeBean, jmxServerBean);
} catch (Exception e) {
LOG.warn("Failed to register with JMX", e);
+ jmxDataTreeBean = null;
}
}
@@ -194,14 +195,21 @@
LocalPeerBean localPeerBean)
{
// register with JMX
- try {
- MBeanRegistry.getInstance().unregister(self.jmxLeaderElectionBean);
+ if (self.jmxLeaderElectionBean != null) {
+ try {
+ MBeanRegistry.getInstance().unregister(self.jmxLeaderElectionBean);
+ } catch (Exception e) {
+ LOG.warn("Failed to register with JMX", e);
+ }
self.jmxLeaderElectionBean = null;
+ }
+ try {
jmxServerBean = followerBean;
MBeanRegistry.getInstance().register(followerBean, localPeerBean);
} catch (Exception e) {
LOG.warn("Failed to register with JMX", e);
+ jmxServerBean = null;
}
}
Modified: hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/server/quorum/LeaderZooKeeperServer.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/server/quorum/LeaderZooKeeperServer.java?rev=741731&r1=741730&r2=741731&view=diff
==============================================================================
--- hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/server/quorum/LeaderZooKeeperServer.java (original)
+++ hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/server/quorum/LeaderZooKeeperServer.java Fri Feb 6 21:21:21 2009
@@ -96,6 +96,7 @@
MBeanRegistry.getInstance().register(jmxDataTreeBean, jmxServerBean);
} catch (Exception e) {
LOG.warn("Failed to register with JMX", e);
+ jmxDataTreeBean = null;
}
}
@@ -103,14 +104,21 @@
LocalPeerBean localPeerBean)
{
// register with JMX
- try {
- MBeanRegistry.getInstance().unregister(self.jmxLeaderElectionBean);
+ if (self.jmxLeaderElectionBean != null) {
+ try {
+ MBeanRegistry.getInstance().unregister(self.jmxLeaderElectionBean);
+ } catch (Exception e) {
+ LOG.warn("Failed to register with JMX", e);
+ }
self.jmxLeaderElectionBean = null;
+ }
+ try {
jmxServerBean = leaderBean;
MBeanRegistry.getInstance().register(leaderBean, localPeerBean);
} catch (Exception e) {
LOG.warn("Failed to register with JMX", e);
+ jmxServerBean = null;
}
}
Modified: hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeer.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeer.java?rev=741731&r1=741730&r2=741731&view=diff
==============================================================================
--- hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeer.java (original)
+++ hadoop/zookeeper/branches/branch-3.1/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeer.java Fri Feb 6 21:21:21 2009
@@ -372,6 +372,7 @@
MBeanRegistry.getInstance().register(jmxLeaderElectionBean, jmxLocalPeerBean);
} catch (Exception e) {
LOG.warn("Failed to register with JMX", e);
+ jmxLeaderElectionBean = null;
}
if(electionAlg==null)
@@ -407,13 +408,24 @@
ZKMBeanInfo p;
if (getId() == s.id) {
p = jmxLocalPeerBean = new LocalPeerBean(this);
+ try {
+ MBeanRegistry.getInstance().register(p, jmxQuorumBean);
+ } catch (Exception e) {
+ LOG.warn("Failed to register with JMX", e);
+ jmxLocalPeerBean = null;
+ }
} else {
p = new RemotePeerBean(s);
+ try {
+ MBeanRegistry.getInstance().register(p, jmxQuorumBean);
+ } catch (Exception e) {
+ LOG.warn("Failed to register with JMX", e);
+ }
}
- MBeanRegistry.getInstance().register(p, jmxQuorumBean);
}
} catch (Exception e) {
LOG.warn("Failed to register with JMX", e);
+ jmxQuorumBean = null;
}
try {