[ https://issues.apache.org/activemq/browse/AMQ-2174?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Rob Davies updated AMQ-2174: ---------------------------- Fix Version/s: 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.0 > > Attachments: 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.