Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2010-02-26 15:38:57 +0000
committerEike Stepper2010-02-26 15:38:57 +0000
commitf3bf4fd3eb3d6ff47c563b57147328a1228dae77 (patch)
treed0126b38b25af514f8954e164192dc597a34c91a
parentfb0d0e24dce97d78b39bee4f070e458bffeb5200 (diff)
downloadcdo-f3bf4fd3eb3d6ff47c563b57147328a1228dae77.tar.gz
cdo-f3bf4fd3eb3d6ff47c563b57147328a1228dae77.tar.xz
cdo-f3bf4fd3eb3d6ff47c563b57147328a1228dae77.zip
[256936] Support for Offline Mode
https://bugs.eclipse.org/bugs/show_bug.cgi?id=256936
-rw-r--r--plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitDelegationRequest.java16
-rw-r--r--plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitTransactionRequest.java7
-rw-r--r--plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitDelegationIndication.java18
-rw-r--r--plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitTransactionIndication.java7
-rw-r--r--plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitXATransactionPhase3Indication.java4
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/CommitManager.java2
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/TransactionCommitContext.java11
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/XATransactionCommitContext.java4
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/embedded/EmbeddedClientSessionProtocol.java2
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/offline/CloneRepository.java46
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/offline/CloneSynchronizer.java13
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/InternalCommitContext.java2
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/OfflineTest.java6
-rw-r--r--releng/org.eclipse.emf.cdo.releng/build.xml1
14 files changed, 58 insertions, 81 deletions
diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitDelegationRequest.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitDelegationRequest.java
index dce5708a7d..4d8e858e5f 100644
--- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitDelegationRequest.java
+++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitDelegationRequest.java
@@ -12,12 +12,12 @@ package org.eclipse.emf.cdo.internal.net4j.protocol;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
import org.eclipse.emf.cdo.common.commit.CDOCommitData;
+import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDProvider;
-import org.eclipse.emf.cdo.common.io.CDODataInput;
+import org.eclipse.emf.cdo.common.id.CDOIDTemp;
import org.eclipse.emf.cdo.common.io.CDODataOutput;
import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants;
-
-import org.eclipse.emf.spi.cdo.CDOSessionProtocol.CommitTransactionResult;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageRegistry.MetaInstanceMapper;
import java.io.IOException;
@@ -50,14 +50,8 @@ public class CommitDelegationRequest extends CommitTransactionRequest
}
@Override
- protected void confirmingMappingNewPackages(CDODataInput in, CommitTransactionResult result) throws IOException
- {
- // Do nothing. Mappings and other results are delivered through CommitNotification signal.
- }
-
- @Override
- protected void confirmingMappingNewObjects(CDODataInput in, CommitTransactionResult result) throws IOException
+ protected void remapMetaInstanceID(MetaInstanceMapper metaInstanceMapper, CDOIDTemp oldID, CDOID newID)
{
- // Do nothing. Mappings and other results are delivered through CommitNotification signal.
+ // Do nothing
}
}
diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitTransactionRequest.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitTransactionRequest.java
index d7a498fe13..8a9d66f594 100644
--- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitTransactionRequest.java
+++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitTransactionRequest.java
@@ -280,13 +280,18 @@ public class CommitTransactionRequest extends RequestWithMonitoring<CommitTransa
{
CDOIDTemp oldID = (CDOIDTemp)oldRange.get(i);
CDOID newID = newRange.get(i);
- metaInstanceMapper.remapMetaInstanceID(oldID, newID);
result.addIDMapping(oldID, newID);
+ remapMetaInstanceID(metaInstanceMapper, oldID, newID);
}
}
}
}
+ protected void remapMetaInstanceID(MetaInstanceMapper metaInstanceMapper, CDOIDTemp oldID, CDOID newID)
+ {
+ metaInstanceMapper.remapMetaInstanceID(oldID, newID);
+ }
+
protected void confirmingMappingNewObjects(CDODataInput in, CommitTransactionResult result) throws IOException
{
for (;;)
diff --git a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitDelegationIndication.java b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitDelegationIndication.java
index b3fea05dab..1278c7b839 100644
--- a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitDelegationIndication.java
+++ b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitDelegationIndication.java
@@ -64,22 +64,4 @@ public class CommitDelegationIndication extends CommitTransactionIndication
transaction.close();
}
}
-
- @Override
- protected void respondingMappingNewPackages(CDODataOutput out) throws Exception
- {
- // Do nothing. Mappings and other results are delivered through CommitNotification signal.
- }
-
- @Override
- protected void respondingMappingNewObjects(CDODataOutput out) throws Exception
- {
- // Do nothing. Mappings and other results are delivered through CommitNotification signal.
- }
-
- @Override
- protected boolean notifySender()
- {
- return true;
- }
}
diff --git a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitTransactionIndication.java b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitTransactionIndication.java
index 79bd2ffaad..eab3b008c8 100644
--- a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitTransactionIndication.java
+++ b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitTransactionIndication.java
@@ -304,7 +304,7 @@ public class CommitTransactionIndication extends IndicationWithMonitoring
}
finally
{
- commitContext.postCommit(success, notifySender());
+ commitContext.postCommit(success);
}
}
@@ -362,9 +362,4 @@ public class CommitTransactionIndication extends IndicationWithMonitoring
throw new IllegalStateException("Illegal transaction: " + view); //$NON-NLS-1$
}
-
- protected boolean notifySender()
- {
- return false;
- }
}
diff --git a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitXATransactionPhase3Indication.java b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitXATransactionPhase3Indication.java
index 9797aeb741..79669cc02e 100644
--- a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitXATransactionPhase3Indication.java
+++ b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitXATransactionPhase3Indication.java
@@ -4,7 +4,7 @@
* 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:
* Simon McDuff - initial API and implementation
* Eike Stepper - maintenance
@@ -43,7 +43,7 @@ public class CommitXATransactionPhase3Indication extends CommitTransactionIndica
respondingMappingNewPackages(out);
}
- commitContext.postCommit(success, false);
+ commitContext.postCommit(success);
}
@Override
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/CommitManager.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/CommitManager.java
index 4695991cd2..4ef6b3ac86 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/CommitManager.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/CommitManager.java
@@ -116,7 +116,7 @@ public class CommitManager extends Lifecycle implements InternalCommitManager
{
contextEntry.getFuture().cancel(true);
commitContext.rollback("Remote rollback"); //$NON-NLS-1$
- commitContext.postCommit(false, false);
+ commitContext.postCommit(false);
}
}
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/TransactionCommitContext.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/TransactionCommitContext.java
index bdded06479..7c51ed02db 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/TransactionCommitContext.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/TransactionCommitContext.java
@@ -346,13 +346,13 @@ public class TransactionCommitContext implements InternalCommitContext
this.timeStamp = timeStamp;
}
- public void postCommit(boolean success, boolean notifySender)
+ public void postCommit(boolean success)
{
try
{
if (success)
{
- InternalSession sender = notifySender ? null : transaction.getSession();
+ InternalSession sender = transaction.getSession();
CDOCommitInfo createCommitInfo = createCommitInfo();
InternalSessionManager sessionManager = transaction.getRepository().getSessionManager();
@@ -488,13 +488,18 @@ public class TransactionCommitContext implements InternalCommitContext
idMappings.put(oldID, newID);
}
- metaIDRanges.add(newRange);
+ addMetaIDRange(newRange);
if (TRACER.isEnabled())
{
TRACER.format("Mapping meta ID range: {0} --> {1}", oldRange, newRange); //$NON-NLS-1$
}
}
+ protected void addMetaIDRange(CDOIDMetaRange range)
+ {
+ metaIDRanges.add(range);
+ }
+
protected void lockObjects() throws InterruptedException
{
lockedObjects.clear();
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/XATransactionCommitContext.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/XATransactionCommitContext.java
index c9bac7441f..2f72add36d 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/XATransactionCommitContext.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/XATransactionCommitContext.java
@@ -77,12 +77,12 @@ public class XATransactionCommitContext extends TransactionCommitContext
}
@Override
- public void postCommit(boolean success, boolean notifySender)
+ public void postCommit(boolean success)
{
StoreThreadLocal.setAccessor(getAccessor());
InternalRepository repository = getTransaction().getRepository();
repository.getCommitManager().remove(this);
- super.postCommit(success, notifySender);
+ super.postCommit(success);
}
@Override
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/embedded/EmbeddedClientSessionProtocol.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/embedded/EmbeddedClientSessionProtocol.java
index 901d3279eb..ba3fa6d8e8 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/embedded/EmbeddedClientSessionProtocol.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/embedded/EmbeddedClientSessionProtocol.java
@@ -359,7 +359,7 @@ public class EmbeddedClientSessionProtocol extends Lifecycle implements CDOSessi
{
if (serverCommitContext != null)
{
- serverCommitContext.postCommit(success, false);
+ serverCommitContext.postCommit(success);
}
monitor.done();
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/offline/CloneRepository.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/offline/CloneRepository.java
index 06ccaaaeb0..9649492067 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/offline/CloneRepository.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/offline/CloneRepository.java
@@ -18,6 +18,7 @@ import org.eclipse.emf.cdo.common.commit.CDOCommitInfo;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDAndVersion;
import org.eclipse.emf.cdo.common.id.CDOIDUtil;
+import org.eclipse.emf.cdo.common.model.CDOPackageInfo;
import org.eclipse.emf.cdo.common.model.CDOPackageUnit;
import org.eclipse.emf.cdo.common.revision.CDORevisionKey;
import org.eclipse.emf.cdo.internal.server.Repository;
@@ -30,7 +31,6 @@ import org.eclipse.emf.cdo.spi.server.InternalSession;
import org.eclipse.emf.cdo.spi.server.InternalTransaction;
import org.eclipse.net4j.util.collection.IndexedList;
-import org.eclipse.net4j.util.concurrent.SynchronizingCorrelator;
import org.eclipse.net4j.util.om.monitor.Monitor;
import org.eclipse.net4j.util.om.monitor.OMMonitor;
import org.eclipse.net4j.util.transaction.TransactionException;
@@ -40,6 +40,7 @@ import org.eclipse.emf.spi.cdo.CDOSessionProtocol.CommitTransactionResult;
import java.util.Arrays;
import java.util.List;
+import java.util.Map;
/**
* @author Eike Stepper
@@ -52,8 +53,6 @@ public class CloneRepository extends Repository.Default
private int lastTransactionID;
- private SynchronizingCorrelator<Long, CDOCommitInfo> commitDelegations = new SynchronizingCorrelator<Long, CDOCommitInfo>();
-
public CloneRepository()
{
}
@@ -92,7 +91,6 @@ public class CloneRepository extends Repository.Default
long timeStamp = commitInfo.getTimeStamp();
setLastCommitTimeStamp(timeStamp);
- commitDelegations.putIfCorrelated(timeStamp, commitInfo);
}
catch (RuntimeException ex)
{
@@ -101,7 +99,7 @@ public class CloneRepository extends Repository.Default
}
finally
{
- commitContext.postCommit(success, false);
+ commitContext.postCommit(success);
transaction.close();
}
}
@@ -273,13 +271,7 @@ public class CloneRepository extends Repository.Default
@Override
public void write(OMMonitor monitor)
{
- // InternalCDOPackageRegistry masterPackageRegistry = master.getPackageRegistry();
- // for (InternalCDOPackageUnit packageUnit : getNewPackageUnits())
- // {
- // // packageUnit.setState(CDOPackageUnit.State.NEW);
- // // getPackageRegistry().putPackageUnit(packageUnit);
- // masterPackageRegistry.putPackageUnit(packageUnit);
- // }
+ // Do nothing
}
@Override
@@ -301,20 +293,22 @@ public class CloneRepository extends Repository.Default
long timeStamp = result.getTimeStamp();
setTimeStamp(timeStamp);
- CDOCommitInfo commitInfo = commitDelegations.get(timeStamp, 100000L);
- System.out.println(commitInfo);
- throw new RuntimeException();
-
- // ConcurrencyUtil.sleep(100000000);
+ for (CDOPackageUnit newPackageUnit : commitData.getNewPackageUnits())
+ {
+ for (CDOPackageInfo packageInfo : newPackageUnit.getPackageInfos())
+ {
+ addMetaIDRange(packageInfo.getMetaIDRange());
+ }
+ }
- // Map<CDOID, CDOID> idMappings = result.getIDMappings();
- // for (Entry<CDOID, CDOID> idMapping : idMappings.entrySet())
- // {
- // CDOID oldID = idMapping.getKey();
- // CDOID newID = idMapping.getValue();
- // addIDMapping(oldID, newID);
- // }
+ Map<CDOID, CDOID> idMappings = result.getIDMappings();
+ for (Map.Entry<CDOID, CDOID> idMapping : idMappings.entrySet())
+ {
+ CDOID oldID = idMapping.getKey();
+ CDOID newID = idMapping.getValue();
+ addIDMapping(oldID, newID);
+ }
}
/**
@@ -330,9 +324,7 @@ public class CloneRepository extends Repository.Default
@Override
public CDOPackageUnit get(int index)
{
- InternalCDOPackageUnit packageUnit = newPackageUnits[index];
- // packageUnit.setState(CDOPackageUnit.State.NEW);
- return packageUnit;
+ return newPackageUnits[index];
}
@Override
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/offline/CloneSynchronizer.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/offline/CloneSynchronizer.java
index b991af1ebc..553ad8fbb3 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/offline/CloneSynchronizer.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/offline/CloneSynchronizer.java
@@ -204,13 +204,16 @@ public class CloneSynchronizer extends QueueRunner
}
catch (Exception ex)
{
- OM.LOG.warn("Connection attempt failed. Retrying in " + retryInterval + " seconds...", ex);
+ if (isActive())
+ {
+ OM.LOG.warn("Connection attempt failed. Retrying in " + retryInterval + " seconds...", ex);
- checkActive();
- ConcurrencyUtil.sleep(1000L * retryInterval); // TODO Respect deactivation
+ ConcurrencyUtil.sleep(1000L * retryInterval); // TODO Respect deactivation
+
+ checkActive();
+ connect();
+ }
- checkActive();
- connect();
return;
}
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/InternalCommitContext.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/InternalCommitContext.java
index 7b641d9910..8b713a5a9a 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/InternalCommitContext.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/InternalCommitContext.java
@@ -61,7 +61,7 @@ public interface InternalCommitContext extends IStoreAccessor.CommitContext
public void rollback(String message);
- public void postCommit(boolean success, boolean notifySender);
+ public void postCommit(boolean success);
public void setNewPackageUnits(InternalCDOPackageUnit[] newPackageUnits);
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/OfflineTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/OfflineTest.java
index 7fbd306bc5..73ef8491dc 100644
--- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/OfflineTest.java
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/OfflineTest.java
@@ -46,7 +46,7 @@ public class OfflineTest extends AbstractCDOTest
return (MEMOffline)super.getRepositoryConfig();
}
- public void _testSynchronizer() throws Exception
+ public void testMasterCommits_ArrivalInClone() throws Exception
{
CDOSession session = openSession(getRepository().getName() + "_master");
CDOTransaction transaction = session.openTransaction();
@@ -109,7 +109,7 @@ public class OfflineTest extends AbstractCDOTest
}
}
- public void _testCloneClient() throws Exception
+ public void testMasterCommits_NotificationsFromClone() throws Exception
{
CDOSession masterSession = openSession(getRepository().getName() + "_master");
CDOTransaction transaction = masterSession.openTransaction();
@@ -178,7 +178,7 @@ public class OfflineTest extends AbstractCDOTest
listener.clearEvents();
}
- public void testClientCommit() throws Exception
+ public void testClientCommits() throws Exception
{
TestListener listener = new TestListener();
CDOSession masterSession = openSession(getRepository().getName() + "_master");
diff --git a/releng/org.eclipse.emf.cdo.releng/build.xml b/releng/org.eclipse.emf.cdo.releng/build.xml
index 135ab27ec0..6ed56069b0 100644
--- a/releng/org.eclipse.emf.cdo.releng/build.xml
+++ b/releng/org.eclipse.emf.cdo.releng/build.xml
@@ -236,6 +236,7 @@
<arg value="org.eclipse.emf.cdo.tests/CDO AllTests.launch" />
<arg value="-o" />
<arg value="${result}/testReport.xml.tmp" />
+ <arg value="--terseXML" />
<arg value="--xml" />
<arg value="${result}/coverageReport.xml" />
</cmdargs>

Back to the top