You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@activemq.apache.org by "Francesco Nigro (Jira)" <ji...@apache.org> on 2021/02/23 20:31:00 UTC

[jira] [Created] (ARTEMIS-3138) Shared Nothing Live broker shouldn't try to connect to itself

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)