Details
-
Bug
-
Resolution: Duplicate
-
Major
-
None
-
5.2.0.Beta1
-
None
Description
On a view change, transactions that are forwarded to a new node aren't necessarily completed on their new owner if they have only acquired local locks and have no modifications, which is the case with an aggregate lock.
Here's an example:
Node 1 started the following transaction: GlobalTransaction:<east-dg01-49896(east)>:9927
It was forwarded to Node 3:
2012-10-09 08:48:51,021 TRACE [org.infinispan.transaction.TransactionTable] (OOB-16,erm-cluster,east-dg03-49466(east)) Created and registered remote transaction RemoteTransaction{modifications=[], lookedUpEntries={}, lockedKeys=null, backupKeyLocks=null, missingLookedUpEntries=false, markForRollback=false, tx=GlobalTransaction:<east-dg01-49896(east)>:9927:local}
Then it was completed on the originating node, but due to there being no modifications (and no remote locks acquired), the tx completion method is never forwarded to the new owner.
Consequently, the new node will never allow a lock to this key, due to this tx being in the table and other locks waiting on it to complete.
2012-10-09 08:48:51,285 TRACE [org.infinispan.transaction.AbstractCacheTransaction] (OOB-20,erm-cluster,east-dg03-49466(east)) Transaction gtx=GlobalTransaction:<east-dg01-49896(east)>:9927:local potentially locks key ServiceGroupKey[edgeDeviceId=2,serviceGroupNo=201]? true
...
Could not acquire lock on ServiceGroupKey[edgeDeviceId=2,serviceGroupNo=201] on behalf of transaction GlobalTransaction:<east-dg01-49896(east)>:10177:remote. Lock is being held by null
There are two ways I can think of to fix this. One is to not transmit txs that don't have modifications or backup locks and just keep them local. The other is to add a flag to LocalTransaction to let it know it was transmitted to a new node so the tx completion message is sent.