You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@jackrabbit.apache.org by "Thomas Mueller (JIRA)" <ji...@apache.org> on 2015/07/10 12:48:05 UTC
[jira] [Commented] (JCR-3226) stateCreated deadlock
[ https://issues.apache.org/jira/browse/JCR-3226?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14622136#comment-14622136 ]
Thomas Mueller commented on JCR-3226:
-------------------------------------
I could reproduce the problem with test case that concurrently (100 threads right now) creates and removes nodes. It is extremely rare, but it can happen.
> IIUC this can only occur when two sessions are concurrently importing a node with the same UUID.
No. the problem occurs with regular operations (not import), add node, remove node. Nothing special.
Deadlock:
{noformat}
Java stack information for the threads listed above:
===================================================
"Thread-35284":
at org.apache.jackrabbit.core.state.NodeState.copy(NodeState.java:142)
- waiting to lock <7f3468a48> (a org.apache.jackrabbit.core.state.NodeState)
- locked <7f34602e0> (a org.apache.jackrabbit.core.state.NodeState)
at org.apache.jackrabbit.core.state.SessionItemStateManager.makePersistent(SessionItemStateManager.java:984)
- locked <7f34602e0> (a org.apache.jackrabbit.core.state.NodeState)
at org.apache.jackrabbit.core.NodeImpl.makePersistent(NodeImpl.java:867)
at org.apache.jackrabbit.core.ItemSaveOperation.persistTransientItems(ItemSaveOperation.java:849)
at org.apache.jackrabbit.core.ItemSaveOperation.perform(ItemSaveOperation.java:243)
at org.apache.jackrabbit.core.session.SessionState.perform(SessionState.java:216)
at org.apache.jackrabbit.core.ItemImpl.perform(ItemImpl.java:91)
at org.apache.jackrabbit.core.ItemImpl.save(ItemImpl.java:329)
at org.apache.jackrabbit.core.RandomChange.randomOp(RandomChange.java:128)
at org.apache.jackrabbit.core.RandomChange$1.run(RandomChange.java:57)
"Thread-35247":
at org.apache.jackrabbit.core.state.NodeState.copy(NodeState.java:142)
- waiting to lock <7f34602e0> (a org.apache.jackrabbit.core.state.NodeState)
- locked <7f3468a48> (a org.apache.jackrabbit.core.state.NodeState)
at org.apache.jackrabbit.core.state.ItemState.pull(ItemState.java:152)
- locked <7f3468a48> (a org.apache.jackrabbit.core.state.NodeState)
at org.apache.jackrabbit.core.state.SessionItemStateManager.stateCreated(SessionItemStateManager.java:788)
at org.apache.jackrabbit.core.state.StateChangeDispatcher.notifyStateCreated(StateChangeDispatcher.java:94)
at org.apache.jackrabbit.core.state.LocalItemStateManager.stateCreated(LocalItemStateManager.java:487)
at org.apache.jackrabbit.core.state.StateChangeDispatcher.notifyStateCreated(StateChangeDispatcher.java:94)
at org.apache.jackrabbit.core.state.SharedItemStateManager.stateCreated(SharedItemStateManager.java:407)
at org.apache.jackrabbit.core.state.ItemState.notifyStateCreated(ItemState.java:233)
at org.apache.jackrabbit.core.state.ChangeLog.persisted(ChangeLog.java:323)
at org.apache.jackrabbit.core.state.SharedItemStateManager$Update.end(SharedItemStateManager.java:831)
at org.apache.jackrabbit.core.state.SharedItemStateManager.update(SharedItemStateManager.java:1541)
at org.apache.jackrabbit.core.state.LocalItemStateManager.update(LocalItemStateManager.java:400)
at org.apache.jackrabbit.core.state.XAItemStateManager.update(XAItemStateManager.java:354)
at org.apache.jackrabbit.core.state.LocalItemStateManager.update(LocalItemStateManager.java:375)
at org.apache.jackrabbit.core.state.SessionItemStateManager.update(SessionItemStateManager.java:275)
at org.apache.jackrabbit.core.ItemSaveOperation.perform(ItemSaveOperation.java:258)
at org.apache.jackrabbit.core.session.SessionState.perform(SessionState.java:216)
at org.apache.jackrabbit.core.ItemImpl.perform(ItemImpl.java:91)
at org.apache.jackrabbit.core.ItemImpl.save(ItemImpl.java:329)
at org.apache.jackrabbit.core.RandomChange.randomOp(RandomChange.java:128)
at org.apache.jackrabbit.core.RandomChange$1.run(RandomChange.java:57)
Found 1 deadlock.
{noformat}
> stateCreated deadlock
> ---------------------
>
> Key: JCR-3226
> URL: https://issues.apache.org/jira/browse/JCR-3226
> Project: Jackrabbit Content Repository
> Issue Type: Bug
> Components: jackrabbit-core
> Affects Versions: 2.2, 2.4
> Reporter: Jukka Zitting
> Assignee: Jukka Zitting
> Labels: deadlock
>
> In JCR-2650 a potential deadlock in SessionItemStateManager.stateModified() got fixed by postponing the work to the save() call.
> Unfortunately this still leaves the stateCreated() method vulnerable to a similar (though much less likely) deadlock scenario (observed in Jackrabbit 2.2.x):
> Thread A:
> at org.apache.jackrabbit.core.state.NodeState.copy(NodeState.java:118)
> - waiting to lock <0x00007ffec8ddfa18> (a org.apache.jackrabbit.core.state.NodeState)
> - locked <0x00007ffec8ddf9d8> (a org.apache.jackrabbit.core.state.NodeState)
> at org.apache.jackrabbit.core.state.ItemState.pull(ItemState.java:152)
> - locked <0x00007ffec8ddf9d8> (a org.apache.jackrabbit.core.state.NodeState)
> at org.apache.jackrabbit.core.state.SessionItemStateManager.stateCreated(SessionItemStateManager.java:791)
> at org.apache.jackrabbit.core.state.StateChangeDispatcher.notifyStateCreated(StateChangeDispatcher.java:94)
> at org.apache.jackrabbit.core.state.LocalItemStateManager.stateCreated(LocalItemStateManager.java:428)
> at org.apache.jackrabbit.core.state.StateChangeDispatcher.notifyStateCreated(StateChangeDispatcher.java:94)
> at org.apache.jackrabbit.core.state.SharedItemStateManager.stateCreated(SharedItemStateManager.java:398)
> at org.apache.jackrabbit.core.state.ItemState.notifyStateCreated(ItemState.java:231)
> at org.apache.jackrabbit.core.state.ChangeLog.persisted(ChangeLog.java:309)
> at org.apache.jackrabbit.core.state.SharedItemStateManager$Update.end(SharedItemStateManager.java:777)
> at org.apache.jackrabbit.core.state.SharedItemStateManager.update(SharedItemStateManager.java:1488)
> at org.apache.jackrabbit.core.state.LocalItemStateManager.update(LocalItemStateManager.java:351)
> at org.apache.jackrabbit.core.state.XAItemStateManager.update(XAItemStateManager.java:354)
> at org.apache.jackrabbit.core.state.LocalItemStateManager.update(LocalItemStateManager.java:326)
> at org.apache.jackrabbit.core.state.SessionItemStateManager.update(SessionItemStateManager.java:289)
> at org.apache.jackrabbit.core.ItemSaveOperation.perform(ItemSaveOperation.java:258)
> at org.apache.jackrabbit.core.session.SessionState.perform(SessionState.java:200)
> at org.apache.jackrabbit.core.ItemImpl.perform(ItemImpl.java:91)
> at org.apache.jackrabbit.core.ItemImpl.save(ItemImpl.java:329)
> Thread B:
> at org.apache.jackrabbit.core.state.NodeState.copy(NodeState.java:119)
> - waiting to lock <0x00007ffec8ddf9d8> (a org.apache.jackrabbit.core.state.NodeState)
> - locked <0x00007ffec8ddfa18> (a org.apache.jackrabbit.core.state.NodeState)
> at org.apache.jackrabbit.core.NodeImpl.makePersistent(NodeImpl.java:869)
> - locked <0x00007ffec8ddfa18> (a org.apache.jackrabbit.core.state.NodeState)
> at org.apache.jackrabbit.core.ItemSaveOperation.persistTransientItems(ItemSaveOperation.java:836)
> at org.apache.jackrabbit.core.ItemSaveOperation.perform(ItemSaveOperation.java:243)
> at org.apache.jackrabbit.core.session.SessionState.perform(SessionState.java:200)
> at org.apache.jackrabbit.core.ItemImpl.perform(ItemImpl.java:91)
> at org.apache.jackrabbit.core.ItemImpl.save(ItemImpl.java:329)
> at org.apache.jackrabbit.core.session.SessionSaveOperation.perform(SessionSaveOperation.java:42)
> at org.apache.jackrabbit.core.session.SessionState.perform(SessionState.java:200)
> at org.apache.jackrabbit.core.SessionImpl.perform(SessionImpl.java:355)
> at org.apache.jackrabbit.core.SessionImpl.save(SessionImpl.java:758)
> IIUC this can only occur when two sessions are concurrently importing a node with the same UUID.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)