[ 
https://issues.apache.org/jira/browse/ZOOKEEPER-2383?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15198781#comment-15198781
 ] 

Jason Rosenberg commented on ZOOKEEPER-2383:
--------------------------------------------

I've run into similar issues, with the register call causing an AssertionError, 
which is not caught anywhere, which results in test failures (especially if you 
have multiple QuorumPeers running in the same jvm during tests).  JMX 
registration gets confused if you have individual nodes starting and stopping.  
 (Asserts are only enabled for us during testing/ci, so it doesn't affect 
production).
I worked around it be calling {code}MBeanRegistry.setInstance(new 
FakeMBeanRegistry()){code}.  Where {code}FakeMBeanRegistry{code} looks like:

{code}
  public static class FakeMBeanRegistry extends MBeanRegistry {
    @Override public void register(ZKMBeanInfo bean, ZKMBeanInfo parent) throws 
JMException {}
    @Override public void unregister(ZKMBeanInfo bean) {}
    @Override public void unregisterAll() {}
  }
{code}

Maybe there should be a flag to disable all JMX registrations (e.g. for most 
tests), and it could be handled with something like this fake class.

> Startup race in ZooKeeperServer
> -------------------------------
>
>                 Key: ZOOKEEPER-2383
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2383
>             Project: ZooKeeper
>          Issue Type: Bug
>          Components: jmx, server
>    Affects Versions: 3.4.8
>            Reporter: Steve Rowe
>            Priority: Blocker
>             Fix For: 3.4.9
>
>         Attachments: TestZkStandaloneJMXRegistrationRaceConcurrent.java, 
> release-3.4.8-extra-logging.patch, zk-3.4.8-MBeanRegistry.log, 
> zk-3.4.8-NPE.log
>
>
> In attempting to upgrade Solr's ZooKeeper dependency from 3.4.6 to 3.4.8 
> (SOLR-8724) I ran into test failures where attempts to create a node in a 
> newly started standalone ZooKeeperServer were failing because of an assertion 
> in MBeanRegistry.
> ZooKeeperServer.startup() first sets up its request processor chain then 
> registers itself in JMX, but if a connection comes in before the server's JMX 
> registration happens, registration of the connection will fail because it 
> trips the assertion that (effectively) its parent (the server) has already 
> registered itself.
> {code:java|title=ZooKeeperServer.java}
>     public synchronized void startup() {
>         if (sessionTracker == null) {
>             createSessionTracker();
>         }
>         startSessionTracker();
>         setupRequestProcessors();
>         registerJMX();
>         state = State.RUNNING;
>         notifyAll();
>     }
> {code}
> {code:java|title=MBeanRegistry.java}
>     public void register(ZKMBeanInfo bean, ZKMBeanInfo parent)
>         throws JMException
>     {
>         assert bean != null;
>         String path = null;
>         if (parent != null) {
>             path = mapBean2Path.get(parent);
>             assert path != null;
>         }
> {code}
> This problem appears to be new with ZK 3.4.8 - AFAIK Solr never had this 
> issue with ZK 3.4.6. 



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to