Francesco Nigro created ARTEMIS-3138:
----------------------------------------

             Summary: Shared Nothing Live broker shouldn't try to connect to 
itself
                 Key: ARTEMIS-3138
                 URL: https://issues.apache.org/jira/browse/ARTEMIS-3138
             Project: ActiveMQ Artemis
          Issue Type: Improvement
            Reporter: Francesco Nigro


While starting a shared nothing master broker configured with discovery is 
performing discovery operations that could end up connecting the broker to 
itself.

 

This is happening in different code paths:
 * while checking for a live server 
 * on cluster manager deploy

 

The former won't end up connecting the broker to itself, because the broker 
acceptors are still closed, while the latter yep and connection remain 
established for the whole broker life-time.

 

The relevant stack traces are:
{code:java}
        at 
org.apache.activemq.artemis.core.cluster.DiscoveryGroup.<init>(DiscoveryGroup.java:96)
        at 
org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl.createDiscoveryGroup(ServerLocatorImpl.java:298)
        at 
org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl.startDiscovery(ServerLocatorImpl.java:275)
        at 
org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl.initialize(ServerLocatorImpl.java:263)
        at 
org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl.createSessionFactory(ServerLocatorImpl.java:650)
        at 
org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl.connect(ServerLocatorImpl.java:549)
        at 
org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl.connectNoWarnings(ServerLocatorImpl.java:555)
        at 
org.apache.activemq.artemis.core.server.impl.SharedNothingLiveActivation.isNodeIdUsed(SharedNothingLiveActivation.java:331)
        at 
org.apache.activemq.artemis.core.server.impl.SharedNothingLiveActivation.run(SharedNothingLiveActivation.java:102)
        at 
org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.internalStart(ActiveMQServerImpl.java:634)
        at 
org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.start(ActiveMQServerImpl.java:558)
        at 
org.apache.activemq.artemis.integration.FileBroker.start(FileBroker.java:64)
        at org.apache.activemq.artemis.cli.commands.Run.execute(Run.java:115)
        at 
org.apache.activemq.artemis.cli.Artemis.internalExecute(Artemis.java:154)
        at org.apache.activemq.artemis.cli.Artemis.execute(Artemis.java:102)
        at org.apache.activemq.artemis.cli.Artemis.execute(Artemis.java:129)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:-1)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.activemq.artemis.boot.Artemis.execute(Artemis.java:134)
        at org.apache.activemq.artemis.boot.Artemis.main(Artemis.java:50)
{code}
 And
{code:java}
        at 
org.apache.activemq.artemis.core.cluster.DiscoveryGroup.<init>(DiscoveryGroup.java:96)
        at 
org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl.createDiscoveryGroup(ServerLocatorImpl.java:298)
        at 
org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl.startDiscovery(ServerLocatorImpl.java:275)
        at 
org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl.initialize(ServerLocatorImpl.java:263)
        at 
org.apache.activemq.artemis.core.server.cluster.ClusterController.configAndAdd(ClusterController.java:230)
        at 
org.apache.activemq.artemis.core.server.cluster.ClusterController.addClusterConnection(ClusterController.java:197)
        at 
org.apache.activemq.artemis.core.server.cluster.ClusterManager.deployClusterConnection(ClusterManager.java:612)
        at 
org.apache.activemq.artemis.core.server.cluster.ClusterManager.deploy(ClusterManager.java:245)
        at 
org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.initialisePart1(ActiveMQServerImpl.java:3066)
        at 
org.apache.activemq.artemis.core.server.impl.SharedNothingLiveActivation.run(SharedNothingLiveActivation.java:114)
        at 
org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.internalStart(ActiveMQServerImpl.java:634)
        at 
org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.start(ActiveMQServerImpl.java:558)
        at 
org.apache.activemq.artemis.integration.FileBroker.start(FileBroker.java:64)
        at org.apache.activemq.artemis.cli.commands.Run.execute(Run.java:115)
        at 
org.apache.activemq.artemis.cli.Artemis.internalExecute(Artemis.java:154)
        at org.apache.activemq.artemis.cli.Artemis.execute(Artemis.java:102)
        at org.apache.activemq.artemis.cli.Artemis.execute(Artemis.java:129)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:-1)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.activemq.artemis.boot.Artemis.execute(Artemis.java:134)
        at org.apache.activemq.artemis.boot.Artemis.main(Artemis.java:50)
{code}

On both cases, the same broker transport isn't ignored because the discovery 
started using a randomly generated NodeiD on the server locator, instead of 
using the broker real Node ID.

The subsequent cluster manager start will start, instead, setting the broker 
Node ID on the sever locator while its cluster connection is activated.
The relevant stack trace is:
{code:java}
        at 
org.apache.activemq.artemis.core.cluster.DiscoveryGroup.<init>(DiscoveryGroup.java:96)
        at 
org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl.createDiscoveryGroup(ServerLocatorImpl.java:298)
        at 
org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl.startDiscovery(ServerLocatorImpl.java:275)
        at 
org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl.initialize(ServerLocatorImpl.java:263)
        at 
org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl.start(ServerLocatorImpl.java:477)
        at 
org.apache.activemq.artemis.core.server.cluster.impl.ClusterConnectionImpl.activate(ClusterConnectionImpl.java:680)
        at 
org.apache.activemq.artemis.core.server.cluster.impl.ClusterConnectionImpl.start(ClusterConnectionImpl.java:399)
        at 
org.apache.activemq.artemis.core.server.cluster.ClusterManager.start(ClusterManager.java:270)
        at 
org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.initialisePart2(ActiveMQServerImpl.java:3225)
        at 
org.apache.activemq.artemis.core.server.impl.SharedNothingLiveActivation.run(SharedNothingLiveActivation.java:118)
        at 
org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.internalStart(ActiveMQServerImpl.java:634)
        at 
org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.start(ActiveMQServerImpl.java:558)
        at 
org.apache.activemq.artemis.integration.FileBroker.start(FileBroker.java:64)
        at org.apache.activemq.artemis.cli.commands.Run.execute(Run.java:115)
        at 
org.apache.activemq.artemis.cli.Artemis.internalExecute(Artemis.java:154)
        at org.apache.activemq.artemis.cli.Artemis.execute(Artemis.java:102)
        at org.apache.activemq.artemis.cli.Artemis.execute(Artemis.java:129)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:-1)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.activemq.artemis.boot.Artemis.execute(Artemis.java:134)
        at org.apache.activemq.artemis.boot.Artemis.main(Artemis.java:50)
{code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to