[ 
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)

Reply via email to