Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2008-07-25 06:14:39 +0000
committerEike Stepper2008-07-25 06:14:39 +0000
commit23fdd5bbfe758be61ed5cf7456a96b474855ae51 (patch)
tree6c067c6da18f8efa569947a89a1af1f6aa0bccd8
parent8d1f4129e7a724229a02ca1c88069458f8cf639e (diff)
downloadcdo-23fdd5bbfe758be61ed5cf7456a96b474855ae51.tar.gz
cdo-23fdd5bbfe758be61ed5cf7456a96b474855ae51.tar.xz
cdo-23fdd5bbfe758be61ed5cf7456a96b474855ae51.zip
[241464] Make timeouts in read-access requests configurable
https://bugs.eclipse.org/bugs/show_bug.cgi?id=241464
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/CDOServerIndication.java19
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/.classpath2
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/META-INF/MANIFEST.MF33
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AbstractCDOTest.java9
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AllTests.java3
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/ContainmentTest.java3
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla241464_Test.java82
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOSessionImpl.java20
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStateMachine.java5
9 files changed, 145 insertions, 31 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/CDOServerIndication.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/CDOServerIndication.java
index 80f2fac94b..b2eff3725a 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/CDOServerIndication.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/CDOServerIndication.java
@@ -19,6 +19,7 @@ import org.eclipse.emf.cdo.internal.server.SessionManager;
import org.eclipse.emf.cdo.server.IStore;
import org.eclipse.net4j.signal.IndicationWithResponse;
+import org.eclipse.net4j.util.lifecycle.LifecycleUtil;
/**
* @author Eike Stepper
@@ -51,17 +52,29 @@ public abstract class CDOServerIndication extends IndicationWithResponse
protected IStore getStore()
{
- return getRepository().getStore();
+ IStore store = getRepository().getStore();
+ if (!LifecycleUtil.isActive(store))
+ {
+ throw new IllegalStateException("Store has been deactivated");
+ }
+
+ return store;
}
protected Repository getRepository()
{
- return getSessionManager().getRepository();
+ Repository repository = getSessionManager().getRepository();
+ if (!repository.isActive())
+ {
+ throw new IllegalStateException("Repository has been deactivated");
+ }
+
+ return repository;
}
protected Session getSession()
{
- return (Session)getProtocol().getSession();
+ return getProtocol().getSession();
}
@Override
diff --git a/plugins/org.eclipse.emf.cdo.tests/.classpath b/plugins/org.eclipse.emf.cdo.tests/.classpath
index e7a55df766..6e84b7ccb5 100644
--- a/plugins/org.eclipse.emf.cdo.tests/.classpath
+++ b/plugins/org.eclipse.emf.cdo.tests/.classpath
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
- <classpathentry kind="src" path="model"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
+ <classpathentry kind="src" path="model"/>
<classpathentry kind="src" path="net4j"/>
<classpathentry kind="output" path="bin"/>
</classpath>
diff --git a/plugins/org.eclipse.emf.cdo.tests/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.cdo.tests/META-INF/MANIFEST.MF
index 0f655d86b8..8645bf1ec1 100644
--- a/plugins/org.eclipse.emf.cdo.tests/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.cdo.tests/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.emf.cdo.tests;singleton:=true
-Bundle-Version: 1.0.0.qualifier
+Bundle-Version: 1.0.1.qualifier
Bundle-ActivationPolicy: lazy
Bundle-Activator: org.eclipse.emf.cdo.tests.Activator
Bundle-Vendor: %providerName
@@ -24,21 +24,22 @@ Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
org.eclipse.emf.cdo.tests.model4;bundle-version="[1.0.0,2.0.0)";visibility:=reexport,
org.eclipse.emf.cdo.tests.model4interfaces;bundle-version="[1.0.0,2.0.0)";visibility:=reexport,
org.junit;bundle-version="[3.8.0,4.0.0)";visibility:=reexport
-Export-Package: base;version="1.0.0",
- base.impl;version="1.0.0",
- base.util;version="1.0.0",
- derived;version="1.0.0",
- derived.impl;version="1.0.0",
- derived.util;version="1.0.0",
- interface_;version="1.0.0",
- interface_.impl;version="1.0.0",
- interface_.util;version="1.0.0",
- org.eclipse.emf.cdo.tests;version="1.0.0",
- org.eclipse.emf.cdo.tests.store.logic;version="1.0.0",
- org.eclipse.net4j.tests;version="1.0.0";x-friends:="org.eclipse.emf.cdo.tests.hibernate,org.eclipse.emf.cdo.tests.hibernate.client",
- reference;version="1.0.0",
- reference.impl;version="1.0.0",
- reference.util;version="1.0.0"
+Export-Package: base;version="1.0.1",
+ base.impl;version="1.0.1",
+ base.util;version="1.0.1",
+ derived;version="1.0.1",
+ derived.impl;version="1.0.1",
+ derived.util;version="1.0.1",
+ interface_;version="1.0.1",
+ interface_.impl;version="1.0.1",
+ interface_.util;version="1.0.1",
+ org.eclipse.emf.cdo.tests;version="1.0.1",
+ org.eclipse.emf.cdo.tests.bugzilla;version="1.0.1",
+ org.eclipse.emf.cdo.tests.store.logic;version="1.0.1",
+ org.eclipse.net4j.tests;version="1.0.1";x-friends:="org.eclipse.emf.cdo.tests.hibernate,org.eclipse.emf.cdo.tests.hibernate.client",
+ reference;version="1.0.1",
+ reference.impl;version="1.0.1",
+ reference.util;version="1.0.1"
Import-Package: org.apache.commons.collections;version="[3.2.0,4.0.0)",
org.apache.commons.logging;version="[1.1.0,2.0.0)",
org.dom4j;version="[1.6.0,2.0.0)",
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AbstractCDOTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AbstractCDOTest.java
index 4d82df6b17..506a2c287c 100644
--- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AbstractCDOTest.java
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AbstractCDOTest.java
@@ -81,13 +81,18 @@ public abstract class AbstractCDOTest extends AbstractTransportTest
startTransport();
}
- protected CDOSession openSession()
+ protected CDOSessionConfiguration createSessionConfiguration()
{
CDOSessionConfiguration configuration = CDOUtil.createSessionConfiguration();
configuration.setConnector(getConnector());
configuration.setRepositoryName(REPOSITORY_NAME);
configuration.setLegacySupportEnabled(false);
- return configuration.openSession();
+ return configuration;
+ }
+
+ protected CDOSession openSession()
+ {
+ return createSessionConfiguration().openSession();
}
protected CDOSession openModel1Session()
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AllTests.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AllTests.java
index e7d479280d..106d06bf45 100644
--- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AllTests.java
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AllTests.java
@@ -10,6 +10,8 @@
**************************************************************************/
package org.eclipse.emf.cdo.tests;
+import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla241464_Test;
+
import junit.framework.Test;
import junit.framework.TestSuite;
@@ -42,6 +44,7 @@ public class AllTests
suite.addTestSuite(RevisionDeltaTest.class);
suite.addTestSuite(IndexReconstructionTest.class);
suite.addTestSuite(NoLegacyTest.class);
+ suite.addTestSuite(Bugzilla241464_Test.class);
// TODO suite.addTestSuite(GeneratedEcoreTest.class);
// $JUnit-END$
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/ContainmentTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/ContainmentTest.java
index 1537206e1d..be37769fa6 100644
--- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/ContainmentTest.java
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/ContainmentTest.java
@@ -297,7 +297,8 @@ public class ContainmentTest extends AbstractCDOTest
assertContent(order, address);
}
- public void testUnsetSingleContainment() throws Exception
+ // TODO Re-include TC after fixing detachment
+ public void _testUnsetSingleContainment() throws Exception
{
Address address = Model1Factory.eINSTANCE.createAddress();
address.setName("Stepper");
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla241464_Test.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla241464_Test.java
new file mode 100644
index 0000000000..02d855973a
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla241464_Test.java
@@ -0,0 +1,82 @@
+/***************************************************************************
+ * Copyright (c) 2004 - 2008 Eike Stepper, Germany.
+ * 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.CDOSession;
+import org.eclipse.emf.cdo.CDOSessionConfiguration;
+import org.eclipse.emf.cdo.CDOTransaction;
+import org.eclipse.emf.cdo.common.util.TransportException;
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.tests.AbstractCDOTest;
+import org.eclipse.emf.cdo.tests.model1.Customer;
+import org.eclipse.emf.cdo.tests.model1.Model1Factory;
+
+import org.eclipse.net4j.signal.RequestWithConfirmation;
+import org.eclipse.net4j.signal.failover.NOOPFailOverStrategy;
+import org.eclipse.net4j.util.lifecycle.LifecycleUtil;
+
+import java.util.concurrent.TimeoutException;
+
+/**
+ * @author Eike Stepper
+ */
+public class Bugzilla241464_Test extends AbstractCDOTest
+{
+ public void testBugzilla241464() throws Exception
+ {
+ {
+ Customer customer = Model1Factory.eINSTANCE.createCustomer();
+ customer.setName("customer");
+
+ CDOSession session = openModel1Session();
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource resource = transaction.createResource("/test1");
+ resource.getContents().add(customer);
+
+ transaction.commit();
+ session.close();
+ }
+
+ CDOSessionConfiguration configuration = createSessionConfiguration();
+ configuration.setFailOverStrategy(new NOOPFailOverStrategy()
+ {
+ @Override
+ public <RESULT> RESULT send(RequestWithConfirmation<RESULT> request) throws Exception
+ {
+ return send(request, 2000L);
+ }
+ });
+
+ CDOSession session = configuration.openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource resource = transaction.getResource("/test1");
+
+ LifecycleUtil.deactivate(getRepository());
+
+ try
+ {
+ Customer customer = (Customer)resource.getContents().get(0);
+ System.out.println(customer.getName());
+ fail("TransportException expected");
+ }
+ catch (TransportException success)
+ {
+ if (success.getCause().getClass() != TimeoutException.class)
+ {
+ fail("TimeoutException expected");
+ }
+ }
+ finally
+ {
+ session.close();
+ }
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOSessionImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOSessionImpl.java
index 6b8c826be0..364730c2c2 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOSessionImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOSessionImpl.java
@@ -48,6 +48,7 @@ import org.eclipse.net4j.channel.IChannel;
import org.eclipse.net4j.connector.IConnector;
import org.eclipse.net4j.signal.failover.IFailOverEvent;
import org.eclipse.net4j.signal.failover.IFailOverStrategy;
+import org.eclipse.net4j.signal.failover.NOOPFailOverStrategy;
import org.eclipse.net4j.util.ImplementationError;
import org.eclipse.net4j.util.WrappedException;
import org.eclipse.net4j.util.container.Container;
@@ -197,12 +198,17 @@ public class CDOSessionImpl extends Container<CDOView> implements CDOSession, CD
this.referenceChunkSize = referenceChunkSize;
}
- public IFailOverStrategy getFailOverStrategy()
+ public synchronized IFailOverStrategy getFailOverStrategy()
{
- return failOverStrategy == null ? IFailOverStrategy.NOOP : failOverStrategy;
+ if (failOverStrategy == null)
+ {
+ failOverStrategy = new NOOPFailOverStrategy();
+ }
+
+ return failOverStrategy;
}
- public void setFailOverStrategy(IFailOverStrategy failOverStrategy)
+ public synchronized void setFailOverStrategy(IFailOverStrategy failOverStrategy)
{
if (this.failOverStrategy != null)
{
@@ -673,7 +679,7 @@ public class CDOSessionImpl extends Container<CDOView> implements CDOSession, CD
}
OpenSessionRequest request = new OpenSessionRequest(channel, repositoryName, legacySupportEnabled);
- OpenSessionResult result = request.send();
+ OpenSessionResult result = getFailOverStrategy().send(request);
sessionID = result.getSessionID();
repositoryUUID = result.getRepositoryUUID();
@@ -729,7 +735,8 @@ public class CDOSessionImpl extends Container<CDOView> implements CDOSession, CD
missingLibraries.removeAll(existingLibraries);
if (!missingLibraries.isEmpty())
{
- new LoadLibrariesRequest(channel, missingLibraries, cacheFolder).send();
+ LoadLibrariesRequest request = new LoadLibrariesRequest(channel, missingLibraries, cacheFolder);
+ getFailOverStrategy().send(request);
}
}
@@ -778,7 +785,8 @@ public class CDOSessionImpl extends Container<CDOView> implements CDOSession, CD
{
int id = view.getViewID();
byte kind = getKind(view);
- new ViewsChangedRequest(channel, id, kind).send();
+ ViewsChangedRequest request = new ViewsChangedRequest(channel, id, kind);
+ getFailOverStrategy().send(request);
}
catch (Exception ex)
{
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStateMachine.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStateMachine.java
index 7f242a3020..1b6e4dc3c8 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStateMachine.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStateMachine.java
@@ -231,9 +231,10 @@ public final class CDOStateMachine extends FiniteStateMachine<CDOState, CDOEvent
{
try
{
- IChannel channel = view.getSession().getChannel();
+ CDOSession session = view.getSession();
+ IChannel channel = session.getChannel();
VerifyRevisionRequest request = new VerifyRevisionRequest(channel, revisions);
- revisions = request.send();
+ revisions = session.getFailOverStrategy().send(request);
}
catch (Exception ex)
{

Back to the top