[ 
https://issues.apache.org/jira/browse/AMQ-6133?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15106897#comment-15106897
 ] 

Christopher L. Shannon commented on AMQ-6133:
---------------------------------------------

[~gtully] and [~tabish121],

I have attached a test that shows the Queue case breaking.  I think it will 
also break for durables in certain conditions.  One easy solution is to change 
line 1416 in MessageDatabase (the warning log message) to 
{{this.updateIndex(tx, command, location);}} and simply add the message if it 
can't find it.  However, this is probably not desirable in all cases as I'm 
guessing there are times when the update should be rejected (such as after an 
ack).  Another solution is to not garbage collect the original journal file 
that contains the add command, however then that would lead to having more 
journal files laying around that couldn't be garbage collected.

> 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
>         Attachments: 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)

Reply via email to