Hi, does the group here have any suggestion on this? I'm trying to find the root of the deadlock we're getting on the production servers from time to time.
So I'm trying to better understand why this can happen, and maybe looking for sample code how to demonstrate such scenario in order to better understand. Thanks! On 05.09.22 22:48, Thomas Kramer wrote:
I'm experiencing a transaction deadlock and would like to understand how to find out the cause of it. Snipped from the log I get: /Deadlock detected: K1: TX1 holds lock, TX2 waits lock. K2: TX2 holds lock, TX1 waits lock. Transactions: TX1 [txId=GridCacheVersion [topVer=273263429, order=1661784224309, nodeOrder=4, dataCenterId=0], nodeId=8841e579-43b5-4c23-a690-1208bdd34d8c, threadId=30] TX2 [txId=GridCacheVersion [topVer=273263429, order=1661784224257, nodeOrder=14, dataCenterId=0], nodeId=f08415e4-0ae7-45cd-aeca-2033267e92c3, threadId=3815] Keys: K1 [key=e9228c01-b17e-49a5-bc7f-14c1541d9916, cache=TaskList] K2 [key=e9228c01-b17e-49a5-bc7f-14c1541d9916, cache=MediaSets]/ I can see that the same key (e9228c1) is used in a transaction on two different nodes. Ignite documentation says: /"One major rule that you must follow when working with distributed transactions is that locks for the keys participating in a transaction must be acquired in the same order. Violating this rule can lead to a distributed deadlock."/ If the order of keys in the transaction must be in the same order, how can the same key cause a deadlock here? Is it because it's in two different caches? Maybe I don't fully understand how the transaction lock works. Is there a code sample that demonstrates a potential violation? How can I now try to find in my source code where the issue happens on both nodes? Thanks, Thomas.
