You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "Bruce Snyder (JIRA)" <ji...@apache.org> on 2010/09/18 18:47:02 UTC

[jira] Updated: (AMQ-2174) Modifying an existing Durable subscription blocks that subscription from receiving messages

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

Bruce Snyder updated AMQ-2174:
------------------------------

    Fix Version/s: 5.5.0
                       (was: 5.4.1)

> Modifying an existing Durable subscription blocks that subscription from receiving messages
> -------------------------------------------------------------------------------------------
>
>                 Key: AMQ-2174
>                 URL: https://issues.apache.org/activemq/browse/AMQ-2174
>             Project: ActiveMQ
>          Issue Type: Bug
>    Affects Versions: 5.2.0
>         Environment: Windows XPSP3
>            Reporter: Antony Bowesman
>            Priority: Critical
>             Fix For: 5.5.0
>
>         Attachments: AMQ2174Test.java, selector.log, SelectorBugTest.java
>
>
> When modifying an existing durable subscription, for example to change selectors, that subscription no longer gets any messages and error messages are produced.
> Juni test case attached and broker output with log level set to TRACE, which is based on the ProducerTool and ConsumerTool examples.
> Sequence to produce the problem is 
> 1. Clean data directory
> 2. Run test case testConsumeWithNoSelectors - this creates the topic and blocks waiting for messages
> 3. Run test case testProduceWithProperties - this creates 6 messages each with a single String property.  First 2 have "selectorProp = 0", second 2 have value 1 and third pair have value 0 again.  Consumer test case in (2) will consume messages and exit.
> 4. Run test case testConsumeWithSelectors - this changes the durable subscription and adds the selectorProp = '0' to the subscription.
> 5. Run same test case as (3).  The consumer will then receive the first 2 messages produced by this producer and then block as it changes the subscription to have selectorProp = '1'.
> At this point this would appear to be a problem.  According to the JMS TopicSubscriber Javadocs
> "A client can change an existing durable subscription by creating a durable TopicSubscriber with the same name and a new topic and/or message selector. Changing a durable subscription is equivalent to unsubscribing (deleting) the old one and creating a new one. "
> so, if step (4) above has now changed the durable subscription to add a selector it still receives the first two messages from step 5, so from that, it appears that the broker is able to recognise this as a modification (although it is delete+create).  So, when it then tried to make the modification to change the selector to "selectorProp = 1" and receive the next two it does not get any messages.  So, I would expect that as it has now blocked waiting for messages with those properties, if I do
> 6. Run same test case as (3)
> I would expect the middle two messages to be received by the blocked consumer, but no more messages are consumed and I get the following messages to the broker log
> ERROR RecoveryListenerAdapter        - Message id ID:aconcagua-4821-1237761609609-0:0:1:1:3 could not be recovered from the data store - already dispatched
> This particular subscription for clientId and topic now seems to be blocked forever and messages posted to this topic can never be received by this subscriber.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.