[ https://issues.apache.org/jira/browse/JCR-2855?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12987845#action_12987845 ]
Yoav Landman commented on JCR-2855: ----------------------------------- I am seeing a similar behavior with 2.2.1 (took me a while to get to upgrading for testing this again). A thread (thread 1 from my other comment) is blocked in org.apache.jackrabbit.core.state.FineGrainedISMLocking.acquireWriteLock (FineGrainedISMLocking.java:143). Debugging shows that the activeWriterId in this frame is actually of a (pooled) thread that is idle and no longer doing any jcr activity . I am not closely familiar with the design, so perhaps I'm completely off, but it is unclear to me why writers that are downgraded to readers do not clean up the activeWriterId (in addition to nullifying the activeWriter - FineGrainedISMLocking.java:191). This seems to cause waiting writers not to get notified upon release of the read lock. Adding activeWriterId=null to WriteLockImpl.downgrade() seems to fix the problem for me while passing all the jackrabbit-core tests. pool-2-thread-27@8112, prio=5, in group 'main', status: 'waiting' java.lang.Thread.State: WAITING at java.lang.Object.wait(Object.java:-1) at java.lang.Object.wait(Object.java:485) at EDU.oswego.cs.dl.util.concurrent.Latch.acquire(Unknown Source:-1) at org.apache.jackrabbit.core.state.FineGrainedISMLocking.acquireWriteLock(FineGrainedISMLocking.java:143) <-- activeWriterId is of a thread that is no longer active at org.apache.jackrabbit.core.state.SharedItemStateManager.acquireWriteLock(SharedItemStateManager.java:1850) at org.apache.jackrabbit.core.state.SharedItemStateManager.access$200(SharedItemStateManager.java:115) at org.apache.jackrabbit.core.state.SharedItemStateManager$Update.begin(SharedItemStateManager.java:565) at org.apache.jackrabbit.core.state.SharedItemStateManager.beginUpdate(SharedItemStateManager.java:1459) at org.apache.jackrabbit.core.state.XAItemStateManager.prepare(XAItemStateManager.java:163) at org.apache.jackrabbit.core.TransactionContext.prepare(TransactionContext.java:157) - locked <0x2041> (a org.apache.jackrabbit.core.TransactionContext) at org.apache.jackrabbit.core.XASessionImpl.prepare(XASessionImpl.java:312) at org.springframework.extensions.jcr.jackrabbit.support.JackRabbitUserTransaction.commit(JackRabbitUserTransaction.java:91) at org.springframework.extensions.jcr.jackrabbit.LocalTransactionManager.doCommit(LocalTransactionManager.java:189) at org.artifactory.jcr.JcrTransactionManager.doCommit(JcrTransactionManager.java:75) at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:754) at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723) at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:393) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:120) ... > Writers blocked forever when waiting on update operations > ----------------------------------------------------------- > > Key: JCR-2855 > URL: https://issues.apache.org/jira/browse/JCR-2855 > Project: Jackrabbit Content Repository > Issue Type: Bug > Components: jackrabbit-core > Affects Versions: 2.1.3 > Reporter: Yoav Landman > > Thread 1 calls Session.save() and has a write lock. > Thread 2 is in XA prepare() and is waiting on thread 1 in > FineGrainedISMLocking.acquireWriteLock(). > Thread 1's save calls SharedItemStateManager.Update#end() and performs a > write-lock downgrade to a read-lock, then (at the end of Update#end()) it > calls readLock.release(). FineGrainedISMLocking.ReadLockImpl#release thinks > activeWriterId is of the current transation and does not notify any writers > (activeWriterId is not being reset on downgrade in what seems to be a related > to JCR-2753). > Thread 1 waits forever. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.