zookeeper-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Stevo Slavić <ssla...@gmail.com>
Subject ServerCnxnFactory startup order and registering ZooKeeperServer JMX MBean
Date Mon, 01 Sep 2014 21:37:37 GMT
Hello ZooKeeper community,

When running ZK (3.4.6) related tests in parallel in same JVM, multiple
servers although assigned a different local port clash when trying to
register JMX MBean for server (see [1]) - the two get assigned same MBean
name. Registering JMX MBean for ZooKeeperServer it seems cannot be
disabled, not even for tests.

Looking into ZooKeeperServerBean constructor, and
ZooKeeperServer.getClientPort one can see that the MBean name will clash
only when server connection factory is not bound to server, before startup
method of server connection factory gets called.
This is exactly what happens in startup methods of both
NIOServerCnxnFactory and NettyServerCnxnFactory, because of IMO wrong order
that the methods are being called. Instead of current [2] IMO it should be
[3] or at least [4].

Is my understanding wrong? If not, is this a (known) bug?

Kind regards,
Stevo Slavic


[1] example build output fragment with failing ZK server JMX MBean
registration
javax.management.InstanceAlreadyExistsException:
org.apache.ZooKeeperService:name0=StandaloneServer_port-1
        at com.sun.jmx.mbeanserver.Repository.addMBean(Repository.java:437)
        at
com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerWithRepository(DefaultMBeanServerInterceptor.java:1898)
        at
com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerDynamicMBean(DefaultMBeanServerInterceptor.java:966)
        at
com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:900)
        at
com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:324)
        at
com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:522)
        at
org.apache.zookeeper.jmx.MBeanRegistry.register(MBeanRegistry.java:96)
        at
org.apache.zookeeper.server.ZooKeeperServer.registerJMX(ZooKeeperServer.java:377)
        at
org.apache.zookeeper.server.ZooKeeperServer.startup(ZooKeeperServer.java:410)
        at
org.apache.zookeeper.server.NIOServerCnxnFactory.startup(NIOServerCnxnFactory.java:123)



[2]
    @Override
    public void startup(ZooKeeperServer zks) throws IOException,
            InterruptedException {
        start();
        zks.startdata();
        zks.startup();
        setZooKeeperServer(zks);
    }

[3]
    @Override
    public void startup(ZooKeeperServer zks) throws IOException,
            InterruptedException {
        start();
        setZooKeeperServer(zks);
        zks.startdata();
        zks.startup();
    }

[4]
    @Override
    public void startup(ZooKeeperServer zks) throws IOException,
            InterruptedException {
        start();
        zks.startdata();
        setZooKeeperServer(zks);
        zks.startup();
    }

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message