diff options
author | Eike Stepper | 2010-02-26 15:38:57 +0000 |
---|---|---|
committer | Eike Stepper | 2010-02-26 15:38:57 +0000 |
commit | f3bf4fd3eb3d6ff47c563b57147328a1228dae77 (patch) | |
tree | d0126b38b25af514f8954e164192dc597a34c91a | |
parent | fb0d0e24dce97d78b39bee4f070e458bffeb5200 (diff) | |
download | cdo-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
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> |