[
https://issues.apache.org/activemq/browse/AMQ-1822?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Rob Davies reassigned AMQ-1822:
-------------------------------
Assignee: Rob Davies
> DurableConduitBridge: DemandSubscription for queue not removed when
> processing RemoveInfo
> -----------------------------------------------------------------------------------------
>
> Key: AMQ-1822
> URL: https://issues.apache.org/activemq/browse/AMQ-1822
> Project: ActiveMQ
> Issue Type: Bug
> Components: Connector
> Affects Versions: 5.2.0
> Reporter: Mario Lukica
> Assignee: Rob Davies
> Priority: Minor
>
> I have the following problem when using network of brokers connected via
> DurableConduitBridge:
> - when consumer on (non temporary) queue is created on node1,
> DemandSubscription is created on node2 (e.g.
> NC_node1-broker_inboundlocalhost; this is expected)
> - problem: when this consumer is closed, subscription is not removed
> This causes following behaviour:
> - when there are no consumers on given queue on any broker, messages are
> always forwarded via NetworkConnector to other broker, if there was consumer
> at any point in time (since DemandSubscription is never removed)
> I think the problem lies in DurableConduitBridge, createDemandSubscription
> method.
> This behavior can be validated by using jconsole (via jmx) and checking
> subscriptions on given queue on both brokers, depending on consumer existence
> on given queue on any broker.
> Described behaviour exists in: 4.1.0, 4.1.1, 4.1.2, 5.0.0 and 5.1.0 and 5.2
> trunk (670451).
> When processing received remote ConsumerInfo, following code is executed:
> {code}
> if (info.isDurable() || (info.getDestination().isQueue() &&
> !info.getDestination().isTemporary())) {
> info.setConsumerId(new
> ConsumerId(localSessionInfo.getSessionId(), consumerIdGenerator
> .getNextSequenceId()));
> }
> {code}
> Replacing ConsumerId with new (generated) value, causes failure of removal of
> given subscription when RemoveInfo is processed with original ConsumerId.
> I think that condition should be changed to:
> {code}
> if (info.isDurable() || (info.getDestination().isQueue() &&
> info.getDestination().isTemporary())) {
> info.setConsumerId(new
> ConsumerId(localSessionInfo.getSessionId(), consumerIdGenerator
> .getNextSequenceId()));
> }
> {code}
> i.e. new ConsumerId should probably be created for temporary queues, and not
> regular ones. With this condition changed, DemandSubscription is successfully
> removed when consumer is closed on queue on other broker.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.