[
https://issues.apache.org/jira/browse/AMQ-6133?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15221792#comment-15221792
]
Gary Tully commented on AMQ-6133:
---------------------------------
[~cshannon]
I like that, isPersistJMSRedelivered is likely selectively used.
In doMessageSend, {code}if (!isPersistJMSRedelivered()) &&
messages.isCacheEnabled() {{code}
guess the order of the checks could go either way :-)
that is safest as it enforces the persistJmsRedelivered semantic.
> Message updates can cause message loss on recovery
> --------------------------------------------------
>
> Key: AMQ-6133
> URL: https://issues.apache.org/jira/browse/AMQ-6133
> Project: ActiveMQ
> Issue Type: Bug
> Components: Broker, KahaDB
> Affects Versions: 5.13.0
> Reporter: Christopher L. Shannon
> Assignee: Christopher L. Shannon
> Fix For: 5.13.1, 5.14.0
>
> Attachments: AMQ6133PersistJMSRedeliveryTest.java, AMQ6133Test.java
>
>
> After doing some testing with AMQ-6131, I noticed a similar issue where
> messages can be lost if a message update is called.
> Normally when KahaDB gets a KahaUpdateMessageCommand it will update the index
> with the new location. This works except that if the index is deleted or
> corrupted and needs to be rebuilt, the replay process may not be able to
> recover the message.
> This happens because after the message is updated, KahaDB is free to garbage
> collect the file with the original add command. So, whatt happens is that
> during replay when the update command is seen KahaDB rejects it because it
> can't find the original message if that file has been GC'd. This happens in
> the updateIndex method of MessageDatabase on line 1395 where it prints out a
> warning saying "Non existent message update attempt rejected".
> I am attaching a unit test that demonstrates the issue where the count after
> restart is missing messages.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)