Details
-
Bug
-
Resolution: Done
-
Blocker
-
5.2.0.Beta5
-
None
-
None
Description
Situation:
1) Node A broadcasts PrepareCommand to nodes B, C
2) Node A leaves cluster, causing new topology to be installed
3) The command arrives to B and C, with lower topology than the current one
4) Both B and C forward the command to node D
5) D executes the two commands in parallel and finds out that A has left, therefore executing RollbackCommand
In AbstractTxLockingInterceptor.visitRollbackCommand we call LockManagerImpl.unlockAll which iterates over the keys and unlocks them. As these two prepares aren't synchronized over the lockedKeys set, one may unlock and remove these keys while the other is iterating through them, causing ConcurrentModificationException.