summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEgidijus Vaishnora2011-07-08 06:14:56 (EDT)
committerEgidijus Vaishnora2011-07-08 06:14:56 (EDT)
commitb8d2207c00f11ae8315c44285684ccdb376cee2d (patch)
tree4d8a938fc96051afa391fc4b56ede2a4b98d9b88
parent02e896f459004a9e8696163e94f39ca4bac73ec7 (diff)
downloadcdo-b8d2207c00f11ae8315c44285684ccdb376cee2d.zip
cdo-b8d2207c00f11ae8315c44285684ccdb376cee2d.tar.gz
cdo-b8d2207c00f11ae8315c44285684ccdb376cee2d.tar.bz2
351195: New transaction waits for different update, than asked
https://bugs.eclipse.org/bugs/show_bug.cgi?id=351195
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AllConfigs.java1
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_351195_Test.java104
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java1
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 5ee103a..6445ce3 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 0000000..1bf8316
--- /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 5759053..31779a7 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);
}