diff options
author | Egidijus Vaishnora | 2011-07-08 10:14:56 +0000 |
---|---|---|
committer | Egidijus Vaishnora | 2011-07-08 10:14:56 +0000 |
commit | b8d2207c00f11ae8315c44285684ccdb376cee2d (patch) | |
tree | 4d8a938fc96051afa391fc4b56ede2a4b98d9b88 | |
parent | 02e896f459004a9e8696163e94f39ca4bac73ec7 (diff) | |
download | cdo-b8d2207c00f11ae8315c44285684ccdb376cee2d.tar.gz cdo-b8d2207c00f11ae8315c44285684ccdb376cee2d.tar.xz cdo-b8d2207c00f11ae8315c44285684ccdb376cee2d.zip |
351195: New transaction waits for different update, than asked
https://bugs.eclipse.org/bugs/show_bug.cgi?id=351195
3 files changed, 106 insertions, 0 deletions
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AllConfigs.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AllConfigs.java index 5ee103a7fe..6445ce3532 100644 --- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AllConfigs.java +++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AllConfigs.java @@ -228,5 +228,6 @@ public abstract class AllConfigs extends ConfigTestSuite testClasses.add(Bugzilla_342135_Test.class); testClasses.add(Bugzilla_343332_Test.class); testClasses.add(Bugzilla_343471_Test.class); + testClasses.add(Bugzilla_351195_Test.class); } } diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_351195_Test.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_351195_Test.java new file mode 100644 index 0000000000..1bf8316df6 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_351195_Test.java @@ -0,0 +1,104 @@ +/** + * Copyright (c) 2004 - 2011 Eike Stepper (Berlin, Germany) and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Eike Stepper - initial API and implementation + */ +package org.eclipse.emf.cdo.tests.bugzilla; + +import org.eclipse.emf.cdo.common.commit.CDOCommitInfo; +import org.eclipse.emf.cdo.eresource.CDOResource; +import org.eclipse.emf.cdo.session.CDOSession; +import org.eclipse.emf.cdo.tests.AbstractCDOTest; +import org.eclipse.emf.cdo.tests.model1.Category; +import org.eclipse.emf.cdo.tests.model1.Model1Factory; +import org.eclipse.emf.cdo.transaction.CDOTransaction; +import org.eclipse.emf.cdo.util.CommitException; +import org.eclipse.emf.cdo.view.CDOViewInvalidationEvent; + +import org.eclipse.net4j.util.event.IEvent; +import org.eclipse.net4j.util.event.IListener; + +import java.util.concurrent.CountDownLatch; + +/** + * @author Egidijus Vaisnora + */ +public class Bugzilla_351195_Test extends AbstractCDOTest +{ + /** + * Creates new transaction at the same time when notification has been sent + */ + public void testOpeningTransactionDuringInvalidation() throws Exception + { + CDOSession session = openSession(); + CDOTransaction tx = session.openTransaction(); + CDOResource resource = tx.createResource(getResourcePath("test")); + + Model1Factory factory = getModel1Factory(); + Category cat = factory.createCategory(); + resource.getContents().add(cat); + tx.commit(); + + final CountDownLatch invalidationLatch = new CountDownLatch(1); + final CountDownLatch testExecutionLatch = new CountDownLatch(1); + tx.addListener(new IListener() + { + public void notifyEvent(IEvent event) + { + if (event instanceof CDOViewInvalidationEvent) + { + try + { + testExecutionLatch.countDown(); + invalidationLatch.await(); + } + catch (InterruptedException ex) + { + Thread.currentThread().interrupt(); + } + } + } + }); + + long timestamp = doSecondSessionSync(); + testExecutionLatch.await(); + CDOTransaction freshTransaction = session.openTransaction(); + invalidationLatch.countDown(); + + // wait for update from server + freshTransaction.waitForUpdate(timestamp, DEFAULT_TIMEOUT); + + session.close(); + } + + private long doSecondSessionSync() throws CommitException + { + CDOSession session = openSession(); + CDOTransaction tx = session.openTransaction(); + CDOResource resource = tx.getResource(getResourcePath("test")); + + Category cat = (Category)resource.getContents().get(0); + cat.setName("dirty"); + CDOCommitInfo info; + + try + { + info = tx.commit(); + } + catch (CommitException ex) + { + throw new RuntimeException(ex); + } + + long timeStamp = info.getTimeStamp(); + msg(timeStamp); + + session.close(); + return timeStamp; + } +} diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java index 575905315d..31779a7b8b 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java @@ -1413,6 +1413,7 @@ public abstract class CDOSessionImpl extends Container<CDOView> implements Inter { view.setSession(this); view.setViewID(++lastViewID); + view.setLastUpdateTime(getLastUpdateTime()); views.add(view); } |