Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2013-05-31 06:25:52 +0000
committerEike Stepper2013-05-31 06:25:52 +0000
commitd2b156d05dcdf7b9667567b3c8f6a7185d41f4c8 (patch)
tree34131632f0850e76dc4dafa150ffe77e86489a2c /plugins/org.eclipse.emf.cdo.server
parentb95a129e0800f82512efb166628d8ae357b3c113 (diff)
downloadcdo-d2b156d05dcdf7b9667567b3c8f6a7185d41f4c8.tar.gz
cdo-d2b156d05dcdf7b9667567b3c8f6a7185d41f4c8.tar.xz
cdo-d2b156d05dcdf7b9667567b3c8f6a7185d41f4c8.zip
[409549] Wrong branch manager is used in
SynchronizableRepository.handleCommitInfo() https://bugs.eclipse.org/bugs/show_bug.cgi?id=409549
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.server')
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/TransactionCommitContext.java6
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/syncing/RepositorySynchronizer.java21
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/syncing/SynchronizableRepository.java12
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/StoreAccessorBase.java4
4 files changed, 26 insertions, 17 deletions
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 ac21fd8521..4663bf0f89 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
@@ -41,7 +41,6 @@ import org.eclipse.emf.cdo.common.revision.delta.CDOSetFeatureDelta;
import org.eclipse.emf.cdo.common.security.NoPermissionException;
import org.eclipse.emf.cdo.common.util.CDOCommonUtil;
import org.eclipse.emf.cdo.common.util.CDOQueryInfo;
-import org.eclipse.emf.cdo.internal.common.commit.CDOCommitDataImpl;
import org.eclipse.emf.cdo.internal.common.commit.FailureCommitInfo;
import org.eclipse.emf.cdo.internal.common.model.CDOPackageRegistryImpl;
import org.eclipse.emf.cdo.internal.server.bundle.OM;
@@ -50,6 +49,7 @@ import org.eclipse.emf.cdo.server.IStoreAccessor;
import org.eclipse.emf.cdo.server.IStoreAccessor.QueryXRefsContext;
import org.eclipse.emf.cdo.server.IView;
import org.eclipse.emf.cdo.server.StoreThreadLocal;
+import org.eclipse.emf.cdo.spi.common.commit.CDOCommitInfoUtil;
import org.eclipse.emf.cdo.spi.common.commit.InternalCDOCommitInfoManager;
import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageInfo;
import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageRegistry;
@@ -793,8 +793,8 @@ public class TransactionCommitContext implements InternalCommitContext
}
};
- return new CDOCommitDataImpl(newPackageUnitsCollection, newObjectsCollection, changedObjectsCollection,
- detachedObjectsCollection);
+ return CDOCommitInfoUtil.createCommitData(newPackageUnitsCollection, newObjectsCollection,
+ changedObjectsCollection, detachedObjectsCollection);
}
protected void adjustForCommit()
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/syncing/RepositorySynchronizer.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/syncing/RepositorySynchronizer.java
index 8034f40aa9..0abf61fba3 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/syncing/RepositorySynchronizer.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/syncing/RepositorySynchronizer.java
@@ -228,10 +228,7 @@ public class RepositorySynchronizer extends PriorityQueueRunner implements Inter
if (remoteSession != null)
{
- remoteSession.removeListener(remoteSessionListener);
- remoteSession.getBranchManager().removeListener(remoteSessionListener);
- remoteSession.close();
- remoteSession = null;
+ closeRemoteSession();
}
super.doDeactivate();
@@ -266,18 +263,21 @@ public class RepositorySynchronizer extends PriorityQueueRunner implements Inter
if (remoteSession != null)
{
CDOSession element = remoteSession;
-
- remoteSession.getBranchManager().removeListener(remoteSessionListener);
- remoteSession.removeListener(remoteSessionListener);
- remoteSession.close();
- remoteSession = null;
-
+ closeRemoteSession();
fireEvent(new SingleDeltaContainerEvent<CDOSession>(this, element, IContainerDelta.Kind.REMOVED));
}
reconnect();
}
+ private void closeRemoteSession()
+ {
+ remoteSession.removeListener(remoteSessionListener);
+ remoteSession.getBranchManager().removeListener(remoteSessionListener);
+ remoteSession.close();
+ remoteSession = null;
+ }
+
private void reconnect()
{
clearQueue();
@@ -391,6 +391,7 @@ public class RepositorySynchronizer extends PriorityQueueRunner implements Inter
try
{
CDOSessionConfiguration masterConfiguration = remoteSessionConfigurationFactory.createSessionConfiguration();
+ masterConfiguration.setBranchManager(localRepository.getBranchManager());
masterConfiguration.setPassiveUpdateMode(PassiveUpdateMode.ADDITIONS);
masterConfiguration.setLockNotificationMode(LockNotificationMode.ALWAYS);
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 45015bdc87..df2d3a242c 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
@@ -38,7 +38,7 @@ import org.eclipse.emf.cdo.common.revision.CDORevisionKey;
import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta;
import org.eclipse.emf.cdo.common.util.CDOCommonUtil;
import org.eclipse.emf.cdo.common.util.CDOException;
-import org.eclipse.emf.cdo.internal.common.commit.CDOCommitDataImpl;
+import org.eclipse.emf.cdo.internal.common.revision.AbstractCDORevisionCache;
import org.eclipse.emf.cdo.internal.server.Repository;
import org.eclipse.emf.cdo.internal.server.TransactionCommitContext;
import org.eclipse.emf.cdo.server.IStoreAccessor;
@@ -48,6 +48,7 @@ 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.CDOChangeKindCache;
+import org.eclipse.emf.cdo.spi.common.commit.CDOCommitInfoUtil;
import org.eclipse.emf.cdo.spi.common.commit.InternalCDOCommitInfoManager;
import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageUnit;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
@@ -443,7 +444,7 @@ public abstract class SynchronizableRepository extends Repository.Default implem
List<CDORevisionKey> changedObjects = changeSet.getChangedObjects();
List<CDOIDAndVersion> detachedObjects = changeSet.getDetachedObjects();
- CDOCommitData data = new CDOCommitDataImpl(newPackages, newObjects, changedObjects, detachedObjects);
+ CDOCommitData data = CDOCommitInfoUtil.createCommitData(newPackages, newObjects, changedObjects, detachedObjects);
String comment = "<replicate raw commits>"; //$NON-NLS-1$
CDOCommitInfo commitInfo = manager.createCommitInfo(branch, toCommitTime, fromCommitTime, SYSTEM_USER_ID,
@@ -518,6 +519,13 @@ public abstract class SynchronizableRepository extends Repository.Default implem
{
super.doActivate();
+ InternalCDORevisionCache cache = getRevisionManager().getCache();
+ if (cache instanceof AbstractCDORevisionCache)
+ {
+ // Enable branch checks to ensure that no branches from the replicator session are used
+ ((AbstractCDORevisionCache)cache).setBranchManager(getBranchManager());
+ }
+
InternalStore store = getStore();
if (!store.isFirstStart())
{
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/StoreAccessorBase.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/StoreAccessorBase.java
index 39d4c65ef9..1689f2bb1a 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/StoreAccessorBase.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/StoreAccessorBase.java
@@ -31,11 +31,11 @@ import org.eclipse.emf.cdo.common.revision.delta.CDORemoveFeatureDelta;
import org.eclipse.emf.cdo.common.revision.delta.CDOSetFeatureDelta;
import org.eclipse.emf.cdo.common.revision.delta.CDOUnsetFeatureDelta;
import org.eclipse.emf.cdo.common.util.CDOCommonUtil;
-import org.eclipse.emf.cdo.internal.common.commit.CDOCommitDataImpl;
import org.eclipse.emf.cdo.internal.server.bundle.OM;
import org.eclipse.emf.cdo.server.ISession;
import org.eclipse.emf.cdo.server.IStoreAccessor;
import org.eclipse.emf.cdo.server.ITransaction;
+import org.eclipse.emf.cdo.spi.common.commit.CDOCommitInfoUtil;
import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageRegistry;
import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageUnit;
import org.eclipse.emf.cdo.spi.common.revision.CDOFeatureDeltaVisitorImpl;
@@ -317,7 +317,7 @@ public abstract class StoreAccessorBase extends Lifecycle implements IStoreAcces
storeAccessor.handleRevisions(null, null, timeStamp, true, new CDORevisionHandler.Filtered.Undetached(this));
List<CDOIDAndVersion> detachedObjects = detachCounter.getDetachedObjects();
- return new CDOCommitDataImpl(newPackageUnits, newObjects, changedObjects, detachedObjects);
+ return CDOCommitInfoUtil.createCommitData(newPackageUnits, newObjects, changedObjects, detachedObjects);
}
/**

Back to the top