atomikos/transactions-essentials

In Microservice scenario, A.a1 invoke B.b1 invoke A.a2, GlobalTransaction fail

Opened this issue · 0 comments

Hi all,
In version 5.0.7
In this scenario:
In ProcessA, Service A.a1(operation) remotecall Service B.b1 in ProcessB, and B.b1 remotecall ServiceA.a2 in ProcessA

transaction failed with "recursive detect" exception when TM in ProcessA call prepare to itself

please see errlog below:

0827 15:13:53.180|EBUG|a|-d-0[share]-thread-1|ParticipantAdapter.logDebug(32)| Calling prepare on http://localhost:28001/atomikos/tm-a159851243155600001/tm-a159851243155600001|
0827 15:13:53.480|EBUG|a|qtp81355344-25|AtomikosRestPort.logDebug(32)| prepare ( ... ) received for root tm-a159851243155600001|
0827 15:13:53.481|WARN|a|qtp81355344-25|AtomikosRestPort.logWarning(40)| Error in prepare for root tm-a159851243155600001|
com.atomikos.icatch.RollbackException: Recursion detected
at com.atomikos.icatch.imp.CoordinatorImp.prepare(CoordinatorImp.java:521)
at com.atomikos.remoting.twopc.AtomikosRestPort.prepare(AtomikosRestPort.java:123)
... more
at java.lang.Thread.run(Thread.java:748)
0827 15:13:53.523|WARN|a|-d-0[share]-thread-1|ParticipantAdapter.logWarning(40)| Remote participant not available - any remote work will rollback...|
javax.ws.rs.NotFoundException: HTTP 404 Not Found
... more

I found the nestet branch transid in A is lost, A prepare with the transid---“http://localhost:28001/atomikos/tm-a159851243155600001/tm-a159851243155600001”---is wrong, should be tm-a159851243155600001/tm-??

Any help about this? thans a lot!