Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/branch/CDOBranchVersionImpl.java12
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/lock/CDOLockChangeInfoImpl.java22
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDOIDAndBranchImpl.java10
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDORevisionDeltaImpl.java15
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/branch/CDOBranchAdjustable.java22
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/BaseCDORevision.java18
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/DelegatingCDORevision.java9
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevision.java3
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevisionDelta.java3
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/StubCDORevision.java9
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Session.java12
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/syncing/RepositorySynchronizer.java8
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/syncing/SynchronizableRepository.java56
13 files changed, 185 insertions, 14 deletions
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/branch/CDOBranchVersionImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/branch/CDOBranchVersionImpl.java
index 3e80d8a572..9ba4196914 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/branch/CDOBranchVersionImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/branch/CDOBranchVersionImpl.java
@@ -11,14 +11,16 @@
package org.eclipse.emf.cdo.internal.common.branch;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchManager;
import org.eclipse.emf.cdo.common.branch.CDOBranchVersion;
+import org.eclipse.emf.cdo.spi.common.branch.CDOBranchAdjustable;
import java.text.MessageFormat;
/**
* @author Eike Stepper
*/
-public class CDOBranchVersionImpl implements CDOBranchVersion
+public class CDOBranchVersionImpl implements CDOBranchVersion, CDOBranchAdjustable
{
private CDOBranch branch;
@@ -30,6 +32,14 @@ public class CDOBranchVersionImpl implements CDOBranchVersion
this.version = version;
}
+ public void adjustBranches(CDOBranchManager newBranchManager)
+ {
+ if (branch != null)
+ {
+ branch = newBranchManager.getBranch(branch.getID());
+ }
+ }
+
public CDOBranch getBranch()
{
return branch;
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/lock/CDOLockChangeInfoImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/lock/CDOLockChangeInfoImpl.java
index 2f4d798e80..a114e9fd64 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/lock/CDOLockChangeInfoImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/lock/CDOLockChangeInfoImpl.java
@@ -4,26 +4,28 @@
* 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:
* Caspar De Groot - initial API and implementation
*/
package org.eclipse.emf.cdo.internal.common.lock;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchManager;
import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.lock.CDOLockChangeInfo;
import org.eclipse.emf.cdo.common.lock.CDOLockOwner;
import org.eclipse.emf.cdo.common.lock.CDOLockState;
+import org.eclipse.emf.cdo.spi.common.branch.CDOBranchAdjustable;
import org.eclipse.net4j.util.concurrent.IRWLockManager.LockType;
/**
* @author Caspar De Groot
*/
-public class CDOLockChangeInfoImpl implements CDOLockChangeInfo
+public class CDOLockChangeInfoImpl implements CDOLockChangeInfo, CDOBranchAdjustable
{
- private final CDOBranchPoint branchPoint;
+ private CDOBranchPoint branchPoint;
private final CDOLockOwner lockOwner;
@@ -48,7 +50,6 @@ public class CDOLockChangeInfoImpl implements CDOLockChangeInfo
public CDOLockChangeInfoImpl()
{
- branchPoint = null;
lockOwner = null;
lockStates = null;
operation = null;
@@ -56,6 +57,19 @@ public class CDOLockChangeInfoImpl implements CDOLockChangeInfo
isInvalidateAll = true;
}
+ public void adjustBranches(CDOBranchManager newBranchManager)
+ {
+ if (branchPoint != null)
+ {
+ CDOBranch branch = branchPoint.getBranch();
+ if (branch != null)
+ {
+ branch = newBranchManager.getBranch(branch.getID());
+ branchPoint = branch.getPoint(branchPoint.getTimeStamp());
+ }
+ }
+ }
+
public CDOBranch getBranch()
{
return branchPoint == null ? null : branchPoint.getBranch();
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDOIDAndBranchImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDOIDAndBranchImpl.java
index 3ff303a413..c5a19deade 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDOIDAndBranchImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDOIDAndBranchImpl.java
@@ -11,8 +11,10 @@
package org.eclipse.emf.cdo.internal.common.revision;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchManager;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.revision.CDOIDAndBranch;
+import org.eclipse.emf.cdo.spi.common.branch.CDOBranchAdjustable;
import org.eclipse.net4j.util.CheckUtil;
@@ -21,7 +23,7 @@ import java.text.MessageFormat;
/**
* @author Eike Stepper
*/
-public class CDOIDAndBranchImpl implements CDOIDAndBranch
+public class CDOIDAndBranchImpl implements CDOIDAndBranch, CDOBranchAdjustable
{
private CDOID id;
@@ -46,6 +48,12 @@ public class CDOIDAndBranchImpl implements CDOIDAndBranch
return branch;
}
+ public void adjustBranches(CDOBranchManager newBranchManager)
+ {
+ branch = newBranchManager.getBranch(branch.getID());
+ CheckUtil.checkArg(branch, "branch");
+ }
+
@Override
public boolean equals(Object obj)
{
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDORevisionDeltaImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDORevisionDeltaImpl.java
index 0016b9c401..d33ba02f8a 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDORevisionDeltaImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDORevisionDeltaImpl.java
@@ -13,6 +13,7 @@
package org.eclipse.emf.cdo.internal.common.revision.delta;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchManager;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDUtil;
import org.eclipse.emf.cdo.common.id.CDOWithID;
@@ -34,6 +35,7 @@ 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.PartialCollectionLoadingNotSupportedException;
import org.eclipse.emf.cdo.internal.common.revision.CDOListImpl;
+import org.eclipse.emf.cdo.spi.common.branch.CDOBranchAdjustable;
import org.eclipse.emf.cdo.spi.common.revision.CDOReferenceAdjuster;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDOFeatureDelta;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
@@ -329,6 +331,19 @@ public class CDORevisionDeltaImpl implements InternalCDORevisionDelta
return changed;
}
+ public void adjustBranches(CDOBranchManager newBranchManager)
+ {
+ if (branch != null)
+ {
+ branch = newBranchManager.getBranch(branch.getID());
+ }
+
+ if (target instanceof CDOBranchAdjustable)
+ {
+ ((CDOBranchAdjustable)target).adjustBranches(newBranchManager);
+ }
+ }
+
public void accept(CDOFeatureDeltaVisitor visitor)
{
accept(visitor, Predicates.<EStructuralFeature> alwaysTrue());
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/branch/CDOBranchAdjustable.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/branch/CDOBranchAdjustable.java
new file mode 100644
index 0000000000..ef2d8b39ad
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/branch/CDOBranchAdjustable.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2014 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.spi.common.branch;
+
+import org.eclipse.emf.cdo.common.branch.CDOBranchManager;
+
+/**
+ * @author Eike Stepper
+ * @since 4.3
+ */
+public interface CDOBranchAdjustable
+{
+ public void adjustBranches(CDOBranchManager newBranchManager);
+}
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/BaseCDORevision.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/BaseCDORevision.java
index a2331491f6..c37c1e6278 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/BaseCDORevision.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/BaseCDORevision.java
@@ -13,6 +13,8 @@
*/
package org.eclipse.emf.cdo.spi.common.revision;
+import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchManager;
import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDProvider;
@@ -831,6 +833,22 @@ public abstract class BaseCDORevision extends AbstractCDORevision
return changed;
}
+ /**
+ * @since 4.3
+ */
+ public void adjustBranches(CDOBranchManager newBranchManager)
+ {
+ if (branchPoint != null)
+ {
+ CDOBranch branch = branchPoint.getBranch();
+ if (branch != null)
+ {
+ branch = newBranchManager.getBranch(branch.getID());
+ branchPoint = branch.getPoint(branchPoint.getTimeStamp());
+ }
+ }
+ }
+
public Object getValue(EStructuralFeature feature)
{
checkReadable(feature);
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/DelegatingCDORevision.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/DelegatingCDORevision.java
index 454624dd0e..126cb91a7b 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/DelegatingCDORevision.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/DelegatingCDORevision.java
@@ -12,6 +12,7 @@
package org.eclipse.emf.cdo.spi.common.revision;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchManager;
import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDProvider;
@@ -71,6 +72,14 @@ public abstract class DelegatingCDORevision implements InternalCDORevision
return getDelegate().adjustReferences(referenceAdjuster);
}
+ /**
+ * @since 4.3
+ */
+ public void adjustBranches(CDOBranchManager newBranchManager)
+ {
+ getDelegate().adjustBranches(newBranchManager);
+ }
+
public long getTimeStamp()
{
return getDelegate().getTimeStamp();
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevision.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevision.java
index fad67927b3..70dcbd085b 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevision.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevision.java
@@ -21,6 +21,7 @@ import org.eclipse.emf.cdo.common.revision.CDOList;
import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.common.revision.CDORevisionData;
import org.eclipse.emf.cdo.common.security.CDOPermission;
+import org.eclipse.emf.cdo.spi.common.branch.CDOBranchAdjustable;
import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranch;
import org.eclipse.emf.cdo.spi.common.model.InternalCDOClassInfo;
@@ -37,7 +38,7 @@ import java.util.List;
* @noextend This interface is not intended to be extended by clients.
* @noimplement This interface is not intended to be implemented by clients.
*/
-public interface InternalCDORevision extends CDORevision, CDORevisionData, CDOReferenceAdjustable
+public interface InternalCDORevision extends CDORevision, CDORevisionData, CDOReferenceAdjustable, CDOBranchAdjustable
{
/**
* @since 4.2
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevisionDelta.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevisionDelta.java
index 6cd5d560d6..4cbe718e25 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevisionDelta.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevisionDelta.java
@@ -15,6 +15,7 @@ import org.eclipse.emf.cdo.common.revision.CDORevisable;
import org.eclipse.emf.cdo.common.revision.delta.CDOFeatureDelta;
import org.eclipse.emf.cdo.common.revision.delta.CDOOriginSizeProvider;
import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta;
+import org.eclipse.emf.cdo.spi.common.branch.CDOBranchAdjustable;
import org.eclipse.emf.ecore.EStructuralFeature;
@@ -28,7 +29,7 @@ import java.util.Map;
* @noextend This interface is not intended to be extended by clients.
* @since 2.0
*/
-public interface InternalCDORevisionDelta extends CDORevisionDelta, CDOReferenceAdjustable
+public interface InternalCDORevisionDelta extends CDORevisionDelta, CDOReferenceAdjustable, CDOBranchAdjustable
{
/**
* @since 3.0
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/StubCDORevision.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/StubCDORevision.java
index 5a6948f013..72cf9c15b6 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/StubCDORevision.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/StubCDORevision.java
@@ -10,6 +10,7 @@
*/
package org.eclipse.emf.cdo.spi.common.revision;
+import org.eclipse.emf.cdo.common.branch.CDOBranchManager;
import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDProvider;
@@ -294,6 +295,14 @@ public class StubCDORevision extends AbstractCDORevision
}
/**
+ * @since 4.3
+ */
+ public void adjustBranches(CDOBranchManager newBranchManager)
+ {
+ throw new UnsupportedOperationException(getExceptionMessage());
+ }
+
+ /**
* @since 4.2
*/
public EStructuralFeature[] clearValues()
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 5d742926f5..2350d4fa48 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
@@ -40,6 +40,7 @@ import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranch;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionManager;
import org.eclipse.emf.cdo.spi.server.ISessionProtocol;
+import org.eclipse.emf.cdo.spi.server.InternalRepository;
import org.eclipse.emf.cdo.spi.server.InternalSession;
import org.eclipse.emf.cdo.spi.server.InternalSessionManager;
import org.eclipse.emf.cdo.spi.server.InternalTransaction;
@@ -534,7 +535,16 @@ public class Session extends Container<IView> implements InternalSession
@Override
public String toString()
{
- String name = manager.getRepository().getName();
+ String name = "unknown";
+ if (manager != null)
+ {
+ InternalRepository repository = manager.getRepository();
+ if (repository != null)
+ {
+ name = repository.getName();
+ }
+ }
+
if (userID != null && userID.length() != 0)
{
name = userID + "@" + name;
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 02523c58a8..2e139d7b67 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
@@ -28,6 +28,7 @@ import org.eclipse.emf.cdo.session.CDOSessionConfiguration;
import org.eclipse.emf.cdo.session.CDOSessionConfigurationFactory;
import org.eclipse.emf.cdo.session.CDOSessionInvalidationEvent;
import org.eclipse.emf.cdo.session.CDOSessionLocksChangedEvent;
+import org.eclipse.emf.cdo.spi.common.branch.CDOBranchAdjustable;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionCache;
import org.eclipse.emf.cdo.spi.server.InternalRepositorySynchronizer;
import org.eclipse.emf.cdo.spi.server.InternalSynchronizableRepository;
@@ -399,7 +400,6 @@ public class RepositorySynchronizer extends PriorityQueueRunner implements Inter
try
{
CDOSessionConfiguration masterConfiguration = remoteSessionConfigurationFactory.createSessionConfiguration();
- masterConfiguration.setBranchManager(localRepository.getBranchManager());
masterConfiguration.setPassiveUpdateMode(PassiveUpdateMode.ADDITIONS);
masterConfiguration.setLockNotificationMode(LockNotificationMode.ALWAYS);
@@ -715,6 +715,12 @@ public class RepositorySynchronizer extends PriorityQueueRunner implements Inter
try
{
StoreThreadLocal.setSession(localRepository.getReplicatorSession());
+
+ if (lockChangeInfo instanceof CDOBranchAdjustable)
+ {
+ ((CDOBranchAdjustable)lockChangeInfo).adjustBranches(localRepository.getBranchManager());
+ }
+
localRepository.handleLockChangeInfo(lockChangeInfo);
}
finally
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 240f59b4de..da7470e160 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
@@ -39,6 +39,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.DelegatingCommitInfo;
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;
@@ -46,6 +47,7 @@ import org.eclipse.emf.cdo.server.IStoreAccessor;
import org.eclipse.emf.cdo.server.IStoreAccessor.CommitContext;
import org.eclipse.emf.cdo.server.ITransaction;
import org.eclipse.emf.cdo.server.StoreThreadLocal;
+import org.eclipse.emf.cdo.spi.common.branch.CDOBranchAdjustable;
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;
@@ -265,7 +267,7 @@ public abstract class SynchronizableRepository extends Repository.Default implem
setLastReplicatedBranchID(branchID);
}
- public void handleCommitInfo(CDOCommitInfo commitInfo)
+ public void handleCommitInfo(final CDOCommitInfo commitInfo)
{
CDOBranch branch = commitInfo.getBranch();
if (branch.isLocal())
@@ -273,11 +275,57 @@ public abstract class SynchronizableRepository extends Repository.Default implem
return;
}
- long timeStamp = commitInfo.getTimeStamp();
- CDOBranchPoint head = branch.getHead();
+ // Convert branches from remoteSession to localRepository
+ InternalCDOBranchManager newBranchManager = getBranchManager();
+
+ for (CDOIDAndVersion key : commitInfo.getNewObjects())
+ {
+ if (key instanceof CDOBranchAdjustable)
+ {
+ CDOBranchAdjustable branchAdjustable = (CDOBranchAdjustable)key;
+ branchAdjustable.adjustBranches(newBranchManager);
+ }
+ }
+
+ for (CDORevisionKey key : commitInfo.getChangedObjects())
+ {
+ if (key instanceof CDOBranchAdjustable)
+ {
+ CDOBranchAdjustable branchAdjustable = (CDOBranchAdjustable)key;
+ branchAdjustable.adjustBranches(newBranchManager);
+ }
+ }
+
+ for (CDOIDAndVersion key : commitInfo.getDetachedObjects())
+ {
+ if (key instanceof CDOBranchAdjustable)
+ {
+ CDOBranchAdjustable branchAdjustable = (CDOBranchAdjustable)key;
+ branchAdjustable.adjustBranches(newBranchManager);
+ }
+ }
+
+ final InternalCDOBranch newBranch = newBranchManager.getBranch(branch.getID());
+ CDOCommitInfo newCommitInfo = new DelegatingCommitInfo()
+ {
+ @Override
+ protected CDOCommitInfo getDelegate()
+ {
+ return commitInfo;
+ }
+
+ @Override
+ public CDOBranch getBranch()
+ {
+ return newBranch;
+ }
+ };
+
+ long timeStamp = newCommitInfo.getTimeStamp();
+ CDOBranchPoint head = newBranch.getHead();
InternalTransaction transaction = replicatorSession.openTransaction(++lastTransactionID, head);
- ReplicatorCommitContext commitContext = new ReplicatorCommitContext(transaction, commitInfo);
+ ReplicatorCommitContext commitContext = new ReplicatorCommitContext(transaction, newCommitInfo);
commitContext.preWrite();
boolean success = false;

Back to the top