[
https://issues.jboss.org/browse/ISPN-2578?page=com.atlassian.jira.plugin....
]
Adrian Nistor commented on ISPN-2578:
-------------------------------------
This issue is now possible because of NBST command forwarding. Previously it was
impossible to have two commands for the same TX being executed in parallel, so no thread
safety was taken into consideration. This leads now to many issues and the one described
here is just one instance, so maybe we should try to solve the general case: avoid two TX
commands for same global tx id entering the interceptor chain simultaneously, possibly by
synchronizing on the cache tx object prior to this. Or maybe just take the simple route of
using synchronized collections for the internals of the tx object? Not sure which one is
best, but certainly I would not apply a local fix for this
ConcurrentModificationException.
Two PrepareCommands in parallel cause
ConcurrentModificationException
---------------------------------------------------------------------
Key: ISPN-2578
URL:
https://issues.jboss.org/browse/ISPN-2578
Project: Infinispan
Issue Type: Bug
Affects Versions: 5.2.0.Beta5
Reporter: Radim Vansa
Assignee: Mircea Markus
Priority: Blocker
Fix For: 5.2.0.CR2
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}}.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see:
http://www.atlassian.com/software/jira