activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Dominic Tootell (Updated) (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (AMQ-3674) TopicRegion removes durableScriber from durableSubscriptions when it is active; but leaves subscription on Topic
Date Mon, 23 Jan 2012 22:33:40 GMT

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

Dominic Tootell updated AMQ-3674:
---------------------------------

    Attachment: TopicRegion.AMQ-3674.patch.txt
                RemoveDurableSubscriptionTest.java
    
> 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
>            Priority: Minor
>              Labels: Topic
>         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

        

Mime
View raw message