[
https://issues.apache.org/jira/browse/AMQ-3674?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13192615#comment-13192615
]
Timothy Bish commented on AMQ-3674:
-----------------------------------
Good catch, fixed it.
> TopicRegion removes durableScriber from durableSubscriptions when it is
> active; but leaves subscription on Topic
> ----------------------------------------------------------------------------------------------------------------
>
> Key: AMQ-3674
> URL: https://issues.apache.org/jira/browse/AMQ-3674
> Project: ActiveMQ
> Issue Type: Bug
> Components: Broker
> Affects Versions: 5.5.1
> Environment: 5.5.1 (5.5.1-fuse-01-20), Mac OS X 10.7.2 (11.2.0 Darwin
> Kernel Version 11.2.0)
> Reporter: Dominic Tootell
> Assignee: Timothy Bish
> Priority: Minor
> Labels: Topic
> Fix For: 5.6.0
>
> Attachments: RemoveDurableSubscriptionTest.java,
> TopicRegion.AMQ-3674.patch.txt
>
>
> http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/TopicRegion.java?revision=1160894&view=markup
> Via the Web Admin Console you can attempt to remove a durable topic
> subscription when it is active; however you will receive the message:
> "Durable consumer is in use". However, there is unfortunate side effect of
> this attempt in that the *{{durableSubscriptions}}* map is modified and the
> subscription is removed from the map, and the topic is left with
> subscription. If you subsequentially then disconnect the active durable
> topic consumer (so it's in an active state; where you and attempt to remove
> the subscription), you cannot remove the inactive subscription as you hit:
> "No durable subscription exists for:"
> {noformat}
> @Override
> public void removeSubscription(ConnectionContext context,
> RemoveSubscriptionInfo info) throws Exception {
> SubscriptionKey key = new SubscriptionKey(info.getClientId(),
> info.getSubscriptionName());
> DurableTopicSubscription sub = durableSubscriptions.remove(key);
> if (sub == null) {
> throw new InvalidDestinationException("No durable subscription
> exists for: " + info.getSubscriptionName());
> }
> if (sub.isActive()) {
> throw new JMSException("Durable consumer is in use");
> }
> {noformat}
> The above maybe should be changed to, where the subscription is *{{get}}*
> from the map, and only removed if it's !sub.isActive(). (Or perhaps re add
> the subscription to the map if it is Active)
> {noformat}
> @Override
> public void removeSubscription(ConnectionContext context,
> RemoveSubscriptionInfo info) throws Exception {
> SubscriptionKey key = new SubscriptionKey(info.getClientId(),
> info.getSubscriptionName());
> DurableTopicSubscription sub = durableSubscriptions.get(key);
> if (sub == null) {
> throw new InvalidDestinationException("No durable subscription
> exists for: " + info.getSubscriptionName());
> }
> if (sub.isActive()) {
> throw new JMSException("Durable consumer is in use");
> }
> if(sub!=null) {
> durableSubscriptions.remove(key);
> }
> {noformat}
> let me know if that makes no sense; and i'll try to create you a sample unit
> test.
> cheers
> /dom
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira