]
Galder Zamarreño updated ISPN-4176:
-----------------------------------
Fix Version/s: 7.1.0.Alpha1
(was: 7.0.0.Final)
Forcing a commit via recovery RecoveryAdminOperations may create a
duplicate GlobalTransaction
----------------------------------------------------------------------------------------------
Key: ISPN-4176
URL:
https://issues.jboss.org/browse/ISPN-4176
Project: Infinispan
Issue Type: Bug
Components: Core, Transactions
Affects Versions: 6.0.2.Final
Reporter: Dan Berindei
Fix For: 7.1.0.Alpha1
{{RecoveryManagerImpl.forceTransactionCompletion()}} modifies the
{{GlobalTransaction.address}} of the transaction being committed so that the local node is
the originator. But the {{GlobalTransaction.id}} stays the same, we could have two
transactions with the same {{GlobalTransaction}} - which shouldn't be possible.
We can't remove the code that changes the {{GlobalTransaction.address}}, because we
use it as the originator in other parts of the code. So the only option is to generate a
new id as well.
But there is another problem: RecoveryAwareTransactionTable.cleanupStaleTransactions()
doesn't release the locks acquired by that transaction on the primary node. So forcing
a commit with a different GlobalTransaction will not be able to acquire the locks that
were held by the original transaction.