Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 354009 - DeadLock in CDO Session
Summary: DeadLock in CDO Session
Status: CLOSED FIXED
Alias: None
Product: EMF
Classification: Modeling
Component: cdo.core (show other bugs)
Version: 4.1   Edit
Hardware: PC Linux
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Eike Stepper CLA
QA Contact: Eike Stepper CLA
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-08-05 10:33 EDT by kaab CLA
Modified: 2012-09-21 07:16 EDT (History)
3 users (show)

See Also:
caspar_d: review+


Attachments
Fix (8.85 KB, patch)
2011-08-05 10:38 EDT, Eike Stepper CLA
no flags Details | Diff
Patch v2 (reintegrated with HEAD) (8.44 KB, patch)
2011-09-29 02:22 EDT, Eike Stepper CLA
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description kaab CLA 2011-08-05 10:33:15 EDT
Build Identifier: I20110613-1736

+ While performing our tests we encountered a DeadLock in CDO that seem related to CDOSession/View invalidation.
+ This could not be reproduced in a unit test, a snapshot has been provided to Eike to inspect the threads behaviour
+ When running using yourkit profiler, dead lock was detected, here's the relevant thread information from the snapshot :

Worker-154 [BLOCKED] CPU time: 0:21
org.eclipse.emf.internal.cdo.session.CDOSessionImpl.invalidate(CDOCommitInfo, InternalCDOTransaction)
org.eclipse.emf.internal.cdo.transaction.CDOTransactionImpl$CDOCommitContextImpl.postCommit(CDOSessionProtocol$CommitTransactionResult)
org.eclipse.emf.internal.cdo.transaction.CDOSingleTransactionStrategyImpl.commit(InternalCDOTransaction, IProgressMonitor)
org.eclipse.emf.internal.cdo.transaction.CDOTransactionImpl.commit(IProgressMonitor)
org.eclipse.emf.internal.cdo.transaction.CDOTransactionImpl.commit()
com.castortech.iris.models.locator.impl.cdo.IrisTransactionDelegateImpl.commit()
com.castortech.iris.models.locator.impl.common.IrisTransactionImpl.commit()
com.castortech.common.interpreter.BaseCodeInterpreter$1.run(IProgressMonitor)
org.eclipse.core.internal.jobs.Worker.run()



Worker-155 [BLOCKED] CPU time: 0:04
org.eclipse.emf.internal.cdo.view.CDOViewImpl.setLastUpdateTime(long)
org.eclipse.emf.internal.cdo.session.CDOSessionImpl.invalidateOrdered(CDOCommitInfo, InternalCDOTransaction)
org.eclipse.emf.internal.cdo.session.CDOSessionImpl.invalidate(CDOCommitInfo, InternalCDOTransaction)
org.eclipse.emf.internal.cdo.transaction.CDOTransactionImpl$CDOCommitContextImpl.postCommit(CDOSessionProtocol$CommitTransactionResult)
org.eclipse.emf.internal.cdo.transaction.CDOSingleTransactionStrategyImpl.commit(InternalCDOTransaction, IProgressMonitor)
org.eclipse.emf.internal.cdo.transaction.CDOTransactionImpl.commit(IProgressMonitor)
org.eclipse.emf.internal.cdo.transaction.CDOTransactionImpl.commit()
com.castortech.iris.models.locator.impl.cdo.IrisTransactionDelegateImpl.commit()
com.castortech.iris.models.locator.impl.common.IrisTransactionImpl.commit()
com.castortech.common.interpreter.BaseCodeInterpreter$1.run(IProgressMonitor)
org.eclipse.core.internal.jobs.Worker.run()


Reproducible: Always
Comment 1 Eike Stepper CLA 2011-08-05 10:38:09 EDT
Created attachment 200989 [details]
Fix
Comment 2 Eike Stepper CLA 2011-08-05 10:38:39 EDT
Hi Abdel, does the attached fix solve your problem?
Comment 3 Ralf Ellner CLA 2011-09-20 04:47:07 EDT
I have experienced a similar problem when using multiple threads (each with its own CDOTransaction) on a single CDOSession, for example:

pool-27-thread-4 is waiting to lock org.eclipse.emf.internal.cdo.transaction.CDOTransactionImpl@b57e2 which is held by pool-27-thread-3
pool-27-thread-3 is waiting to lock org.eclipse.emf.internal.cdo.session.CDOSessionImpl$OutOfSequenceInvalidations@626803ff which is held by pool-27-thread-4

Thread stacks

pool-27-thread-3 [BLOCKED; waiting to lock org.eclipse.emf.internal.cdo.session.CDOSessionImpl$OutOfSequenceInvalidations@626803ff]
org.eclipse.emf.internal.cdo.session.CDOSessionImpl.invalidate(CDOSessionImpl.java:1180)
org.eclipse.emf.internal.cdo.transaction.CDOTransactionImpl$CDOCommitContextImpl.postCommit(CDOTransactionImpl.java:2498)
org.eclipse.emf.internal.cdo.transaction.CDOSingleTransactionStrategyImpl.commit(CDOSingleTransactionStrategyImpl.java:99)
org.eclipse.emf.internal.cdo.transaction.CDOTransactionImpl.commit(CDOTransactionImpl.java:1069)
org.eclipse.emf.internal.cdo.transaction.CDOTransactionImpl.commit(CDOTransactionImpl.java:1089)


pool-27-thread-4 [BLOCKED; waiting to lock org.eclipse.emf.internal.cdo.transaction.CDOTransactionImpl@b57e2]
org.eclipse.emf.internal.cdo.view.CDOViewImpl.setLastUpdateTime(CDOViewImpl.java)
org.eclipse.emf.internal.cdo.session.CDOSessionImpl.invalidateOrdered(CDOSessionImpl.java:1242)
org.eclipse.emf.internal.cdo.session.CDOSessionImpl.invalidate(CDOSessionImpl.java:1210)
org.eclipse.emf.internal.cdo.transaction.CDOTransactionImpl$CDOCommitContextImpl.postCommit(CDOTransactionImpl.java:2498)
org.eclipse.emf.internal.cdo.transaction.CDOSingleTransactionStrategyImpl.commit(CDOSingleTransactionStrategyImpl.java:99)
org.eclipse.emf.internal.cdo.transaction.CDOTransactionImpl.commit(CDOTransactionImpl.java:1069)
org.eclipse.emf.internal.cdo.transaction.CDOTransactionImpl.commit(CDOTransactionImpl.java:1089)

The provided fix solved the problem in 4.0-maintainance.
Comment 4 Eike Stepper CLA 2011-09-25 09:28:23 EDT
Caspar, can you take a look at it and tell me about your opinion?

It appears that all tests are passing (incl. offline suite).
Comment 5 Caspar D. CLA 2011-09-26 03:18:31 EDT
Problem understood, solution understood. Makes sense.
As discussed, only part I'm not sure about is the syncing
that you changed in (or added to?) waitForUpdate. I can't 
apply it to trunk because the patch is for 4.0 (presumably).
Comment 6 Eike Stepper CLA 2011-09-29 02:15:52 EDT
Backport to 4.0 in bug 359339.
Comment 7 Eike Stepper CLA 2011-09-29 02:22:11 EDT
Created attachment 204246 [details]
Patch v2 (reintegrated with HEAD)
Comment 8 Eike Stepper CLA 2011-09-29 02:35:50 EDT
Committed revision 9419:
- trunk/plugins/org.eclipse.emf.cdo
- trunk/plugins/org.eclipse.emf.cdo.tests
Comment 9 Eike Stepper CLA 2011-09-29 02:36:10 EDT
Fixed
Comment 10 Eike Stepper CLA 2012-09-21 07:16:05 EDT
Closing.