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

Reply via email to