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

Christopher L. Shannon edited comment on AMQ-7067 at 10/9/18 12:32 PM:
-----------------------------------------------------------------------

[~gtully] - ok sounds good, having a test case to reproduce everything first 
will make it easier to validate any changes to ack compaction

And you are right about the index not being updated, I just realized the 
ackMessageFileMap is marked as transient (i was thinking it was stored to disk 
during index updates)

Also, based on your comment I'm not sure my sample I linked above is good 
enough for the commit case. (we might end up removing those files if acks are 
moved and the transaction is commited and not in flight but the message add or 
commit commands exist not sure). So again having some tests will help 
tremendously to validate


was (Author: christopher.l.shannon):
[~gtully] - ok sounds good, having a test case to reproduce everything first 
will make it easier to validate any changes to ack compaction

And you are right about the index not being updated, I just realized the 
ackMessageFileMap is marked as transient (i was thinking it was stored to disk 
during index updates)

Also, based on your comment I'm not sure my sample I linked above is good 
enough for the commit case. (we might end up removing those files if acks are 
moved and the transaction is commited and not in flight but the message add or 
commit commands exist not sure). So again having some tests to validate will 
help tremendously to validate

> KahaDB Recovery can experience a dangling transaction when prepare and commit 
> occur on different data files.
> ------------------------------------------------------------------------------------------------------------
>
>                 Key: AMQ-7067
>                 URL: https://issues.apache.org/jira/browse/AMQ-7067
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: KahaDB, XA
>    Affects Versions: 5.15.6
>            Reporter: Jamie goodyear
>            Assignee: Gary Tully
>            Priority: Critical
>             Fix For: 5.16.0, 5.15.7
>
>         Attachments: amq7067test.patch
>
>
> KahaDB Recovery can experience a dangling transaction when prepare and commit 
> occur on different data files.
> Scenario:
> A XA Transaction is started, message is prepared and sent into Broker.
> We then send into broker enough messages to file page file (100 message with 
> 512 * 1024 characters in message payload). This forces a new data file to be 
> created.
> Commit the XA transaction. Commit will land on the new data file.
> Restart the Broker.
> Upon restart a KahaDB recovery is executed.
> The prepare in PageFile 1 is not matched to Commit on PageFile 2, as such, it 
> will appear in recovered message state.
> Looking deeper into this scenario, it appears that the commit message is 
> GC'd, hence the prepare & commit can not be matched.
> The MessageDatabase only checks the following for GC:
> {color:#808080}// Don't GC files referenced by in-progress 
> tx{color}{color:#cc7832}if {color}(inProgressTxRange[{color:#6897bb}0{color}] 
> != {color:#cc7832}null{color}) {
>  {color:#cc7832}for {color}({color:#cc7832}int 
> {color}pendingTx=inProgressTxRange[{color:#6897bb}0{color}].getDataFileId(){color:#cc7832};
>  {color}pendingTx <= 
> inProgressTxRange[{color:#6897bb}1{color}].getDataFileId(){color:#cc7832}; 
> {color}pendingTx++) {
>  gcCandidateSet.remove(pendingTx){color:#cc7832};{color} }
>  }
> We need to become aware of where the prepare & commits occur in pagefiles 
> with respect to GCing files.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to