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