[
https://issues.apache.org/jira/browse/ARTEMIS-1217?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
clebert suconic closed ARTEMIS-1217.
------------------------------------
> Race condition during session reconnection
> ------------------------------------------
>
> Key: ARTEMIS-1217
> URL: https://issues.apache.org/jira/browse/ARTEMIS-1217
> Project: ActiveMQ Artemis
> Issue Type: Bug
> Affects Versions: 2.1.0
> Reporter: Andrius Dagys
> Priority: Minor
>
> We have the following scenario:
> There's a client and a server. The server runs a broker and creates a session
> with a producer/consumer to monitor the server queue and respond to client
> requests.
> The client establishes a session with the server broker, creates a client
> queue and a producer/consumer to send requests to the server and receive
> responses.
> In one of our tests we check that the client can correctly reconnect when the
> server (and the broker) restarts. The problem is that occasionally after
> reconnecting the client is able to send a request message to the server
> queue, but the server fails to send a response message due to the client
> queue bindings not being set yet.
> It also seems to be caused by the fact that the client uses different
> sessions for consumer & producer. However, this issue started occurring only
> after we updated from 1.5.3 to 2.1.0.
> Here's an excerpt from the logs:
> {code}
> 16:32:14 [Thread-5 (activemq-netty-threads)]
> impl.RemotingConnectionImpl.bufferReceived - handling packet
> PACKET(SessionSendMessage)[type=71, channelID=10,
> packetObject=SessionSendMessage, message=ServerMessage[messageID=0],
> requiresResponse=false]
> 16:32:14 [Thread-5 (activemq-netty-threads)]
> core.ServerSessionPacketHandler.handlePacket -
> ServerSessionPacketHandler::handlePacket,PACKET(SessionSendMessage)[type=71,
> channelID=10, packetObject=SessionSendMessage,
> message=ServerMessage[messageID=0], requiresResponse=false]
> 16:32:14 [Thread-5 (activemq-netty-threads)] impl.ServerSessionImpl.send -
> send(message=CoreMessage[messageID=26,durable=false,userID=null,priority=4,
> timestamp=Mon Jun 05 16:32:14 BST 2017,expiration=0, durable=false,
> address=rpc.client.user1.5976801431518807802,properties=TypedProperties[tag=0,rpc-id=8487092758120613782,_AMQ_VALIDATED_USER=user1]]@572371329,
> direct=true) being called
> 16:32:14 [Thread-5 (activemq-netty-threads)] impl.SecurityStoreImpl.check -
> checking access permissions to rpc.client.user1.5976801431518807802
> 16:32:14 [Thread-5 (activemq-netty-threads)] impl.PostOfficeImpl.route -
> Couldn't find any bindings for address=rpc.client.user1.5976801431518807802
> on message=CoreMessage[messageID=26,durable=false,userID=null,priority=4,
> timestamp=Mon Jun 05 16:32:14 BST 2017,expiration=0, durable=false,
> address=rpc.client.user1.5976801431518807802,properties=TypedProperties[tag=0,rpc-id=8487092758120613782,_AMQ_VALIDATED_USER=user1]]@572371329
> 16:32:14 [Thread-5 (activemq-netty-threads)] impl.PostOfficeImpl.route -
> Message after
> routed=CoreMessage[messageID=26,durable=false,userID=null,priority=4,
> timestamp=Mon Jun 05 16:32:14 BST 2017,expiration=0, durable=false,
> address=rpc.client.user1.5976801431518807802,properties=TypedProperties[tag=0,rpc-id=8487092758120613782,_AMQ_VALIDATED_USER=user1]]@572371329
> 16:32:14 [Thread-5 (activemq-netty-threads)] impl.PostOfficeImpl.route -
> Message CoreMessage[messageID=26,durable=false,userID=null,priority=4,
> timestamp=Mon Jun 05 16:32:14 BST 2017,expiration=0, durable=false,
> address=rpc.client.user1.5976801431518807802,properties=TypedProperties[tag=0,rpc-id=8487092758120613782,_AMQ_VALIDATED_USER=user1]]@572371329
> is not going anywhere as it didn't have a binding on
> address:rpc.client.user1.5976801431518807802
> 16:32:14 [Thread-5 (activemq-netty-threads)]
> core.ServerSessionPacketHandler.sendResponse -
> ServerSessionPacketHandler::scheduling response::null
> 16:32:14 [Thread-5 (activemq-netty-threads)]
> core.ServerSessionPacketHandler.done - ServerSessionPacketHandler::regular
> response sent::null
> 16:32:14 [Thread-0
> (ActiveMQ-IO-server-org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl$4@2bcc0ea8)]
> impl.JournalTransaction.commit - no compact commit 22
> 16:32:14 [Thread-4 (activemq-netty-threads)]
> impl.PageCursorProviderImpl.createSubscription -
> rpc.client.user1.5976801431518807802 creating subscription 20 with filter null
> java.lang.Exception: trace
> at
> org.apache.activemq.artemis.core.paging.cursor.impl.PageCursorProviderImpl.createSubscription(PageCursorProviderImpl.java:96)
> [artemis-server-2.1.0.jar:2.1.0]
> ...
> 16:32:14 [Thread-4 (activemq-netty-threads)]
> impl.SimpleAddressManager.addBinding - Adding binding LocalQueueBinding
> [address=rpc.client.user1.5976801431518807802,
> queue=QueueImpl[name=rpc.client.user1.5976801431518807802,
> postOffice=PostOfficeImpl
> [server=ActiveMQServerImpl::serverUUID=239659ff-4a04-11e7-bb1a-2663463a67ed],
> temp=true]@1a83a5b5, filter=null, name=rpc.client.user1.5976801431518807802,
> clusterName=rpc.client.user1.5976801431518807802239659ff-4a04-11e7-bb1a-2663463a67ed]
> with address = rpc.client.user1.5976801431518807802
> java.lang.Exception: trace
> at
> org.apache.activemq.artemis.core.postoffice.impl.SimpleAddressManager.addBinding(SimpleAddressManager.java:81)
> [artemis-server-2.1.0.jar:2.1.0]
> ...
> 16:32:14 [Thread-4 (activemq-netty-threads)] impl.BindingsImpl.addBinding -
> addBinding(LocalQueueBinding [address=rpc.client.user1.5976801431518807802,
> queue=QueueImpl[name=rpc.client.user1.5976801431518807802,
> postOffice=PostOfficeImpl
> [server=ActiveMQServerImpl::serverUUID=239659ff-4a04-11e7-bb1a-2663463a67ed],
> temp=true]@1a83a5b5, filter=null, name=rpc.client.user1.5976801431518807802,
> clusterName=rpc.client.user1.5976801431518807802239659ff-4a04-11e7-bb1a-2663463a67ed])
> being called
> 16:32:14 [Thread-4 (activemq-netty-threads)] impl.BindingsImpl.addBinding -
> Adding binding LocalQueueBinding
> [address=rpc.client.user1.5976801431518807802,
> queue=QueueImpl[name=rpc.client.user1.5976801431518807802,
> postOffice=PostOfficeImpl
> [server=ActiveMQServerImpl::serverUUID=239659ff-4a04-11e7-bb1a-2663463a67ed],
> temp=true]@1a83a5b5, filter=null, name=rpc.client.user1.5976801431518807802,
> clusterName=rpc.client.user1.5976801431518807802239659ff-4a04-11e7-bb1a-2663463a67ed]
> into BindingsImpl [name=rpc.client.user1.5976801431518807802] bindingTable:
> **************************************************
> routingNameBindingMap:
> key=rpc.client.user1.5976801431518807802, value(s):
> LocalQueueBinding
> [address=rpc.client.user1.5976801431518807802,
> queue=QueueImpl[name=rpc.client.user1.5976801431518807802,
> postOffice=PostOfficeImpl
> [server=ActiveMQServerImpl::serverUUID=239659ff-4a04-11e7-bb1a-2663463a67ed],
> temp=true]@1a83a5b5, filter=null, name=rpc.client.user1.5976801431518807802,
> clusterName=rpc.client.user1.5976801431518807802239659ff-4a04-11e7-bb1a-2663463a67ed]
> routingNamePositions:
> EMPTY!
> bindingsMap:
> key=20, value=LocalQueueBinding
> [address=rpc.client.user1.5976801431518807802,
> queue=QueueImpl[name=rpc.client.user1.5976801431518807802,
> postOffice=PostOfficeImpl
> [server=ActiveMQServerImpl::serverUUID=239659ff-4a04-11e7-bb1a-2663463a67ed],
> temp=true]@1a83a5b5, filter=null, name=rpc.client.user1.5976801431518807802,
> clusterName=rpc.client.user1.5976801431518807802239659ff-4a04-11e7-bb1a-2663463a67ed]
> exclusiveBindings:
> EMPTY!
> ####################################################
> {code}
> I also created a minimal repro test:
> https://github.com/corda/activemq-artemis/blob/reconnect-bug/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/RaceConditionTest.java
> it hangs once in every 10-20 runs.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)