[
https://issues.apache.org/activemq/browse/AMQ-2174?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Hadrian Zbarcea updated AMQ-2174:
---------------------------------
Fix Version/s: 5.4.1
(was: 5.4.0)
> 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.1
>
> 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.