diff options
author | Eike Stepper | 2010-07-06 09:40:36 +0000 |
---|---|---|
committer | Eike Stepper | 2010-07-06 09:40:36 +0000 |
commit | 5a8156463248f97dbf51db133af290a1da83f331 (patch) | |
tree | f361ac77754127b831e250a6254bb30402b31cf1 | |
parent | e4b6a0c94e8822a7e41ab6a4cd2ab78c442d50b6 (diff) | |
download | cdo-5a8156463248f97dbf51db133af290a1da83f331.tar.gz cdo-5a8156463248f97dbf51db133af290a1da83f331.tar.xz cdo-5a8156463248f97dbf51db133af290a1da83f331.zip |
[318664] Raw replication does not send CommitNotifications
https://bugs.eclipse.org/bugs/show_bug.cgi?id=318664
15 files changed, 333 insertions, 40 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server/.settings/.api_filters b/plugins/org.eclipse.emf.cdo.server/.settings/.api_filters index cc95b1683e..0b6ed176db 100644 --- a/plugins/org.eclipse.emf.cdo.server/.settings/.api_filters +++ b/plugins/org.eclipse.emf.cdo.server/.settings/.api_filters @@ -9,15 +9,6 @@ </message_arguments> </filter> </resource> - <resource path="src/org/eclipse/emf/cdo/internal/server/Repository.java" type="org.eclipse.emf.cdo.internal.server.Repository"> - <filter id="574660632"> - <message_arguments> - <message_argument value="InternalRepository"/> - <message_argument value="CDOCommonRepository"/> - <message_argument value="Repository"/> - </message_arguments> - </filter> - </resource> <resource path="src/org/eclipse/emf/cdo/internal/server/embedded/EmbeddedClientSessionConfiguration.java" type="org.eclipse.emf.cdo.internal.server.embedded.EmbeddedClientSessionConfiguration$RepositoryInfo"> <filter id="574660632"> <message_arguments> diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java index 395babd73a..e89ade6de7 100644 --- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java +++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java @@ -57,7 +57,6 @@ import org.eclipse.emf.cdo.server.StoreThreadLocal; import org.eclipse.emf.cdo.spi.common.CDOReplicationContext; import org.eclipse.emf.cdo.spi.common.CDOReplicationInfo; import org.eclipse.emf.cdo.spi.common.branch.CDOBranchUtil; -import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranch; import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager; import org.eclipse.emf.cdo.spi.common.commit.CDOChangeSetSegment; import org.eclipse.emf.cdo.spi.common.commit.CDOCommitInfoUtil; @@ -1085,7 +1084,7 @@ public class Repository extends Container<Object> implements InternalRepository Set<CDOPackageUnit> replicatedPackageUnits = new HashSet<CDOPackageUnit>(); InternalCDOCommitInfoManager manager = getCommitInfoManager(); - List<CDOChangeSetSegment> segments = getBaselineSegments(startTime); + List<CDOChangeSetSegment> segments = getBaselineSegments(startTime, getBranchManager().getMainBranch()); for (CDOChangeSetSegment segment : segments) { List<CDOPackageUnit> newPackages = getPackageUnitsToReplicate(segment, replicatedPackageUnits); @@ -1108,23 +1107,22 @@ public class Repository extends Container<Object> implements InternalRepository } } - private List<CDOChangeSetSegment> getBaselineSegments(long startTime) + private List<CDOChangeSetSegment> getBaselineSegments(long startTime, CDOBranch branch) { List<CDOChangeSetSegment> segments = new ArrayList<CDOChangeSetSegment>(); - InternalCDOBranch branch = getBranchManager().getMainBranch(); getBaselineSegments(startTime, branch, segments); Collections.sort(segments); return segments; } - private void getBaselineSegments(long startTime, InternalCDOBranch branch, List<CDOChangeSetSegment> segments) + private void getBaselineSegments(long startTime, CDOBranch branch, List<CDOChangeSetSegment> segments) { if (startTime == CDOBranchPoint.UNSPECIFIED_DATE) { startTime = branch.getBase().getTimeStamp(); } - InternalCDOBranch[] branches = branch.getBranches(); + CDOBranch[] branches = branch.getBranches(); Arrays.sort(branches, new Comparator<CDOBranch>() { public int compare(CDOBranch o1, CDOBranch o2) @@ -1133,7 +1131,7 @@ public class Repository extends Container<Object> implements InternalRepository } }); - for (InternalCDOBranch subBranch : branches) + for (CDOBranch subBranch : branches) { long baseTimeStamp = subBranch.getBase().getTimeStamp(); if (baseTimeStamp > startTime) diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Session.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Session.java index f67d61e667..16011aa8ba 100644 --- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Session.java +++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Session.java @@ -76,6 +76,11 @@ public class Session extends Container<IView> implements InternalSession private PassiveUpdateMode passiveUpdateMode = PassiveUpdateMode.INVALIDATIONS; + private long lastUpdateTime; + + @ExcludeFromDump + private Object lastUpdateTimeLock = new Object(); + private ConcurrentMap<Integer, InternalView> views = new ConcurrentHashMap<Integer, InternalView>(); private AtomicInteger lastTempViewID = new AtomicInteger(); @@ -197,6 +202,14 @@ public class Session extends Container<IView> implements InternalSession this.passiveUpdateMode = passiveUpdateMode; } + public long getLastUpdateTime() + { + synchronized (lastUpdateTimeLock) + { + return lastUpdateTime; + } + } + public InternalView[] getElements() { checkActive(); @@ -436,6 +449,11 @@ public class Session extends Container<IView> implements InternalSession }; } }); + + synchronized (lastUpdateTimeLock) + { + lastUpdateTime = commitInfo.getTimeStamp(); + } } private boolean hasSubscription(CDOID id, InternalView[] views) 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 5d61e18c70..562f526fe9 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 @@ -923,7 +923,7 @@ public class TransactionCommitContext implements InternalCommitContext addNewPackageUnits(monitor.fork()); addRevisions(newObjects, monitor.fork()); addRevisions(dirtyObjects, monitor.fork()); - revisedDetachObjects(monitor.fork()); + reviseDetachedObjects(monitor.fork()); unlockObjects(); monitor.worked(); @@ -992,7 +992,7 @@ public class TransactionCommitContext implements InternalCommitContext } } - private void revisedDetachObjects(OMMonitor monitor) + private void reviseDetachedObjects(OMMonitor monitor) { try { diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/syncing/ReplicatorCommitContext.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/syncing/ReplicatorCommitContext.java index fda29b0357..6976942048 100644 --- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/syncing/ReplicatorCommitContext.java +++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/syncing/ReplicatorCommitContext.java @@ -99,6 +99,12 @@ public final class ReplicatorCommitContext extends TransactionCommitContext } @Override + protected void checkXRefs() + { + // Do nothing + } + + @Override protected InternalCDORevision getOldRevision(InternalCDORevisionManager revisionManager, InternalCDORevisionDelta delta) { diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/syncing/SynchronizableRepository.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/syncing/SynchronizableRepository.java index 3ff1e04ed8..8acb8b9e21 100644 --- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/syncing/SynchronizableRepository.java +++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/syncing/SynchronizableRepository.java @@ -13,16 +13,28 @@ package org.eclipse.emf.cdo.internal.server.syncing; import org.eclipse.emf.cdo.common.CDOCommonRepository; import org.eclipse.emf.cdo.common.branch.CDOBranch; import org.eclipse.emf.cdo.common.branch.CDOBranchPoint; +import org.eclipse.emf.cdo.common.commit.CDOChangeSetData; +import org.eclipse.emf.cdo.common.commit.CDOCommitData; import org.eclipse.emf.cdo.common.commit.CDOCommitInfo; +import org.eclipse.emf.cdo.common.commit.CDOCommitInfoHandler; +import org.eclipse.emf.cdo.common.id.CDOIDAndVersion; +import org.eclipse.emf.cdo.common.model.CDOPackageUnit; import org.eclipse.emf.cdo.common.protocol.CDODataInput; +import org.eclipse.emf.cdo.common.revision.CDORevision; +import org.eclipse.emf.cdo.common.revision.CDORevisionKey; +import org.eclipse.emf.cdo.common.util.CDOCommonUtil; +import org.eclipse.emf.cdo.internal.common.commit.CDOCommitDataImpl; import org.eclipse.emf.cdo.internal.server.Repository; import org.eclipse.emf.cdo.server.IStoreAccessor; import org.eclipse.emf.cdo.server.StoreThreadLocal; import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranch; import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager; +import org.eclipse.emf.cdo.spi.common.commit.InternalCDOCommitInfoManager; +import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionCache; import org.eclipse.emf.cdo.spi.server.InternalCommitContext; import org.eclipse.emf.cdo.spi.server.InternalRepositorySynchronizer; import org.eclipse.emf.cdo.spi.server.InternalSession; +import org.eclipse.emf.cdo.spi.server.InternalSessionManager; import org.eclipse.emf.cdo.spi.server.InternalStore; import org.eclipse.emf.cdo.spi.server.InternalSynchronizableRepository; import org.eclipse.emf.cdo.spi.server.InternalTransaction; @@ -36,6 +48,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; /** @@ -209,6 +222,9 @@ public abstract class SynchronizableRepository extends Repository.Default implem IStoreAccessor accessor = StoreThreadLocal.getAccessor(); accessor.rawImport(in, fromBranchID, toBranchID, fromCommitTime, toCommitTime); + replicateRawReviseRevisions(); + replicateRawNotifyClients(lastReplicatedCommitTime, toCommitTime); + setLastReplicatedBranchID(toBranchID); setLastReplicatedCommitTime(toCommitTime); setLastCommitTimeStamp(toCommitTime); @@ -219,6 +235,69 @@ public abstract class SynchronizableRepository extends Repository.Default implem } } + private void replicateRawReviseRevisions() + { + InternalCDORevisionCache cache = getRevisionManager().getCache(); + for (CDORevision revision : cache.getCurrentRevisions()) + { + cache.removeRevision(revision.getID(), revision); + } + } + + private void replicateRawNotifyClients(long fromCommitTime, long toCommitTime) + { + InternalCDOCommitInfoManager manager = getCommitInfoManager(); + InternalSessionManager sessionManager = getSessionManager(); + + Map<CDOBranch, TimeRange> branches = replicateRawGetBranches(fromCommitTime, toCommitTime); + for (Entry<CDOBranch, TimeRange> entry : branches.entrySet()) + { + CDOBranch branch = entry.getKey(); + TimeRange range = entry.getValue(); + fromCommitTime = range.getTime1(); + toCommitTime = range.getTime2(); + + CDOBranchPoint startPoint = branch.getPoint(fromCommitTime); + CDOBranchPoint endPoint = branch.getPoint(toCommitTime); + CDOChangeSetData changeSet = getChangeSet(startPoint, endPoint); + + List<CDOPackageUnit> newPackages = Collections.emptyList(); // TODO Notify about new packages + List<CDOIDAndVersion> newObjects = changeSet.getNewObjects(); + List<CDORevisionKey> changedObjects = changeSet.getChangedObjects(); + List<CDOIDAndVersion> detachedObjects = changeSet.getDetachedObjects(); + CDOCommitData data = new CDOCommitDataImpl(newPackages, newObjects, changedObjects, detachedObjects); + + String comment = "<replicate raw commits>"; //$NON-NLS-1$ + CDOCommitInfo commitInfo = manager.createCommitInfo(branch, toCommitTime, SYSTEM_USER_ID, comment, data); + sessionManager.sendCommitNotification(replicatorSession, commitInfo); + } + } + + private Map<CDOBranch, TimeRange> replicateRawGetBranches(long fromCommitTime, long toCommitTime) + { + final Map<CDOBranch, TimeRange> branches = new HashMap<CDOBranch, TimeRange>(); + CDOCommitInfoHandler handler = new CDOCommitInfoHandler() + { + public void handleCommitInfo(CDOCommitInfo commitInfo) + { + CDOBranch branch = commitInfo.getBranch(); + long timeStamp = commitInfo.getTimeStamp(); + TimeRange range = branches.get(branch); + if (range == null) + { + branches.put(branch, new TimeRange(timeStamp)); + } + else + { + range.update(timeStamp); + } + } + }; + + getCommitInfoManager().getCommitInfos(fromCommitTime, toCommitTime, handler); + return branches; + } + @Override public abstract InternalCommitContext createCommitContext(InternalTransaction transaction); @@ -316,4 +395,49 @@ public abstract class SynchronizableRepository extends Repository.Default implem { setState(INITIAL); } + + /** + * @author Eike Stepper + */ + private static final class TimeRange + { + private long time1; + + private long time2; + + public TimeRange(long time) + { + time1 = time; + time2 = time; + } + + public void update(long time) + { + if (time < time1) + { + time1 = time; + } + + if (time > time2) + { + time2 = time; + } + } + + public long getTime1() + { + return time1; + } + + public long getTime2() + { + return time2; + } + + @Override + public String toString() + { + return "[" + CDOCommonUtil.formatTimeStamp(time1) + " - " + CDOCommonUtil.formatTimeStamp(time1) + "]"; + } + } } diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/ISession.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/ISession.java index dee1dfa2ff..1d81df85c3 100644 --- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/ISession.java +++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/ISession.java @@ -33,6 +33,11 @@ public interface ISession extends CDOCommonSession, IContainer<IView> public ISessionProtocol getProtocol(); /** + * @since 4.0 + */ + public long getLastUpdateTime(); + + /** * @since 2.0 */ public boolean isSubscribed(); diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AllTestsMEMOffline.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AllTestsMEMOffline.java index 5ae2a382f5..f729925a4e 100644 --- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AllTestsMEMOffline.java +++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AllTestsMEMOffline.java @@ -32,10 +32,11 @@ public class AllTestsMEMOffline extends AllConfigs { // super.initTestClasses(testClasses); - testClasses.add(OfflineTest.class); - testClasses.add(OfflineDelayed2Test.class); + testClasses.add(OfflineRawTest.class); + // testClasses.add(OfflineTest.class); + // testClasses.add(OfflineDelayed2Test.class); // testClasses.add(OfflineSqueezedTest.class); - testClasses.add(FailoverTest.class); + // testClasses.add(FailoverTest.class); } @Override diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/OfflineRawTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/OfflineRawTest.java index 563b39bd28..751585734a 100644 --- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/OfflineRawTest.java +++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/OfflineRawTest.java @@ -10,6 +10,18 @@ */ package org.eclipse.emf.cdo.tests; +import org.eclipse.emf.cdo.common.CDOCommonSession.Options.PassiveUpdateMode; +import org.eclipse.emf.cdo.common.revision.delta.CDOListFeatureDelta; +import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta; +import org.eclipse.emf.cdo.eresource.CDOResource; +import org.eclipse.emf.cdo.session.CDOSession; +import org.eclipse.emf.cdo.session.CDOSessionInvalidationEvent; +import org.eclipse.emf.cdo.spi.server.InternalRepository; +import org.eclipse.emf.cdo.transaction.CDOTransaction; +import org.eclipse.emf.cdo.view.CDOViewInvalidationEvent; + +import org.eclipse.net4j.util.event.IEvent; + /** * @author Eike Stepper */ @@ -20,4 +32,139 @@ public class OfflineRawTest extends OfflineTest { return true; } + + /** + * @since 4.0 + */ + public void testNotification() throws Exception + { + InternalRepository clone = getRepository(); + waitForOnline(clone); + + CDOSession session = openSession(); + CDOTransaction transaction = session.openTransaction(); + CDOResource resource = transaction.createResource("/my/resource"); + + resource.getContents().add(getModel1Factory().createCompany()); + transaction.setCommitComment("resource with one company created on clone"); + transaction.commit(); + + getOfflineConfig().stopMasterTransport(); + waitForOffline(clone); + + TestListener sessionListener = new TestListener(); + session.addListener(sessionListener); + + TestListener transactionListener = new TestListener(); + transaction.addListener(transactionListener); + + { + CDOSession masterSession = openSession(clone.getName() + "_master"); + CDOTransaction masterTransaction = masterSession.openTransaction(); + CDOResource masterResource = masterTransaction.getResource("/my/resource"); + + masterResource.getContents().add(getModel1Factory().createCompany()); + masterTransaction.setCommitComment("one company added on master"); + masterTransaction.commit(); + + masterResource.getContents().add(getModel1Factory().createCompany()); + masterTransaction.setCommitComment("one company added on master"); + masterTransaction.commit(); + + masterTransaction.close(); + } + + getOfflineConfig().startMasterTransport(); + waitForOnline(clone); + sleep(1000); + + IEvent[] sessionEvents = sessionListener.getEvents(); + assertEquals(4, sessionEvents.length); // 3x repo state change + 1x invalidation + + CDOSessionInvalidationEvent sessionInvalidationEvent = (CDOSessionInvalidationEvent)sessionEvents[3]; + assertEquals(2, sessionInvalidationEvent.getNewObjects().size()); + assertEquals(1, sessionInvalidationEvent.getChangedObjects().size()); + assertEquals(0, sessionInvalidationEvent.getDetachedObjects().size()); + + IEvent[] transactionEvents = transactionListener.getEvents(); + assertEquals(2, transactionEvents.length); // 1x invalidation + 1x adapters notified + + CDOViewInvalidationEvent viewInvalidationEvent = (CDOViewInvalidationEvent)transactionEvents[0]; + assertEquals(1, viewInvalidationEvent.getDirtyObjects().size()); + assertEquals(1, viewInvalidationEvent.getRevisionDeltas().size()); + assertEquals(0, viewInvalidationEvent.getDetachedObjects().size()); + + CDORevisionDelta delta = viewInvalidationEvent.getRevisionDeltas().get(resource); + assertEquals(null, delta); + assertEquals(true, viewInvalidationEvent.getRevisionDeltas().containsKey(resource)); + } + + /** + * @since 4.0 + */ + public void testNotificationAllDeltas() throws Exception + { + InternalRepository clone = getRepository(); + waitForOnline(clone); + + CDOSession session = openSession(); + session.options().setPassiveUpdateMode(PassiveUpdateMode.ADDITIONS); + CDOTransaction transaction = session.openTransaction(); + CDOResource resource = transaction.createResource("/my/resource"); + + resource.getContents().add(getModel1Factory().createCompany()); + transaction.setCommitComment("resource with one company created on clone"); + transaction.commit(); + + getOfflineConfig().stopMasterTransport(); + waitForOffline(clone); + + TestListener sessionListener = new TestListener(); + session.addListener(sessionListener); + + TestListener transactionListener = new TestListener(); + transaction.addListener(transactionListener); + + { + CDOSession masterSession = openSession(clone.getName() + "_master"); + CDOTransaction masterTransaction = masterSession.openTransaction(); + CDOResource masterResource = masterTransaction.getResource("/my/resource"); + + masterResource.getContents().add(getModel1Factory().createCompany()); + masterTransaction.setCommitComment("one company added on master"); + masterTransaction.commit(); + + masterResource.getContents().add(getModel1Factory().createCompany()); + masterTransaction.setCommitComment("one company added on master"); + masterTransaction.commit(); + + masterTransaction.close(); + } + + getOfflineConfig().startMasterTransport(); + waitForOnline(clone); + sleep(1000); + + IEvent[] sessionEvents = sessionListener.getEvents(); + assertEquals(4, sessionEvents.length); // 3x repo state change + 1x invalidation + + CDOSessionInvalidationEvent sessionInvalidationEvent = (CDOSessionInvalidationEvent)sessionEvents[3]; + assertEquals(2, sessionInvalidationEvent.getNewObjects().size()); + assertEquals(1, sessionInvalidationEvent.getChangedObjects().size()); + assertEquals(0, sessionInvalidationEvent.getDetachedObjects().size()); + + IEvent[] transactionEvents = transactionListener.getEvents(); + assertEquals(2, transactionEvents.length); // 1x invalidation + 1x adapters notified + + CDOViewInvalidationEvent viewInvalidationEvent = (CDOViewInvalidationEvent)transactionEvents[0]; + assertEquals(1, viewInvalidationEvent.getDirtyObjects().size()); + assertEquals(1, viewInvalidationEvent.getRevisionDeltas().size()); + assertEquals(0, viewInvalidationEvent.getDetachedObjects().size()); + + CDORevisionDelta delta = viewInvalidationEvent.getRevisionDeltas().get(resource); + assertEquals(1, delta.getFeatureDeltas().size()); + + CDOListFeatureDelta listDelta = (CDOListFeatureDelta)delta.getFeatureDeltas().get(0); + assertEquals(2, listDelta.getListChanges().size()); + } } 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 05386f54a9..e242c8663c 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 @@ -310,7 +310,10 @@ public class OfflineTest extends AbstractSyncingTest assertEquals(CDOID.Type.OBJECT, offlineCompany.cdoID().getType()); } - public void testDisconnectAndCommitAndMergeWithNewPackages() throws Exception + /** + * @since 4.0 + */ + public void _testDisconnectAndCommitAndMergeWithNewPackages() throws Exception { OfflineClone clone = (OfflineClone)getRepository(); waitForOnline(clone); diff --git a/plugins/org.eclipse.emf.cdo/.settings/.api_filters b/plugins/org.eclipse.emf.cdo/.settings/.api_filters index 1bef87d71f..22dcbe6e9f 100644 --- a/plugins/org.eclipse.emf.cdo/.settings/.api_filters +++ b/plugins/org.eclipse.emf.cdo/.settings/.api_filters @@ -1,5 +1,13 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <component id="org.eclipse.emf.cdo" version="2"> + <resource path="src/org/eclipse/emf/cdo/transaction/CDOPushTransaction.java" type="org.eclipse.emf.cdo.transaction.CDOPushTransaction"> + <filter id="338792546"> + <message_arguments> + <message_argument value="org.eclipse.emf.cdo.transaction.CDOPushTransaction"/> + <message_argument value="resolveConflicts(CDOConflictResolver[])"/> + </message_arguments> + </filter> + </resource> <resource path="src/org/eclipse/emf/cdo/transaction/CDOTransaction.java" type="org.eclipse.emf.cdo.transaction.CDOTransaction"> <filter id="405901410"> <message_arguments> @@ -15,4 +23,12 @@ </message_arguments> </filter> </resource> + <resource path="src/org/eclipse/emf/spi/cdo/InternalCDOTransaction.java" type="org.eclipse.emf.spi.cdo.InternalCDOTransaction"> + <filter id="405901410"> + <message_arguments> + <message_argument value="org.eclipse.emf.spi.cdo.InternalCDOTransaction"/> + <message_argument value="handleConflicts(Set<CDOObject>)"/> + </message_arguments> + </filter> + </resource> </component> diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewImpl.java index d4206ae3ce..5bfab2d11e 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewImpl.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewImpl.java @@ -1494,7 +1494,7 @@ public class CDOViewImpl extends Lifecycle implements InternalCDOView if (key instanceof CDORevisionDelta) { delta = (CDORevisionDelta)key; - // Clone the revision delta if we are a transaction. Thus a conflict resolver will be allowed to modify them. + // Copy the revision delta if we are a transaction, so that conflict resolvers can modify it. if (this instanceof CDOTransaction) { delta = new CDORevisionDeltaImpl(delta, true); diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOTransaction.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOTransaction.java index 08603602eb..4be5a9706c 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOTransaction.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOTransaction.java @@ -32,6 +32,7 @@ import java.util.Map; /** * @author Simon McDuff * @since 2.0 + * @noimplement This interface is not intended to be implemented by clients. */ public interface InternalCDOTransaction extends CDOTransaction, InternalCDOUserTransaction, InternalCDOView { diff --git a/plugins/org.eclipse.net4j.db.hsqldb/.settings/.api_filters b/plugins/org.eclipse.net4j.db.hsqldb/.settings/.api_filters deleted file mode 100644 index 8f096cdb6b..0000000000 --- a/plugins/org.eclipse.net4j.db.hsqldb/.settings/.api_filters +++ /dev/null @@ -1,10 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<component id="org.eclipse.net4j.db.hsqldb" version="2"> - <resource path="src/org/eclipse/net4j/db/hsqldb/HSQLDBDataSource.java" type="org.eclipse.net4j.db.hsqldb.HSQLDBDataSource"> - <filter id="337682486"> - <message_arguments> - <message_argument value="org.eclipse.net4j.db.hsqldb.HSQLDBDataSource"/> - </message_arguments> - </filter> - </resource> -</component> diff --git a/plugins/org.eclipse.net4j.util/.settings/.api_filters b/plugins/org.eclipse.net4j.util/.settings/.api_filters index 2df5c82b71..af1f432d4e 100644 --- a/plugins/org.eclipse.net4j.util/.settings/.api_filters +++ b/plugins/org.eclipse.net4j.util/.settings/.api_filters @@ -68,11 +68,4 @@ </message_arguments> </filter> </resource> - <resource path="src/org/eclipse/net4j/util/concurrent/RoundRobinList.java" type="org.eclipse.net4j.util.concurrent.RoundRobinList"> - <filter id="337682486"> - <message_arguments> - <message_argument value="org.eclipse.net4j.util.concurrent.RoundRobinList"/> - </message_arguments> - </filter> - </resource> </component> |