[ https://issues.apache.org/jira/browse/SCB-1707?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Lei Zhang resolved SCB-1707. ---------------------------- Resolution: Fixed > Forward compensation only sends once a failure event if multiple retries fail > ----------------------------------------------------------------------------- > > Key: SCB-1707 > URL: https://issues.apache.org/jira/browse/SCB-1707 > Project: Apache ServiceComb > Issue Type: Bug > Components: Saga > Reporter: Lei Zhang > Assignee: Lei Zhang > Priority: Major > Fix For: pack-0.6.0 > > Time Spent: 20m > Remaining Estimate: 0h > > Forward compensation will retry after the call fails until the maximum number > of retries is exceeded. It calls the reverse compensate applyTo method with > each retry. This will cause multiple TxStartedEvent and TxAbortEvent to be > sent. Test case [1] proves this. > > For example, retries=2, the first failure, and the second success, Alpha will > receive the following events > > TxStartedEvent-tx1 (first) > TxAbortEvent-tx1(This will trigger the compensation operation) > TxStartedEvent-tx1 (second) > TxEndedEvent-tx1 (tx1 will be submitted) > > I suggest sending the TxAbortEvent event only if the last forward retry > failed. The modified event list looks as follows > > Example 1: retries=3 and retry all failed > > TxStartedEvent-tx1 > TxStartedEvent-tx1 > TxStartedEvent-tx1 > TxAbortEvent-tx1(Trigger compensation operation) > > Example 2: retries=3 and last retry succeeded > > TxStartedEvent-tx1 > TxStartedEvent-tx1 > TxStartedEvent-tx1 > TxEndedEvent-tx1 > [1] > [https://github.com/apache/servicecomb-pack/blob/133a2fa7247b2ba00a380762a38369849390560e/omega/omega-transaction/src/test/java/org/apache/servicecomb/pack/omega/transaction/TransactionAspectTest.java#L309] > > [tx/src/test/java/org/apache/servicecomb/pack/omega/transaction/spring/TransactionInterceptionTest.java#L199|https://github.com/apache/servicecomb-pack/blob/a8b24100a59a8ec9c917f89b1aa6978cc81e10df/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/pack/omega/transaction/spring/TransactionInterceptionTest.java#L199] > > [3] > [https://github.com/apache/servicecomb-pack/blob/133a2fa7247b2ba00a380762a38369849390560e/omega/omega-transaction/src/test/java/org/apache/servicecomb/pack/omega/transaction/TransactionAspectTest.java#L353] > -- This message was sent by Atlassian Jira (v8.3.4#803005)