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

Gary Tully updated AMQ-2174:
----------------------------

    Attachment: AMQ2174Test.java

ran the test on trunk, there is still an issue.. attaching the test case in the 
more integrated form with an embedded broker...

> 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.4.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.

Reply via email to