Gary Tully created AMQ-4196:
-------------------------------
Summary: Race condition between removal of subscriptions and
removal of destinations in a network of brokers
Key: AMQ-4196
URL: https://issues.apache.org/jira/browse/AMQ-4196
Project: ActiveMQ
Issue Type: Bug
Components: Broker, Connector
Affects Versions: 5.7.0, 5.6.0
Reporter: Gary Tully
Assignee: Gary Tully
Fix For: 5.8.0
n a broker network like this: A <--> B <---> C
Scenario:
A producer to BrokerA creates a message, sets its replyTo header to a temp
destination that it creates and listens on, then sends the message off to
broker A. The message is demand forwarded to BrokerC because there is a
consumer there that consumes the message and replies to the temp dest in the
replyTo header.
As the number of concurrent producers on BrokerA sending these messages
increases, the subscription to the temp destination that was demand forwarded
will not be cleaned up properly on BrokerC. The reason for this is the
DemandForwardingBridge runs the remove consumer code in a separate thread. But
if a "remove destination" advisory messages comes in, it will remove the
destination from the AdvisoryBroker's destination map. So if this happens
before the code for removeConsumer runs (in AdvisoryBroker), then the
destination will not be in the destination map and the advisory for
removeConsumer will not fire.
The net result is a subscription leak in the network bridge on B & C
The junit test shows two issues:
1) the subscriptions leaked when concurrent producers using request/reply and
correctly closing the consumer and connection
2) all subscriptions leaked when using a single producer with request/reply and
closing only the connection, and not the consumer explicitly
Issue 2 is related to temp destinations only and is compounded by
https://issues.apache.org/jira/browse/AMQ-3879
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira