activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kyle Anderson (JIRA)" <j...@apache.org>
Subject [jira] Updated: (AMQ-2334) getJMSRedelivered() incorrectly returns false after a MasterSlave failover
Date Wed, 29 Jul 2009 15:18:33 GMT

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


Mime
View raw message