[573658] ReconnectionSession mechanism does not update some items after a reconnection
https://bugs.eclipse.org/bugs/show_bug.cgi?id=573658
diff --git a/features/org.eclipse.emf.cdo-feature/feature.xml b/features/org.eclipse.emf.cdo-feature/feature.xml
index 12a9dd7..0ddf6a8 100644
--- a/features/org.eclipse.emf.cdo-feature/feature.xml
+++ b/features/org.eclipse.emf.cdo-feature/feature.xml
@@ -13,7 +13,7 @@
<feature
id="org.eclipse.emf.cdo"
label="%featureName"
- version="4.14.2.qualifier"
+ version="4.15.0.qualifier"
provider-name="%providerName"
license-feature="org.eclipse.emf.cdo.license"
license-feature-version="0.0.0">
diff --git a/features/org.eclipse.emf.cdo-feature/pom.xml b/features/org.eclipse.emf.cdo-feature/pom.xml
index d0ce231..d89efe9 100644
--- a/features/org.eclipse.emf.cdo-feature/pom.xml
+++ b/features/org.eclipse.emf.cdo-feature/pom.xml
@@ -25,7 +25,7 @@
<groupId>org.eclipse.emf.cdo.features</groupId>
<artifactId>org.eclipse.emf.cdo</artifactId>
- <version>4.14.2-SNAPSHOT</version>
+ <version>4.15.0-SNAPSHOT</version>
<packaging>eclipse-feature</packaging>
</project>
diff --git a/features/org.eclipse.emf.cdo.sdk-feature/feature.xml b/features/org.eclipse.emf.cdo.sdk-feature/feature.xml
index 4a8122e..b7fb92e 100644
--- a/features/org.eclipse.emf.cdo.sdk-feature/feature.xml
+++ b/features/org.eclipse.emf.cdo.sdk-feature/feature.xml
@@ -12,7 +12,7 @@
<feature
id="org.eclipse.emf.cdo.sdk"
label="%featureName"
- version="5.7.2.qualifier"
+ version="5.8.0.qualifier"
provider-name="%providerName"
image="eclipse_update_120.jpg"
license-feature="org.eclipse.emf.cdo.license"
diff --git a/features/org.eclipse.emf.cdo.sdk-feature/pom.xml b/features/org.eclipse.emf.cdo.sdk-feature/pom.xml
index e8d008b..23fa30c 100644
--- a/features/org.eclipse.emf.cdo.sdk-feature/pom.xml
+++ b/features/org.eclipse.emf.cdo.sdk-feature/pom.xml
@@ -25,7 +25,7 @@
<groupId>org.eclipse.emf.cdo.features</groupId>
<artifactId>org.eclipse.emf.cdo.sdk</artifactId>
- <version>5.7.2-SNAPSHOT</version>
+ <version>5.8.0-SNAPSHOT</version>
<packaging>eclipse-feature</packaging>
</project>
diff --git a/features/org.eclipse.emf.cdo.server-feature/feature.xml b/features/org.eclipse.emf.cdo.server-feature/feature.xml
index bfc36b9..cf0b6c7 100644
--- a/features/org.eclipse.emf.cdo.server-feature/feature.xml
+++ b/features/org.eclipse.emf.cdo.server-feature/feature.xml
@@ -12,7 +12,7 @@
<feature
id="org.eclipse.emf.cdo.server"
label="%featureName"
- version="4.14.2.qualifier"
+ version="4.15.0.qualifier"
provider-name="%providerName"
image="eclipse_update_120.jpg"
license-feature="org.eclipse.emf.cdo.license"
diff --git a/features/org.eclipse.emf.cdo.server-feature/pom.xml b/features/org.eclipse.emf.cdo.server-feature/pom.xml
index 581c725..a6a36e8 100644
--- a/features/org.eclipse.emf.cdo.server-feature/pom.xml
+++ b/features/org.eclipse.emf.cdo.server-feature/pom.xml
@@ -25,7 +25,7 @@
<groupId>org.eclipse.emf.cdo.features</groupId>
<artifactId>org.eclipse.emf.cdo.server</artifactId>
- <version>4.14.2-SNAPSHOT</version>
+ <version>4.15.0-SNAPSHOT</version>
<packaging>eclipse-feature</packaging>
</project>
diff --git a/features/org.eclipse.emf.cdo.server.embedded-feature/feature.xml b/features/org.eclipse.emf.cdo.server.embedded-feature/feature.xml
index 5d838b7..5f40da1 100644
--- a/features/org.eclipse.emf.cdo.server.embedded-feature/feature.xml
+++ b/features/org.eclipse.emf.cdo.server.embedded-feature/feature.xml
@@ -12,7 +12,7 @@
<feature
id="org.eclipse.emf.cdo.server.embedded"
label="%featureName"
- version="4.14.2.qualifier"
+ version="4.15.0.qualifier"
provider-name="%providerName"
image="eclipse_update_120.jpg"
license-feature="org.eclipse.emf.cdo.license"
diff --git a/features/org.eclipse.emf.cdo.server.embedded-feature/pom.xml b/features/org.eclipse.emf.cdo.server.embedded-feature/pom.xml
index 5921197..c80a2de 100644
--- a/features/org.eclipse.emf.cdo.server.embedded-feature/pom.xml
+++ b/features/org.eclipse.emf.cdo.server.embedded-feature/pom.xml
@@ -25,7 +25,7 @@
<groupId>org.eclipse.emf.cdo.features</groupId>
<artifactId>org.eclipse.emf.cdo.server.embedded</artifactId>
- <version>4.14.2-SNAPSHOT</version>
+ <version>4.15.0-SNAPSHOT</version>
<packaging>eclipse-feature</packaging>
</project>
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/protocol/CDOProtocolVersion.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/protocol/CDOProtocolVersion.java
index 2be9273..b85480f 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/protocol/CDOProtocolVersion.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/protocol/CDOProtocolVersion.java
@@ -19,8 +19,9 @@
static
{
- VALUE = 40; // Prevent protocol version constant inlining
+ VALUE = 41; // ReconnectionSession mechanism does not update some items after a reconnection
+ // VALUE = 40; // Prevent protocol version constant inlining
// VALUE = 39; // CDOLockOwner.isDurableView becomes derived
// VALUE = 38; // CDOBranchTag support
// VALUE = 37; // SIGNAL_ACKNOWLEDGE_COMPRESSED_STRINGS
diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/CDONet4jSessionImpl.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/CDONet4jSessionImpl.java
index b1d17fc..3f7b5f5 100644
--- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/CDONet4jSessionImpl.java
+++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/CDONet4jSessionImpl.java
@@ -48,6 +48,7 @@
import org.eclipse.emf.spi.cdo.CDOSessionProtocol;
import org.eclipse.emf.spi.cdo.CDOSessionProtocol.OpenSessionResult;
+import org.eclipse.emf.spi.cdo.InternalCDORemoteSessionManager;
import java.util.concurrent.atomic.AtomicReference;
@@ -188,8 +189,12 @@
PassiveUpdateMode passiveUpdateMode = options().getPassiveUpdateMode();
LockNotificationMode lockNotificationMode = options().getLockNotificationMode();
+ InternalCDORemoteSessionManager remoteSessionManager = getRemoteSessionManager();
+ boolean subscribed = remoteSessionManager != null ? remoteSessionManager.isSubscribed() : false;
+
// TODO (CD) The next call is on the CDOClientProtocol; shouldn't it be on the DelegatingSessionProtocol instead?
- OpenSessionResult result = protocol.openSession(repositoryName, userID, passiveUpdateEnabled, passiveUpdateMode, lockNotificationMode);
+ OpenSessionResult result = protocol.openSession(repositoryName, getSessionID(), userID, passiveUpdateEnabled, passiveUpdateMode, lockNotificationMode,
+ subscribed);
if (result == null)
{
diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java
index fd6170d..9be1f65 100644
--- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java
+++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java
@@ -120,10 +120,17 @@
return packageURICompressor;
}
- public OpenSessionResult openSession(String repositoryName, String userID, boolean passiveUpdateEnabled, PassiveUpdateMode passiveUpdateMode,
- LockNotificationMode lockNotificationMode)
+ public OpenSessionResult openSession(String repositoryName, int sessionID, String userID, boolean passiveUpdateEnabled, PassiveUpdateMode passiveUpdateMode,
+ LockNotificationMode lockNotificationMode, boolean subscribed)
{
- return send(new OpenSessionRequest(this, repositoryName, userID, passiveUpdateEnabled, passiveUpdateMode, lockNotificationMode), new Monitor());
+ return send(new OpenSessionRequest(this, repositoryName, sessionID, userID, passiveUpdateEnabled, passiveUpdateMode, lockNotificationMode, subscribed),
+ new Monitor());
+ }
+
+ @Override
+ public void openedSession()
+ {
+ send(new OpenedSessionRequest(this));
}
@Override
@@ -145,12 +152,6 @@
}
@Override
- public void openedSession()
- {
- send(new OpenedSessionRequest(this));
- }
-
- @Override
public EPackage[] loadPackages(CDOPackageUnit packageUnit)
{
return send(new LoadPackagesRequest(this, (InternalCDOPackageUnit)packageUnit));
diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/OpenSessionRequest.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/OpenSessionRequest.java
index 16c63c0..c76ac60 100644
--- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/OpenSessionRequest.java
+++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/OpenSessionRequest.java
@@ -34,6 +34,8 @@
private String repositoryName;
+ private int sessionID;
+
private String userID;
private boolean passiveUpdateEnabled;
@@ -42,15 +44,19 @@
private LockNotificationMode lockNotificationMode;
- public OpenSessionRequest(CDOClientProtocol protocol, String repositoryName, String userID, boolean passiveUpdateEnabled, PassiveUpdateMode passiveUpdateMode,
- LockNotificationMode lockNotificationMode)
+ private boolean subscribed;
+
+ public OpenSessionRequest(CDOClientProtocol protocol, String repositoryName, int sessionID, String userID, boolean passiveUpdateEnabled,
+ PassiveUpdateMode passiveUpdateMode, LockNotificationMode lockNotificationMode, boolean subscribed)
{
super(protocol, CDOProtocolConstants.SIGNAL_OPEN_SESSION);
this.repositoryName = repositoryName;
+ this.sessionID = sessionID;
this.userID = userID;
this.passiveUpdateEnabled = passiveUpdateEnabled;
this.passiveUpdateMode = passiveUpdateMode;
this.lockNotificationMode = lockNotificationMode;
+ this.subscribed = subscribed;
}
@Override
@@ -65,6 +71,13 @@
if (TRACER.isEnabled())
{
+ TRACER.format("Writing sessionID: {0}", sessionID); //$NON-NLS-1$
+ }
+
+ out.writeXInt(sessionID);
+
+ if (TRACER.isEnabled())
+ {
TRACER.format("Writing userID: {0}", userID); //$NON-NLS-1$
}
@@ -90,6 +103,13 @@
}
out.writeEnum(lockNotificationMode);
+
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("Writing subscribed: {0}", subscribed); //$NON-NLS-1$
+ }
+
+ out.writeBoolean(subscribed);
}
@Override
diff --git a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/OpenSessionIndication.java b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/OpenSessionIndication.java
index b17a665..8c5f19f 100644
--- a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/OpenSessionIndication.java
+++ b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/OpenSessionIndication.java
@@ -42,6 +42,8 @@
private String repositoryName;
+ private int sessionID;
+
private String userID;
private boolean passiveUpdateEnabled;
@@ -50,6 +52,8 @@
private LockNotificationMode lockNotificationMode;
+ private boolean subscribed;
+
private InternalRepository repository;
private InternalSession session;
@@ -92,6 +96,12 @@
TRACER.format("Read repositoryName: {0}", repositoryName); //$NON-NLS-1$
}
+ sessionID = in.readXInt();
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("Read sessionID: {0}", sessionID); //$NON-NLS-1$
+ }
+
userID = in.readString();
if (TRACER.isEnabled())
{
@@ -115,6 +125,13 @@
{
TRACER.format("Read lockNotificationMode: {0}", lockNotificationMode); //$NON-NLS-1$
}
+
+ subscribed = in.readBoolean();
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("Read subscribed: {0}", subscribed); //$NON-NLS-1$
+ }
+
}
@Override
@@ -137,7 +154,7 @@
try
{
InternalSessionManager sessionManager = repository.getSessionManager();
- session = sessionManager.openSession(protocol);
+ session = sessionManager.openSession(protocol, sessionID);
}
catch (NotAuthenticatedException ex)
{
@@ -166,6 +183,7 @@
session.setPassiveUpdateEnabled(passiveUpdateEnabled);
session.setPassiveUpdateMode(passiveUpdateMode);
session.setLockNotificationMode(lockNotificationMode);
+ session.setSubscribed(subscribed);
protocol.setInfraStructure(session);
if (TRACER.isEnabled())
diff --git a/plugins/org.eclipse.emf.cdo.server/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.cdo.server/META-INF/MANIFEST.MF
index 299d819..4422841 100644
--- a/plugins/org.eclipse.emf.cdo.server/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.cdo.server/META-INF/MANIFEST.MF
@@ -1,7 +1,7 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-SymbolicName: org.eclipse.emf.cdo.server;singleton:=true
-Bundle-Version: 4.13.1.qualifier
+Bundle-Version: 4.14.0.qualifier
Bundle-Name: %pluginName
Bundle-Vendor: %providerName
Bundle-Localization: plugin
@@ -10,17 +10,17 @@
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-ClassPath: .
Require-Bundle: org.eclipse.emf.cdo;bundle-version="[4.0.0,5.0.0)";visibility:=reexport
-Export-Package: org.eclipse.emf.cdo.internal.server;version="4.13.1";
+Export-Package: org.eclipse.emf.cdo.internal.server;version="4.14.0";
x-friends:="org.eclipse.emf.cdo.server.db,
org.eclipse.emf.cdo.server.net4j,
org.eclipse.emf.cdo.tests,
org.eclipse.emf.cdo.workspace,
org.eclipse.emf.cdo.server.embedded",
- org.eclipse.emf.cdo.internal.server.bundle;version="4.13.1";x-internal:=true,
- org.eclipse.emf.cdo.internal.server.mem;version="4.13.1";x-friends:="org.eclipse.emf.cdo.tests",
- org.eclipse.emf.cdo.internal.server.messages;version="4.13.1";x-internal:=true,
- org.eclipse.emf.cdo.internal.server.syncing;version="4.13.1";x-friends:="org.eclipse.emf.cdo.tests",
- org.eclipse.emf.cdo.server;version="4.13.1",
- org.eclipse.emf.cdo.server.mem;version="4.13.1",
- org.eclipse.emf.cdo.spi.server;version="4.13.1"
+ org.eclipse.emf.cdo.internal.server.bundle;version="4.14.0";x-internal:=true,
+ org.eclipse.emf.cdo.internal.server.mem;version="4.14.0";x-friends:="org.eclipse.emf.cdo.tests",
+ org.eclipse.emf.cdo.internal.server.messages;version="4.14.0";x-internal:=true,
+ org.eclipse.emf.cdo.internal.server.syncing;version="4.14.0";x-friends:="org.eclipse.emf.cdo.tests",
+ org.eclipse.emf.cdo.server;version="4.14.0",
+ org.eclipse.emf.cdo.server.mem;version="4.14.0",
+ org.eclipse.emf.cdo.spi.server;version="4.14.0"
Automatic-Module-Name: org.eclipse.emf.cdo.server
diff --git a/plugins/org.eclipse.emf.cdo.server/pom.xml b/plugins/org.eclipse.emf.cdo.server/pom.xml
index 9f5e334..e5ad58a 100644
--- a/plugins/org.eclipse.emf.cdo.server/pom.xml
+++ b/plugins/org.eclipse.emf.cdo.server/pom.xml
@@ -25,7 +25,7 @@
<groupId>org.eclipse.emf.cdo</groupId>
<artifactId>org.eclipse.emf.cdo.server</artifactId>
- <version>4.13.1-SNAPSHOT</version>
+ <version>4.14.0-SNAPSHOT</version>
<packaging>eclipse-plugin</packaging>
</project>
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/SessionManager.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/SessionManager.java
index 440bebf..f2f3f29 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/SessionManager.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/SessionManager.java
@@ -258,10 +258,34 @@
@Override
public InternalSession openSession(ISessionProtocol sessionProtocol)
{
- int id = lastSessionID.incrementAndGet();
- if (TRACER.isEnabled())
+ return openSession(sessionProtocol, 0);
+ }
+
+ /**
+ * @since 2.0
+ */
+ @Override
+ public InternalSession openSession(ISessionProtocol sessionProtocol, int sessionID)
+ {
+ int id;
+
+ if (sessionID == 0)
{
- TRACER.trace("Opening session " + id); //$NON-NLS-1$
+ id = lastSessionID.incrementAndGet();
+
+ if (TRACER.isEnabled())
+ {
+ TRACER.trace("Opening session " + id); //$NON-NLS-1$
+ }
+ }
+ else
+ {
+ id = sessionID;
+
+ if (TRACER.isEnabled())
+ {
+ TRACER.trace("Reopening session " + id); //$NON-NLS-1$
+ }
}
String userID = authenticateUser(sessionProtocol);
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/InternalSessionManager.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/InternalSessionManager.java
index 7b3d646..4d7af12 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/InternalSessionManager.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/InternalSessionManager.java
@@ -119,6 +119,12 @@
*/
public InternalSession openSession(ISessionProtocol sessionProtocol);
+ /**
+ * @return Never <code>null</code>
+ * @since 4.14
+ */
+ public InternalSession openSession(ISessionProtocol protocol, int sessionID);
+
public void sessionClosed(InternalSession session);
/**
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/ReconnectingSessionTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/ReconnectingSessionTest.java
index a343ba2..5a895ef 100644
--- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/ReconnectingSessionTest.java
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/ReconnectingSessionTest.java
@@ -17,6 +17,9 @@
import org.eclipse.emf.cdo.net4j.CDOSessionRecoveryEvent;
import org.eclipse.emf.cdo.net4j.ReconnectingCDOSessionConfiguration;
import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.session.remote.CDORemoteSession;
+import org.eclipse.emf.cdo.session.remote.CDORemoteSessionManager;
+import org.eclipse.emf.cdo.session.remote.CDORemoteSessionMessage;
import org.eclipse.emf.cdo.tests.config.IRepositoryConfig;
import org.eclipse.emf.cdo.tests.config.ISessionConfig;
import org.eclipse.emf.cdo.tests.config.impl.ConfigTest.Requires;
@@ -38,6 +41,9 @@
import org.eclipse.emf.spi.cdo.InternalCDOView;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
import java.util.concurrent.CountDownLatch;
/**
@@ -67,7 +73,7 @@
ITCPAcceptor acceptor = null;
CDONet4jSession reconnectingSession = null;
-
+ CDOTransaction durableTransaction = null;
try
{
IManagedContainer serverContainer = getServerContainer();
@@ -84,6 +90,7 @@
configuration.setHeartBeatEnabled(true);
reconnectingSession = (CDONet4jSession)openSession(configuration);
+
dumpEvents(reconnectingSession);
final CountDownLatch recoveryStarted = new CountDownLatch(1);
@@ -109,6 +116,9 @@
}
});
+ RemoteMessageListener remoteMessageListener = new RemoteMessageListener();
+ reconnectingSession.getRemoteSessionManager().addListener(remoteMessageListener);
+
CDOView viewWithLockNotifications = reconnectingSession.openView();
viewWithLockNotifications.options().setLockNotificationEnabled(true);
@@ -126,6 +136,16 @@
commitAndSync(transaction, view);
assertEquals(2, resource2.getContents().size());
+ sendMessageToAllSessions("message1", session1);
+ remoteMessageListener.assertReceivedMessages(Arrays.asList("message1"));
+
+ durableTransaction = reconnectingSession.openTransaction();
+ durableTransaction.enableDurableLocking();
+ durableTransaction.options().setAutoReleaseLocksEnabled(false);
+ CDOResource lockRes = durableTransaction.createResource(getResourcePath("durableLockTest"));
+ durableTransaction.commit();
+ lockRes.cdoWriteLock().lock(1000);
+
IOUtil.OUT().println();
IOUtil.OUT().println("Deactivating acceptor...");
LifecycleUtil.deactivate(acceptor);
@@ -144,15 +164,69 @@
assertEquals(3, resource2.getContents().size());
checkLockNotifications(resource1, resReconn);
+
+ sendMessageToAllSessions("message2", session1);
+ remoteMessageListener.assertReceivedMessages(Arrays.asList("message1", "message2"));
+
+ durableTransaction.refreshLockStates(null);
+ assertFalse(lockRes.cdoWriteLock().isLockedByOthers());
+ assertTrue(lockRes.cdoWriteLock().isLocked());
}
finally
-
{
+ if (durableTransaction != null)
+ {
+ durableTransaction.disableDurableLocking(true);
+ }
+
LifecycleUtil.deactivate(reconnectingSession);
LifecycleUtil.deactivate(acceptor);
}
}
+ private void sendMessageToAllSessions(String type, CDOSession session) throws InterruptedException
+ {
+ CDORemoteSession[] remoteSessions = session.getRemoteSessionManager().getRemoteSessions();
+ for (CDORemoteSession remoteSession : remoteSessions)
+ {
+ remoteSession.sendMessage(new CDORemoteSessionMessage(type));
+ }
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ private static final class RemoteMessageListener extends CDORemoteSessionManager.EventAdapter
+ {
+ private List<String> received = new ArrayList<>();
+
+ public RemoteMessageListener()
+ {
+ }
+
+ @Override
+ protected void onMessageReceived(final CDORemoteSession remoteSession, final CDORemoteSessionMessage message)
+ {
+ received.add(message.getType());
+ }
+
+ public void assertReceivedMessages(final List<String> expected) throws InterruptedException
+ {
+ long timeout = System.currentTimeMillis() + 2000;
+ while (System.currentTimeMillis() < timeout)
+ {
+ if (expected.equals(received))
+ {
+ break;
+ }
+
+ Thread.sleep(20);
+ }
+
+ assertEquals(expected, received);
+ }
+ }
+
private void checkLockNotifications(CDOResource resource1, CDOResource resReconn) throws Exception
{
CDOView viewReconn = resReconn.cdoView();