Community
Participate
Working Groups
Build Identifier: 4.0 Scenario: 1. Offline clone commits via WritheThroughCommitContext to the master repository (commit A). 2. A session on the master repository commits changes (commit B) which depend on the commit A. 3. The offline clone writes commit A to the store. 4. The offline clone receives an CDOSessionInvalidationEvent of commit B and put it to the local store. Under certain circumstances 4. can be executed before 3. (E.g. commit A is huge and commit B is very small). The following execption is then thrown: [ERROR] Failed to register revision: Tracker@OID1746:0v130 java.lang.IllegalStateException: Failed to register revision: Tracker@OID1746:0v130 at org.eclipse.emf.cdo.internal.server.TransactionCommitContext.addRevisions(TransactionCommitContext.java:995) at org.eclipse.emf.cdo.internal.server.TransactionCommitContext.updateInfraStructure(TransactionCommitContext.java:938) at org.eclipse.emf.cdo.internal.server.TransactionCommitContext.commit(TransactionCommitContext.java:352) at org.eclipse.emf.cdo.internal.server.syncing.SynchronizableRepository$WriteThroughCommitContext.commit(SynchronizableRepository.java:553) at org.eclipse.emf.cdo.spi.server.InternalCommitContext$2.runLoop(InternalCommitContext.java:49) at org.eclipse.emf.cdo.spi.server.InternalCommitContext$2.runLoop(InternalCommitContext.java:1) at org.eclipse.net4j.util.om.monitor.ProgressDistributor.run(ProgressDistributor.java:96) at org.eclipse.emf.cdo.server.internal.net4j.protocol.CommitTransactionIndication.indicatingCommit(CommitTransactionIndication.java:329) at org.eclipse.emf.cdo.server.internal.net4j.protocol.CommitTransactionIndication.indicating(CommitTransactionIndication.java:187) at org.eclipse.emf.cdo.server.internal.net4j.protocol.CommitTransactionIndication.indicating(CommitTransactionIndication.java:122) at org.eclipse.net4j.signal.IndicationWithMonitoring.indicating(IndicationWithMonitoring.java:84) at org.eclipse.net4j.signal.IndicationWithResponse.doExtendedInput(IndicationWithResponse.java:90) at org.eclipse.net4j.signal.Signal.doInput(Signal.java:315) at org.eclipse.net4j.signal.IndicationWithResponse.execute(IndicationWithResponse.java:63) at org.eclipse.net4j.signal.IndicationWithMonitoring.execute(IndicationWithMonitoring.java:63) at org.eclipse.net4j.signal.Signal.runSync(Signal.java:240) at org.eclipse.net4j.signal.Signal.run(Signal.java:146) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:619) Because the store alreay contains a newer object (from commit B) than the one from commit A. Reproducible: Sometimes
Adding to SynchronizableRepository: private ReadLock writeThroughCommitLock; private WriteLock handleCommitInfoLock;
Committed to HEAD
Available in R20110608-1407