[ 
https://issues.apache.org/jira/browse/AMQ-3674?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Timothy Bish resolved AMQ-3674.
-------------------------------

       Resolution: Fixed
    Fix Version/s: 5.6.0
         Assignee: Timothy Bish

Simplified the test case and patch a little and applied.  Thanks!
                
> 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

        

Reply via email to