[
https://issues.apache.org/activemq/browse/AMQ-2334?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Kyle Anderson updated AMQ-2334:
-------------------------------
Description:
Shared master/slave setup, described here
http://activemq.apache.org/shared-file-system-master-slave.html
Scenario:
1. Transacted consumer receives a message
2. Transacted consumer disconnects prior to committing
3. Transacted consumer #2 receives the same message.
Normally consumer #2 sees that message as getJMSRedelivered() = true. However,
if the broker fails and another takes over from the data dir between step 1 and
3, the redelivery is set as false - even though a consumer has, in fact, seen
the message before. See attached unit test.
was:
Shared master/slave setup, described here
http://activemq.apache.org/shared-file-system-master-slave.html
Normally if one transacted consumer receives a message, then disconnects
without committing, the message is marked as getJMSRedelivered() as true. If
the broker fails and another takes over before the consumer disconnect, the
message isn't marked as redelivered to the next consumer.
In my application, I'd prefer a message marked as redelivered if it wasn't to a
re-delivered message that wasn't marked as such.
So a quick fix, I modified org.apache.activemq.broker.region.queue to increment
the message count prior to persistent storage, then decremented immediately
after on the version in memory:
message.incrementRedeliveryCounter();
store.addMessage(context, message);
message.setRedeliveryCounter(message.getRedeliveryCounter()-1);
Aside from marking all messages as redelivered upon recovery or a page in, any
possible issues with this? Any better solutions out there?
> getJMSRedelivered() incorrectly returns false after a MasterSlave failover
> --------------------------------------------------------------------------
>
> Key: AMQ-2334
> URL: https://issues.apache.org/activemq/browse/AMQ-2334
> Project: ActiveMQ
> Issue Type: Bug
> Components: Broker
> Affects Versions: 5.2.0
> Reporter: Kyle Anderson
> Attachments: SanRedeliver.java
>
> Original Estimate: 3 hours
> Remaining Estimate: 3 hours
>
> Shared master/slave setup, described here
> http://activemq.apache.org/shared-file-system-master-slave.html
> Scenario:
> 1. Transacted consumer receives a message
> 2. Transacted consumer disconnects prior to committing
> 3. Transacted consumer #2 receives the same message.
> Normally consumer #2 sees that message as getJMSRedelivered() = true.
> However, if the broker fails and another takes over from the data dir between
> step 1 and 3, the redelivery is set as false - even though a consumer has, in
> fact, seen the message before. See attached unit test.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.