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)