[
https://issues.apache.org/jira/browse/ARTEMIS-3138?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17290987#comment-17290987
]
ASF subversion and git services commented on ARTEMIS-3138:
----------------------------------------------------------
Commit 6c7231928ffdd1b057c51a306ba55649446d74a1 in activemq-artemis's branch
refs/heads/master from franz1981
[ https://gitbox.apache.org/repos/asf?p=activemq-artemis.git;h=6c72319 ]
ARTEMIS-3138 Shared Nothing Live broker shouldn't try to connect to itself (2)
> 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
> Priority: Major
> Time Spent: 1.5h
> Remaining Estimate: 0h
>
> While starting a shared nothing master broker configured with discovery it
> performs discovery operations that could end up connecting the broker to
> itself.
> The discoveries happen in different code paths:
> * while checking for other live servers, on broker start
> * on cluster manager deploy
> The discovered connectors include the broker own one sent by itself with
> broadcasting, but, for some reason (explained below), they won't be filtered
> out.
> The existing logic to filter out connectors is based on the Node ID source of
> the broadcast event vs the one set on the local server locator.
>
> The former case won't end up connecting the broker to itself, because the
> broker acceptors are still closed and won't accept any connection, while the
> latter yes and the established connection remain alive 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
> has been started with a randomly generated Node ID on the server locator,
> instead of using the broker real Node ID, but the former case cannot receive
> the broker own connector because the broker hasn't yet started to broadcast
> it.
> The subsequent cluster manager start, instead, set the broker Node ID on the
> sever locator while its cluster connection is activated and that's why it
> ignores its same connector.
> 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)