Community
Participate
Working Groups
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
Created attachment 200989 [details] Fix
Hi Abdel, does the attached fix solve your problem?
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.
Caspar, can you take a look at it and tell me about your opinion? It appears that all tests are passing (incl. offline suite).
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).
Backport to 4.0 in bug 359339.
Created attachment 204246 [details] Patch v2 (reintegrated with HEAD)
Committed revision 9419: - trunk/plugins/org.eclipse.emf.cdo - trunk/plugins/org.eclipse.emf.cdo.tests
Fixed
Closing.