[infinispan-issues] [JBoss JIRA] (ISPN-2578) Two PrepareCommands in parallel cause ConcurrentModificationException
Adrian Nistor (JIRA)
jira-events at lists.jboss.org
Mon Jan 14 10:31:21 EST 2013
[ https://issues.jboss.org/browse/ISPN-2578?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12745665#comment-12745665 ]
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
More information about the infinispan-issues
mailing list