Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins')
-rw-r--r--plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/internal/db/cache/DBRevisionCache.java7
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/branch/CDOBranch.java4
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/branch/CDOBranchHandler.java20
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/branch/CDOBranchManager.java2
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/io/CDODataInput.java3
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/protocol/CDOProtocolConstants.java26
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/branch/CDOBranchImpl.java2
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/branch/CDOBranchManagerImpl.java18
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/io/CDODataInputImpl.java8
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/CDOCloningContext.java22
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/CDOReplicationContext.java25
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/branch/InternalCDOBranchManager.java7
-rw-r--r--plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientIndication.java7
-rw-r--r--plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java12
-rw-r--r--plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientRequest.java7
-rw-r--r--plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitNotificationIndication.java59
-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.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/LoadBranchesRequest.java60
-rw-r--r--plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/SyncRepositoryRequest.java (renamed from plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CloneRepositoryRequest.java)32
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java7
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreAccessor.java7
-rw-r--r--plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CDOServerIndication.java7
-rw-r--r--plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CDOServerProtocol.java7
-rw-r--r--plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CloneRepositoryIndication.java110
-rw-r--r--plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitNotificationRequest.java36
-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/LoadBranchesIndication.java67
-rw-r--r--plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/SyncRepositoryIndication.java89
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java28
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/clone/CloneRepository.java42
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/clone/CloneSynchronizer.java226
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/embedded/EmbeddedClientSessionProtocol.java10
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/mem/MEMStore.java23
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/mem/MEMStoreAccessor.java6
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/InternalRepository.java4
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/config/impl/RepositoryConfig.java1
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java28
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java7
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/CDOSessionProtocol.java4
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOSession.java6
-rw-r--r--plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/concurrent/QueueWorker.java10
41 files changed, 586 insertions, 474 deletions
diff --git a/plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/internal/db/cache/DBRevisionCache.java b/plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/internal/db/cache/DBRevisionCache.java
index 1015c15786..fa02cd6018 100644
--- a/plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/internal/db/cache/DBRevisionCache.java
+++ b/plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/internal/db/cache/DBRevisionCache.java
@@ -15,6 +15,7 @@ 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.branch.CDOBranchVersion;
+import org.eclipse.emf.cdo.common.commit.CDOCommitInfoManager;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDProvider;
import org.eclipse.emf.cdo.common.internal.db.AbstractQueryStatement;
@@ -740,6 +741,12 @@ public class DBRevisionCache extends Lifecycle implements InternalCDORevisionCac
}
@Override
+ protected CDOCommitInfoManager getCommitInfoManager()
+ {
+ return null;
+ }
+
+ @Override
protected CDORevisionFactory getRevisionFactory()
{
return revisionFactory;
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/branch/CDOBranch.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/branch/CDOBranch.java
index 75254cbd82..cfcd682797 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/branch/CDOBranch.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/branch/CDOBranch.java
@@ -18,9 +18,9 @@ public interface CDOBranch extends Comparable<CDOBranch>
{
public static final int MAIN_BRANCH_ID = 0;
- public static final String MAIN_BRANCH_NAME = "MAIN";
+ public static final String MAIN_BRANCH_NAME = "MAIN"; //$NON-NLS-1$
- public static final String PATH_SEPARATOR = "/";
+ public static final String PATH_SEPARATOR = "/"; //$NON-NLS-1$
public boolean isMainBranch();
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/branch/CDOBranchHandler.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/branch/CDOBranchHandler.java
new file mode 100644
index 0000000000..f641db9937
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/branch/CDOBranchHandler.java
@@ -0,0 +1,20 @@
+/**
+ * Copyright (c) 2004 - 2010 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.common.branch;
+
+/**
+ * @author Eike Stepper
+ * @since 3.0
+ */
+public interface CDOBranchHandler
+{
+ public void handleBranch(CDOBranch branch);
+}
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/branch/CDOBranchManager.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/branch/CDOBranchManager.java
index a3fa474f2b..08d31e21d3 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/branch/CDOBranchManager.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/branch/CDOBranchManager.java
@@ -23,4 +23,6 @@ public interface CDOBranchManager extends INotifier
public CDOBranch getBranch(int branchID);
public CDOBranch getBranch(String path);
+
+ public int getBranches(int startID, int endID, CDOBranchHandler handler);
}
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/io/CDODataInput.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/io/CDODataInput.java
index 9faa98f2eb..4b62999a5a 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/io/CDODataInput.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/io/CDODataInput.java
@@ -16,7 +16,6 @@ import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.branch.CDOBranchVersion;
import org.eclipse.emf.cdo.common.commit.CDOCommitData;
import org.eclipse.emf.cdo.common.commit.CDOCommitInfo;
-import org.eclipse.emf.cdo.common.commit.CDOCommitInfoManager;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDAndBranch;
import org.eclipse.emf.cdo.common.id.CDOIDAndVersion;
@@ -90,7 +89,7 @@ public interface CDODataInput extends ExtendedDataInput
/**
* @since 3.0
*/
- public CDOCommitInfo readCDOCommitInfo(CDOCommitInfoManager commitInfoManager) throws IOException;
+ public CDOCommitInfo readCDOCommitInfo() throws IOException;
// /////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/protocol/CDOProtocolConstants.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/protocol/CDOProtocolConstants.java
index 6c9ec85382..c98351c194 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/protocol/CDOProtocolConstants.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/protocol/CDOProtocolConstants.java
@@ -147,22 +147,27 @@ public interface CDOProtocolConstants
/**
* @since 3.0
*/
- public static final short SIGNAL_REPOSITORY_STATE_NOTIFICATION = 35;
+ public static final short SIGNAL_LOAD_BRANCHES = 35;
/**
* @since 3.0
*/
- public static final short SIGNAL_BRANCH_NOTIFICATION = 36;
+ public static final short SIGNAL_REPOSITORY_STATE_NOTIFICATION = 36;
/**
* @since 3.0
*/
- public static final short SIGNAL_LOAD_COMMIT_INFOS = 37;
+ public static final short SIGNAL_BRANCH_NOTIFICATION = 37;
/**
* @since 3.0
*/
- public static final short SIGNAL_CLONE_REPOSITORY = 38;
+ public static final short SIGNAL_LOAD_COMMIT_INFOS = 38;
+
+ /**
+ * @since 3.0
+ */
+ public static final short SIGNAL_SYNC_REPOSITORY = 39;
// //////////////////////////////////////////////////////////////////////
// Session Management
@@ -226,25 +231,20 @@ public interface CDOProtocolConstants
public static final byte REMOTE_SESSION_CUSTOM_DATA = 5;
// //////////////////////////////////////////////////////////////////////
- // Cloning
-
- /**
- * @since 3.0
- */
- public static final byte CLONING_FINISHED = 0;
+ // Syncing
/**
* @since 3.0
*/
- public static final byte CLONING_PACKAGE = 1;
+ public static final byte SYNC_FINISHED = 0;
/**
* @since 3.0
*/
- public static final byte CLONING_BRANCH = 2;
+ public static final byte SYNC_BRANCH = 1;
/**
* @since 3.0
*/
- public static final byte CLONING_REVISION = 3;
+ public static final byte SYNC_COMMIT = 2;
}
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/branch/CDOBranchImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/branch/CDOBranchImpl.java
index e94ee08574..1be11d9cfa 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/branch/CDOBranchImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/branch/CDOBranchImpl.java
@@ -126,7 +126,7 @@ public class CDOBranchImpl implements InternalCDOBranch
for (int i = 0; i < infos.length; i++)
{
SubBranchInfo info = infos[i];
- branches[i] = branchManager.getBranch(info.getID(), info.getName(), info.getBaseTimeStamp(), this);
+ branches[i] = branchManager.getBranch(info.getID(), info.getName(), this, info.getBaseTimeStamp());
}
}
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/branch/CDOBranchManagerImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/branch/CDOBranchManagerImpl.java
index f28ec9a680..674be07218 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/branch/CDOBranchManagerImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/branch/CDOBranchManagerImpl.java
@@ -12,6 +12,7 @@ package org.eclipse.emf.cdo.internal.common.branch;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
import org.eclipse.emf.cdo.common.branch.CDOBranchCreatedEvent;
+import org.eclipse.emf.cdo.common.branch.CDOBranchHandler;
import org.eclipse.emf.cdo.common.branch.CDOBranchManager;
import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.util.CDOTimeProvider;
@@ -108,19 +109,19 @@ public class CDOBranchManagerImpl extends Lifecycle implements InternalCDOBranch
return branch;
}
- public InternalCDOBranch getBranch(int id, String name, long baseTimeStamp, InternalCDOBranch base)
+ public InternalCDOBranch getBranch(int id, String name, InternalCDOBranch baseBranch, long baseTimeStamp)
{
synchronized (branches)
{
InternalCDOBranch branch = branches.get(id);
if (branch == null)
{
- branch = new CDOBranchImpl(id, name, CDOBranchUtil.createBranchPoint(base, baseTimeStamp));
+ branch = new CDOBranchImpl(id, name, baseBranch.getPoint(baseTimeStamp));
putBranch(branch);
}
else if (branch.isProxy())
{
- branch.setBranchInfo(name, base, baseTimeStamp);
+ branch.setBranchInfo(name, baseBranch, baseTimeStamp);
}
return branch;
@@ -150,6 +151,12 @@ public class CDOBranchManagerImpl extends Lifecycle implements InternalCDOBranch
return null;
}
+ public int getBranches(int startID, int endID, CDOBranchHandler handler)
+ {
+ checkActive();
+ return branchLoader.loadBranches(startID, endID, handler);
+ }
+
public InternalCDOBranch createBranch(String name, InternalCDOBranch baseBranch, long baseTimeStamp)
{
checkActive();
@@ -160,6 +167,11 @@ public class CDOBranchManagerImpl extends Lifecycle implements InternalCDOBranch
}
int branchID = branchLoader.createBranch(new BranchInfo(name, baseBranch.getID(), baseTimeStamp));
+ return createBranch(branchID, name, baseBranch, baseTimeStamp);
+ }
+
+ public InternalCDOBranch createBranch(int branchID, String name, InternalCDOBranch baseBranch, long baseTimeStamp)
+ {
CDOBranchPoint base = CDOBranchUtil.createBranchPoint(baseBranch, baseTimeStamp);
InternalCDOBranch branch = new CDOBranchImpl(branchID, name, base);
synchronized (branches)
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/io/CDODataInputImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/io/CDODataInputImpl.java
index 3606df6d46..717dd4fbf5 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/io/CDODataInputImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/io/CDODataInputImpl.java
@@ -225,7 +225,7 @@ public abstract class CDODataInputImpl extends ExtendedDataInput.Delegating impl
return new CDOCommitDataImpl(newPackageUnits, newObjects, changedObjects, detachedObjects);
}
- public CDOCommitInfo readCDOCommitInfo(CDOCommitInfoManager commitInfoManager) throws IOException
+ public CDOCommitInfo readCDOCommitInfo() throws IOException
{
CDOBranch branch = readCDOBranch();
long timeStamp = readLong();
@@ -233,8 +233,8 @@ public abstract class CDODataInputImpl extends ExtendedDataInput.Delegating impl
String comment = readString();
CDOCommitData commitData = readCDOCommitData();
- return ((InternalCDOCommitInfoManager)commitInfoManager).createCommitInfo(branch, timeStamp, userID, comment,
- commitData);
+ InternalCDOCommitInfoManager commitInfoManager = (InternalCDOCommitInfoManager)getCommitInfoManager();
+ return commitInfoManager.createCommitInfo(branch, timeStamp, userID, comment, commitData);
}
public CDOID readCDOID() throws IOException
@@ -503,6 +503,8 @@ public abstract class CDODataInputImpl extends ExtendedDataInput.Delegating impl
protected abstract CDOBranchManager getBranchManager();
+ protected abstract CDOCommitInfoManager getCommitInfoManager();
+
protected abstract CDORevisionFactory getRevisionFactory();
protected abstract CDOListFactory getListFactory();
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/CDOCloningContext.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/CDOCloningContext.java
deleted file mode 100644
index 83a3a38262..0000000000
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/CDOCloningContext.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package org.eclipse.emf.cdo.spi.common;
-
-import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
-
-/**
- * @author Eike Stepper
- * @since 3.0
- */
-public interface CDOCloningContext
-{
- public long getStartTime();
-
- public long getEndTime();
-
- public int getBranchID();
-
- public void addPackageUnit(String id);
-
- public void addBranch(int id);
-
- public void addRevision(InternalCDORevision revision);
-}
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/CDOReplicationContext.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/CDOReplicationContext.java
new file mode 100644
index 0000000000..9a17e4d1fd
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/CDOReplicationContext.java
@@ -0,0 +1,25 @@
+/**
+ * Copyright (c) 2004 - 2010 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;
+
+import org.eclipse.emf.cdo.common.branch.CDOBranchHandler;
+import org.eclipse.emf.cdo.common.commit.CDOCommitInfoHandler;
+
+/**
+ * @author Eike Stepper
+ * @since 3.0
+ */
+public interface CDOReplicationContext extends CDOBranchHandler, CDOCommitInfoHandler
+{
+ public int getLastReplicatedBranchID();
+
+ public long getLastReplicatedCommitTime();
+}
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/branch/InternalCDOBranchManager.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/branch/InternalCDOBranchManager.java
index 8dac62cdb0..4ab7ed46e1 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/branch/InternalCDOBranchManager.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/branch/InternalCDOBranchManager.java
@@ -10,6 +10,7 @@
*/
package org.eclipse.emf.cdo.spi.common.branch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchHandler;
import org.eclipse.emf.cdo.common.branch.CDOBranchManager;
import org.eclipse.emf.cdo.common.io.CDODataInput;
import org.eclipse.emf.cdo.common.io.CDODataOutput;
@@ -39,12 +40,14 @@ public interface InternalCDOBranchManager extends CDOBranchManager, ILifecycle
public InternalCDOBranch getBranch(int branchID);
- public InternalCDOBranch getBranch(int id, String name, long baseTimeStamp, InternalCDOBranch base);
+ public InternalCDOBranch getBranch(int id, String name, InternalCDOBranch baseBranch, long baseTimeStamp);
public InternalCDOBranch getBranch(String path);
public InternalCDOBranch createBranch(String name, InternalCDOBranch baseBranch, long baseTimeStamp);
+ public InternalCDOBranch createBranch(int branchID, String name, InternalCDOBranch baseBranch, long baseTimeStamp);
+
public void handleBranchCreated(InternalCDOBranch branch);
/**
@@ -59,6 +62,8 @@ public interface InternalCDOBranchManager extends CDOBranchManager, ILifecycle
public SubBranchInfo[] loadSubBranches(int branchID);
+ public int loadBranches(int startID, int endID, CDOBranchHandler branchHandler);
+
/**
* @author Eike Stepper
* @since 3.0
diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientIndication.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientIndication.java
index e7abd2bf59..fee17792aa 100644
--- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientIndication.java
+++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientIndication.java
@@ -12,6 +12,7 @@
package org.eclipse.emf.cdo.internal.net4j.protocol;
import org.eclipse.emf.cdo.common.branch.CDOBranchManager;
+import org.eclipse.emf.cdo.common.commit.CDOCommitInfoManager;
import org.eclipse.emf.cdo.common.io.CDODataInput;
import org.eclipse.emf.cdo.common.model.CDOPackageRegistry;
import org.eclipse.emf.cdo.common.revision.CDOListFactory;
@@ -79,6 +80,12 @@ public abstract class CDOClientIndication extends Indication
}
@Override
+ protected CDOCommitInfoManager getCommitInfoManager()
+ {
+ return getSession().getCommitInfoManager();
+ }
+
+ @Override
protected CDORevisionFactory getRevisionFactory()
{
return getSession().getRevisionManager().getFactory();
diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java
index 6f2f77345d..69f227cb07 100644
--- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java
+++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java
@@ -13,6 +13,7 @@ package org.eclipse.emf.cdo.internal.net4j.protocol;
import org.eclipse.emf.cdo.CDOObject;
import org.eclipse.emf.cdo.common.CDOCommonSession.Options.PassiveUpdateMode;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchHandler;
import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.branch.CDOBranchVersion;
import org.eclipse.emf.cdo.common.commit.CDOCommitData;
@@ -26,7 +27,7 @@ import org.eclipse.emf.cdo.internal.net4j.bundle.OM;
import org.eclipse.emf.cdo.session.CDOSession;
import org.eclipse.emf.cdo.session.remote.CDORemoteSession;
import org.eclipse.emf.cdo.session.remote.CDORemoteSessionMessage;
-import org.eclipse.emf.cdo.spi.common.CDOCloningContext;
+import org.eclipse.emf.cdo.spi.common.CDOReplicationContext;
import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageUnit;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
import org.eclipse.emf.cdo.spi.common.revision.RevisionInfo;
@@ -122,6 +123,11 @@ public class CDOClientProtocol extends SignalProtocol<CDOSession> implements CDO
return send(new LoadSubBranchesRequest(this, branchID));
}
+ public int loadBranches(int startID, int endID, CDOBranchHandler handler)
+ {
+ return send(new LoadBranchesRequest(this, startID, endID, handler));
+ }
+
public void loadCommitInfos(CDOBranch branch, long startTime, long endTime, CDOCommitInfoHandler handler)
{
send(new LoadCommitInfosRequest(this, branch, startTime, endTime, handler));
@@ -291,9 +297,9 @@ public class CDOClientProtocol extends SignalProtocol<CDOSession> implements CDO
return send(new UnsubscribeRemoteSessionsRequest(this));
}
- public void cloneRepository(CDOCloningContext context)
+ public void syncRepository(CDOReplicationContext context)
{
- send(new CloneRepositoryRequest(this, context));
+ send(new SyncRepositoryRequest(this, context));
}
@Override
diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientRequest.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientRequest.java
index e875e56b4f..85f9dbc091 100644
--- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientRequest.java
+++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientRequest.java
@@ -12,6 +12,7 @@
package org.eclipse.emf.cdo.internal.net4j.protocol;
import org.eclipse.emf.cdo.common.branch.CDOBranchManager;
+import org.eclipse.emf.cdo.common.commit.CDOCommitInfoManager;
import org.eclipse.emf.cdo.common.id.CDOIDProvider;
import org.eclipse.emf.cdo.common.io.CDODataInput;
import org.eclipse.emf.cdo.common.io.CDODataOutput;
@@ -102,6 +103,12 @@ public abstract class CDOClientRequest<RESULT> extends RequestWithConfirmation<R
}
@Override
+ protected CDOCommitInfoManager getCommitInfoManager()
+ {
+ return getSession().getCommitInfoManager();
+ }
+
+ @Override
protected CDORevisionFactory getRevisionFactory()
{
return getSession().getRevisionManager().getFactory();
diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitNotificationIndication.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitNotificationIndication.java
index b70472680c..0e1b48ff96 100644
--- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitNotificationIndication.java
+++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitNotificationIndication.java
@@ -33,64 +33,7 @@ public class CommitNotificationIndication extends CDOClientIndication
protected void indicating(CDODataInput in) throws IOException
{
InternalCDOSession session = getSession();
- CDOCommitInfo commitInfo = in.readCDOCommitInfo(session.getCommitInfoManager());
+ CDOCommitInfo commitInfo = in.readCDOCommitInfo();
session.handleCommitNotification(commitInfo);
-
- // CDOBranchPoint branchPoint = in.readCDOBranchPoint();
- // if (TRACER.isEnabled())
- // {
- // TRACER.format("Read branchpoint: {0}", branchPoint); //$NON-NLS-1$
- // }
- //
- // CDOPackageUnit[] packageUnits = in.readCDOPackageUnits(null);
- // InternalCDOPackageRegistry packageRegistry = getSession().getPackageRegistry();
- // for (int i = 0; i < packageUnits.length; i++)
- // {
- // packageRegistry.putPackageUnit((InternalCDOPackageUnit)packageUnits[i]);
- // }
- //
- // int size = in.readInt();
- // if (TRACER.isEnabled())
- // {
- // TRACER.format("Reading {0} dirty IDs", size); //$NON-NLS-1$
- // }
- //
- // InternalCDOSession session = getSession();
- // Set<CDOIDAndVersion> dirtyOIDandVersions = new HashSet<CDOIDAndVersion>();
- // for (int i = 0; i < size; i++)
- // {
- // CDOIDAndVersion dirtyOIDandVersion = in.readCDOIDAndVersion();
- // if (TRACER.isEnabled())
- // {
- // TRACER.format("Read dirty ID: {0}", dirtyOIDandVersion); //$NON-NLS-1$
- // }
- //
- // dirtyOIDandVersions.add(dirtyOIDandVersion);
- // }
- //
- // size = in.readInt();
- // if (TRACER.isEnabled())
- // {
- // TRACER.format("Reading {0} Deltas", size); //$NON-NLS-1$
- // }
- //
- // List<CDORevisionDelta> deltas = new ArrayList<CDORevisionDelta>();
- // for (int i = 0; i < size; i++)
- // {
- // CDORevisionDelta revisionDelta = in.readCDORevisionDelta();
- // deltas.add(revisionDelta);
- // }
- //
- // size = in.readInt();
- // if (TRACER.isEnabled())
- // {
- // TRACER.format("Reading {0} Detach Objects", size); //$NON-NLS-1$
- // }
- //
- // List<CDOID> detachedObjects = new ArrayList<CDOID>();
- // for (int i = 0; i < size; i++)
- // {
- // detachedObjects.add(in.readCDOID());
- // }
}
}
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 8a9d66f594..8e6bf4d0c6 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
@@ -16,6 +16,7 @@ package org.eclipse.emf.cdo.internal.net4j.protocol;
import org.eclipse.emf.cdo.common.branch.CDOBranchManager;
import org.eclipse.emf.cdo.common.commit.CDOCommitData;
+import org.eclipse.emf.cdo.common.commit.CDOCommitInfoManager;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDAndVersion;
import org.eclipse.emf.cdo.common.id.CDOIDMetaRange;
@@ -220,6 +221,12 @@ public class CommitTransactionRequest extends RequestWithMonitoring<CommitTransa
}
@Override
+ protected CDOCommitInfoManager getCommitInfoManager()
+ {
+ return getSession().getCommitInfoManager();
+ }
+
+ @Override
protected CDORevisionFactory getRevisionFactory()
{
return getSession().getRevisionManager().getFactory();
diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/LoadBranchesRequest.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/LoadBranchesRequest.java
new file mode 100644
index 0000000000..1a4d278ca6
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/LoadBranchesRequest.java
@@ -0,0 +1,60 @@
+/***************************************************************************
+ * Copyright (c) 2004 - 2010 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.internal.net4j.protocol;
+
+import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchHandler;
+import org.eclipse.emf.cdo.common.io.CDODataInput;
+import org.eclipse.emf.cdo.common.io.CDODataOutput;
+import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants;
+
+import java.io.IOException;
+
+/**
+ * @author Eike Stepper
+ */
+public class LoadBranchesRequest extends CDOClientRequest<Integer>
+{
+ private int startID;
+
+ private int endID;
+
+ private CDOBranchHandler handler;
+
+ public LoadBranchesRequest(CDOClientProtocol protocol, int startID, int endID, CDOBranchHandler handler)
+ {
+ super(protocol, CDOProtocolConstants.SIGNAL_LOAD_BRANCHES);
+ this.startID = startID;
+ this.endID = endID;
+ this.handler = handler;
+ }
+
+ @Override
+ protected void requesting(CDODataOutput out) throws IOException
+ {
+ out.writeInt(startID);
+ out.writeInt(endID);
+ }
+
+ @Override
+ protected Integer confirming(CDODataInput in) throws IOException
+ {
+ int count = 0;
+ while (in.readByte() == CDOProtocolConstants.SYNC_BRANCH)
+ {
+ CDOBranch branch = in.readCDOBranch();
+ handler.handleBranch(branch);
+ ++count;
+ }
+
+ return count;
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CloneRepositoryRequest.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/SyncRepositoryRequest.java
index 9468b34371..e03188175e 100644
--- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CloneRepositoryRequest.java
+++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/SyncRepositoryRequest.java
@@ -13,30 +13,28 @@ package org.eclipse.emf.cdo.internal.net4j.protocol;
import org.eclipse.emf.cdo.common.io.CDODataInput;
import org.eclipse.emf.cdo.common.io.CDODataOutput;
import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants;
-import org.eclipse.emf.cdo.spi.common.CDOCloningContext;
-import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.CDOReplicationContext;
import java.io.IOException;
/**
* @author Eike Stepper
*/
-public class CloneRepositoryRequest extends CDOClientRequest<Boolean>
+public class SyncRepositoryRequest extends CDOClientRequest<Boolean>
{
- private CDOCloningContext context;
+ private CDOReplicationContext context;
- public CloneRepositoryRequest(CDOClientProtocol protocol, CDOCloningContext context)
+ public SyncRepositoryRequest(CDOClientProtocol protocol, CDOReplicationContext context)
{
- super(protocol, CDOProtocolConstants.SIGNAL_CLONE_REPOSITORY);
+ super(protocol, CDOProtocolConstants.SIGNAL_SYNC_REPOSITORY);
this.context = context;
}
@Override
protected void requesting(CDODataOutput out) throws IOException
{
- out.writeLong(context.getStartTime());
- out.writeLong(context.getEndTime());
- out.writeInt(context.getBranchID());
+ out.writeInt(context.getLastReplicatedBranchID());
+ out.writeLong(context.getLastReplicatedCommitTime());
}
@Override
@@ -47,23 +45,19 @@ public class CloneRepositoryRequest extends CDOClientRequest<Boolean>
byte opcode = in.readByte();
switch (opcode)
{
- case CDOProtocolConstants.CLONING_FINISHED:
+ case CDOProtocolConstants.SYNC_FINISHED:
return true;
- case CDOProtocolConstants.CLONING_PACKAGE:
- context.addPackageUnit(in.readCDOPackageURI());
+ case CDOProtocolConstants.SYNC_BRANCH:
+ context.handleBranch(in.readCDOBranch());
break;
- case CDOProtocolConstants.CLONING_BRANCH:
- context.addBranch(in.readInt());
- break;
-
- case CDOProtocolConstants.CLONING_REVISION:
- context.addRevision((InternalCDORevision)in.readCDORevision());
+ case CDOProtocolConstants.SYNC_COMMIT:
+ context.handleCommitInfo(in.readCDOCommitInfo());
break;
default:
- throw new IOException("Invalid cloning opcode: " + opcode);
+ throw new IOException("Invalid sync opcode: " + opcode);
}
}
}
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java
index cd8d0253d5..64bbcfe232 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java
@@ -14,6 +14,7 @@
package org.eclipse.emf.cdo.server.internal.db;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchHandler;
import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.branch.CDOBranchVersion;
import org.eclipse.emf.cdo.common.commit.CDOCommitData;
@@ -676,6 +677,12 @@ public class DBStoreAccessor extends LongIDStoreAccessor implements IDBStoreAcce
}
}
+ public int loadBranches(int startID, int endID, CDOBranchHandler branchHandler)
+ {
+ // TODO: implement DBStoreAccessor.loadBranches(startID, endID, branchHandler)
+ throw new UnsupportedOperationException();
+ }
+
public void loadCommitInfos(CDOBranch branch, long startTime, long endTime, CDOCommitInfoHandler handler)
{
StringBuilder builder = new StringBuilder();
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreAccessor.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreAccessor.java
index 03dc9e7838..918131a383 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreAccessor.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreAccessor.java
@@ -12,6 +12,7 @@
package org.eclipse.emf.cdo.server.internal.hibernate;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchHandler;
import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.branch.CDOBranchVersion;
import org.eclipse.emf.cdo.common.commit.CDOCommitData;
@@ -361,6 +362,12 @@ public class HibernateStoreAccessor extends StoreAccessor implements IHibernateS
throw new UnsupportedOperationException();
}
+ public int loadBranches(int startID, int endID, CDOBranchHandler branchHandler)
+ {
+ // TODO: implement HibernateStoreAccessor.loadBranches(startID, endID, branchHandler)
+ throw new UnsupportedOperationException();
+ }
+
public void loadCommitInfos(CDOBranch branch, long startTime, long endTime, CDOCommitInfoHandler handler)
{
// TODO: implement HibernateStoreAccessor.loadCommitInfos(branch, startTime, endTime, handler)
diff --git a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CDOServerIndication.java b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CDOServerIndication.java
index 1d8c2b4415..e6beb510e9 100644
--- a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CDOServerIndication.java
+++ b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CDOServerIndication.java
@@ -12,6 +12,7 @@
package org.eclipse.emf.cdo.server.internal.net4j.protocol;
import org.eclipse.emf.cdo.common.branch.CDOBranchManager;
+import org.eclipse.emf.cdo.common.commit.CDOCommitInfoManager;
import org.eclipse.emf.cdo.common.id.CDOIDProvider;
import org.eclipse.emf.cdo.common.io.CDODataInput;
import org.eclipse.emf.cdo.common.io.CDODataOutput;
@@ -100,6 +101,12 @@ public abstract class CDOServerIndication extends IndicationWithResponse
}
@Override
+ protected CDOCommitInfoManager getCommitInfoManager()
+ {
+ return getRepository().getCommitInfoManager();
+ }
+
+ @Override
protected CDORevisionFactory getRevisionFactory()
{
return getRepository().getRevisionManager().getFactory();
diff --git a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CDOServerProtocol.java b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CDOServerProtocol.java
index f851e5e447..015ca94cbf 100644
--- a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CDOServerProtocol.java
+++ b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CDOServerProtocol.java
@@ -175,6 +175,9 @@ public class CDOServerProtocol extends SignalProtocol<InternalSession> implement
case CDOProtocolConstants.SIGNAL_LOAD_SUB_BRANCHES:
return new LoadSubBranchesIndication(this);
+ case CDOProtocolConstants.SIGNAL_LOAD_BRANCHES:
+ return new LoadBranchesIndication(this);
+
case CDOProtocolConstants.SIGNAL_LOAD_REVISIONS:
return new LoadRevisionsIndication(this);
@@ -244,8 +247,8 @@ public class CDOServerProtocol extends SignalProtocol<InternalSession> implement
case CDOProtocolConstants.SIGNAL_LOAD_COMMIT_INFOS:
return new LoadCommitInfosIndication(this);
- case CDOProtocolConstants.SIGNAL_CLONE_REPOSITORY:
- return new CloneRepositoryIndication(this);
+ case CDOProtocolConstants.SIGNAL_SYNC_REPOSITORY:
+ return new SyncRepositoryIndication(this);
default:
return super.createSignalReactor(signalID);
diff --git a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CloneRepositoryIndication.java b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CloneRepositoryIndication.java
deleted file mode 100644
index 12ec92b664..0000000000
--- a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CloneRepositoryIndication.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/**
- * Copyright (c) 2004 - 2010 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.server.internal.net4j.protocol;
-
-import org.eclipse.emf.cdo.common.io.CDODataInput;
-import org.eclipse.emf.cdo.common.io.CDODataOutput;
-import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants;
-import org.eclipse.emf.cdo.common.revision.CDORevision;
-import org.eclipse.emf.cdo.spi.common.CDOCloningContext;
-import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
-
-import org.eclipse.net4j.util.WrappedException;
-
-import java.io.IOException;
-
-/**
- * @author Eike Stepper
- */
-public class CloneRepositoryIndication extends CDOServerIndication
-{
- private long startTime;
-
- private long endTime;
-
- private int branchID;
-
- public CloneRepositoryIndication(CDOServerProtocol protocol)
- {
- super(protocol, CDOProtocolConstants.SIGNAL_CLONE_REPOSITORY);
- }
-
- @Override
- protected void indicating(CDODataInput in) throws IOException
- {
- startTime = in.readLong();
- endTime = in.readLong();
- branchID = in.readInt();
- }
-
- @Override
- protected void responding(final CDODataOutput out) throws IOException
- {
- getRepository().clone(new CDOCloningContext()
- {
- public long getStartTime()
- {
- return startTime;
- }
-
- public long getEndTime()
- {
- return endTime;
- }
-
- public int getBranchID()
- {
- return branchID;
- }
-
- public void addPackageUnit(String id)
- {
- try
- {
- out.writeByte(CDOProtocolConstants.CLONING_PACKAGE);
- out.writeString(id);
- }
- catch (IOException ex)
- {
- throw WrappedException.wrap(ex);
- }
- }
-
- public void addBranch(int id)
- {
- try
- {
- out.writeByte(CDOProtocolConstants.CLONING_BRANCH);
- out.writeInt(id);
- }
- catch (IOException ex)
- {
- throw WrappedException.wrap(ex);
- }
- }
-
- public void addRevision(InternalCDORevision revision)
- {
- try
- {
- out.writeByte(CDOProtocolConstants.CLONING_REVISION);
- out.writeCDORevision(revision, CDORevision.UNCHUNKED);
- }
- catch (IOException ex)
- {
- throw WrappedException.wrap(ex);
- }
- }
- });
-
- out.writeByte(CDOProtocolConstants.CLONING_FINISHED);
- }
-}
diff --git a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitNotificationRequest.java b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitNotificationRequest.java
index 8db697e489..389e60643f 100644
--- a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitNotificationRequest.java
+++ b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitNotificationRequest.java
@@ -35,41 +35,5 @@ public class CommitNotificationRequest extends CDOServerRequest
protected void requesting(CDODataOutput out) throws IOException
{
out.writeCDOCommitInfo(commitInfo);
-
- // if (TRACER.isEnabled())
- // {
- // TRACER.format("Writing branchPoint: {0}", branchPoint); //$NON-NLS-1$
- // }
- //
- // out.writeCDOBranchPoint(branchPoint);
- // if (TRACER.isEnabled())
- // {
- // TRACER.format("Writing {0} dirty IDs", dirtyIDs.size()); //$NON-NLS-1$
- // }
- //
- // out.writeCDOPackageUnits(packageUnits);
- //
- // out.writeInt(dirtyIDs == null ? 0 : dirtyIDs.size());
- // for (CDOIDAndVersion dirtyID : dirtyIDs)
- // {
- // if (TRACER.isEnabled())
- // {
- // TRACER.format("Writing dirty ID: {0}", dirtyID); //$NON-NLS-1$
- // }
- //
- // out.writeCDOIDAndVersion(dirtyID);
- // }
- //
- // out.writeInt(deltas == null ? 0 : deltas.size());
- // for (CDORevisionDelta delta : deltas)
- // {
- // out.writeCDORevisionDelta(delta);
- // }
- //
- // out.writeInt(detachedObjects == null ? 0 : detachedObjects.size());
- // for (CDOID id : detachedObjects)
- // {
- // out.writeCDOID(id);
- // }
}
}
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 eab3b008c8..efa900f39f 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
@@ -14,6 +14,7 @@
package org.eclipse.emf.cdo.server.internal.net4j.protocol;
import org.eclipse.emf.cdo.common.branch.CDOBranchManager;
+import org.eclipse.emf.cdo.common.commit.CDOCommitInfoManager;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDMetaRange;
import org.eclipse.emf.cdo.common.id.CDOIDProvider;
@@ -132,6 +133,12 @@ public class CommitTransactionIndication extends IndicationWithMonitoring
}
@Override
+ protected CDOCommitInfoManager getCommitInfoManager()
+ {
+ return CommitTransactionIndication.this.getRepository().getCommitInfoManager();
+ }
+
+ @Override
protected CDORevisionFactory getRevisionFactory()
{
return CommitTransactionIndication.this.getRepository().getRevisionManager().getFactory();
diff --git a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadBranchesIndication.java b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadBranchesIndication.java
new file mode 100644
index 0000000000..370810c966
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadBranchesIndication.java
@@ -0,0 +1,67 @@
+/**
+ * Copyright (c) 2004 - 2010 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.server.internal.net4j.protocol;
+
+import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchHandler;
+import org.eclipse.emf.cdo.common.io.CDODataInput;
+import org.eclipse.emf.cdo.common.io.CDODataOutput;
+import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants;
+import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager;
+
+import org.eclipse.net4j.util.WrappedException;
+
+import java.io.IOException;
+
+/**
+ * @author Eike Stepper
+ */
+public class LoadBranchesIndication extends CDOReadIndication
+{
+ private int startID;
+
+ private int endID;
+
+ public LoadBranchesIndication(CDOServerProtocol protocol)
+ {
+ super(protocol, CDOProtocolConstants.SIGNAL_LOAD_BRANCHES);
+ }
+
+ @Override
+ protected void indicating(CDODataInput in) throws IOException
+ {
+ startID = in.readInt();
+ endID = in.readInt();
+ }
+
+ @Override
+ protected void responding(final CDODataOutput out) throws IOException
+ {
+ InternalCDOBranchManager branchManager = getRepository().getBranchManager();
+ branchManager.getBranches(startID, endID, new CDOBranchHandler()
+ {
+ public void handleBranch(CDOBranch branch)
+ {
+ try
+ {
+ out.writeByte(CDOProtocolConstants.SYNC_BRANCH);
+ out.writeCDOBranch(branch);
+ }
+ catch (IOException ex)
+ {
+ throw WrappedException.wrap(ex);
+ }
+ }
+ });
+
+ out.writeByte(CDOProtocolConstants.SYNC_FINISHED);
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/SyncRepositoryIndication.java b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/SyncRepositoryIndication.java
new file mode 100644
index 0000000000..40e8359506
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/SyncRepositoryIndication.java
@@ -0,0 +1,89 @@
+/**
+ * Copyright (c) 2004 - 2010 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.server.internal.net4j.protocol;
+
+import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.commit.CDOCommitInfo;
+import org.eclipse.emf.cdo.common.io.CDODataInput;
+import org.eclipse.emf.cdo.common.io.CDODataOutput;
+import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants;
+import org.eclipse.emf.cdo.spi.common.CDOReplicationContext;
+
+import org.eclipse.net4j.util.WrappedException;
+
+import java.io.IOException;
+
+/**
+ * @author Eike Stepper
+ */
+public class SyncRepositoryIndication extends CDOServerIndication
+{
+ private int lastReplicatedBranchID;
+
+ private long lastReplicatedCommitTime;
+
+ public SyncRepositoryIndication(CDOServerProtocol protocol)
+ {
+ super(protocol, CDOProtocolConstants.SIGNAL_SYNC_REPOSITORY);
+ }
+
+ @Override
+ protected void indicating(CDODataInput in) throws IOException
+ {
+ lastReplicatedBranchID = in.readInt();
+ lastReplicatedCommitTime = in.readLong();
+ }
+
+ @Override
+ protected void responding(final CDODataOutput out) throws IOException
+ {
+ getRepository().sync(new CDOReplicationContext()
+ {
+ public int getLastReplicatedBranchID()
+ {
+ return lastReplicatedBranchID;
+ }
+
+ public long getLastReplicatedCommitTime()
+ {
+ return lastReplicatedCommitTime;
+ }
+
+ public void handleBranch(CDOBranch branch)
+ {
+ try
+ {
+ out.writeByte(CDOProtocolConstants.SYNC_BRANCH);
+ out.writeCDOBranch(branch);
+ }
+ catch (IOException ex)
+ {
+ throw WrappedException.wrap(ex);
+ }
+ }
+
+ public void handleCommitInfo(CDOCommitInfo commitInfo)
+ {
+ try
+ {
+ out.writeByte(CDOProtocolConstants.SYNC_COMMIT);
+ out.writeCDOCommitInfo(commitInfo);
+ }
+ catch (IOException ex)
+ {
+ throw WrappedException.wrap(ex);
+ }
+ }
+ });
+
+ out.writeByte(CDOProtocolConstants.SYNC_FINISHED);
+ }
+}
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 a5b7acae3e..8c215afc07 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
@@ -16,6 +16,7 @@
package org.eclipse.emf.cdo.internal.server;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchHandler;
import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.branch.CDOBranchVersion;
import org.eclipse.emf.cdo.common.commit.CDOCommitData;
@@ -45,7 +46,7 @@ import org.eclipse.emf.cdo.server.ITransaction;
import org.eclipse.emf.cdo.server.InternalStore;
import org.eclipse.emf.cdo.server.StoreThreadLocal;
import org.eclipse.emf.cdo.server.IStoreChunkReader.Chunk;
-import org.eclipse.emf.cdo.spi.common.CDOCloningContext;
+import org.eclipse.emf.cdo.spi.common.CDOReplicationContext;
import org.eclipse.emf.cdo.spi.common.branch.CDOBranchUtil;
import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager;
import org.eclipse.emf.cdo.spi.common.commit.CDOCommitInfoUtil;
@@ -204,7 +205,11 @@ public class Repository extends Container<Object> implements InternalRepository
State oldState = this.state;
this.state = state;
fireEvent(new RepositoryStateChangedEvent(this, oldState, state));
- sessionManager.sendRepositoryStateNotification(oldState, state);
+
+ if (sessionManager != null)
+ {
+ sessionManager.sendRepositoryStateNotification(oldState, state);
+ }
}
}
@@ -260,6 +265,12 @@ public class Repository extends Container<Object> implements InternalRepository
return accessor.loadSubBranches(branchID);
}
+ public int loadBranches(int startID, int endID, CDOBranchHandler branchHandler)
+ {
+ IStoreAccessor accessor = StoreThreadLocal.getAccessor();
+ return accessor.loadBranches(startID, endID, branchHandler);
+ }
+
public void loadCommitInfos(CDOBranch branch, long startTime, long endTime, CDOCommitInfoHandler handler)
{
IStoreAccessor accessor = StoreThreadLocal.getAccessor();
@@ -906,16 +917,13 @@ public class Repository extends Container<Object> implements InternalRepository
}
}
- public void clone(CDOCloningContext context)
+ public void sync(CDOReplicationContext context)
{
- long endTime = context.getEndTime();
- long startTime = context.getStartTime();
- InternalCDOPackageRegistry packageRegistry = getPackageRegistry(false);
- for (InternalCDOPackageUnit packageUnit : packageRegistry.getPackageUnits(startTime, endTime))
- {
- context.addPackageUnit(packageUnit.getID());
- }
+ int startID = context.getLastReplicatedBranchID() + 1;
+ branchManager.getBranches(startID, 0, context);
+ long startTime = context.getLastReplicatedCommitTime() + 1L;
+ commitInfoManager.getCommitInfos(startTime, CDOBranchPoint.UNSPECIFIED_DATE, context);
}
@Override
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/clone/CloneRepository.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/clone/CloneRepository.java
index dc66277bfa..111f7b2fea 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/clone/CloneRepository.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/clone/CloneRepository.java
@@ -23,6 +23,9 @@ import org.eclipse.emf.cdo.common.model.CDOPackageUnit;
import org.eclipse.emf.cdo.common.revision.CDORevisionKey;
import org.eclipse.emf.cdo.internal.server.Repository;
import org.eclipse.emf.cdo.internal.server.TransactionCommitContext;
+import org.eclipse.emf.cdo.spi.common.CDOReplicationContext;
+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.model.InternalCDOPackageUnit;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionDelta;
@@ -45,12 +48,16 @@ import java.util.Map;
/**
* @author Eike Stepper
*/
-public class CloneRepository extends Repository.Default
+public class CloneRepository extends Repository.Default implements CDOReplicationContext
{
private CloneSynchronizer synchronizer;
private InternalSession replicatorSession;
+ private int lastReplicatedBranchID;
+
+ private long lastReplicatedCommitTime;
+
private int lastTransactionID;
public CloneRepository()
@@ -83,7 +90,31 @@ public class CloneRepository extends Repository.Default
return list.toArray();
}
- public void replicate(CDOCommitInfo commitInfo)
+ public int getLastReplicatedBranchID()
+ {
+ return lastReplicatedBranchID;
+ }
+
+ public long getLastReplicatedCommitTime()
+ {
+ return lastReplicatedCommitTime;
+ }
+
+ public void handleBranch(CDOBranch branch)
+ {
+ int branchID = branch.getID();
+ String name = branch.getName();
+
+ CDOBranchPoint base = branch.getBase();
+ InternalCDOBranch baseBranch = (InternalCDOBranch)base.getBranch();
+ long baseTimeStamp = base.getTimeStamp();
+
+ InternalCDOBranchManager branchManager = getBranchManager();
+ branchManager.createBranch(branchID, name, baseBranch, baseTimeStamp);
+ lastReplicatedBranchID = branchID;
+ }
+
+ public void handleCommitInfo(CDOCommitInfo commitInfo)
{
CDOBranchPoint head = commitInfo.getBranch().getHead();
InternalTransaction transaction = replicatorSession.openTransaction(++lastTransactionID, head);
@@ -98,6 +129,7 @@ public class CloneRepository extends Repository.Default
long timeStamp = commitInfo.getTimeStamp();
setLastCommitTimeStamp(timeStamp);
+ lastReplicatedCommitTime = timeStamp;
success = true;
}
finally
@@ -138,6 +170,12 @@ public class CloneRepository extends Repository.Default
super.doDeactivate();
}
+ @Override
+ protected void initRootResource()
+ {
+ // Do nothing
+ }
+
/**
* @author Eike Stepper
*/
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/clone/CloneSynchronizer.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/clone/CloneSynchronizer.java
index 8e3089fa2c..f1ae3c9d71 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/clone/CloneSynchronizer.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/clone/CloneSynchronizer.java
@@ -11,8 +11,7 @@
package org.eclipse.emf.cdo.internal.server.clone;
import org.eclipse.emf.cdo.common.CDOCommonSession.Options.PassiveUpdateMode;
-import org.eclipse.emf.cdo.common.commit.CDOCommitInfo;
-import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.common.branch.CDOBranchCreatedEvent;
import org.eclipse.emf.cdo.common.revision.cache.InternalCDORevisionCache;
import org.eclipse.emf.cdo.common.util.CDOCommonUtil;
import org.eclipse.emf.cdo.internal.common.revision.cache.noop.NOOPRevisionCache;
@@ -28,6 +27,7 @@ import org.eclipse.net4j.util.event.IListener;
import org.eclipse.net4j.util.lifecycle.ILifecycleEvent;
import org.eclipse.net4j.util.om.trace.ContextTracer;
+import org.eclipse.emf.spi.cdo.CDOSessionProtocol;
import org.eclipse.emf.spi.cdo.InternalCDOSession;
/**
@@ -36,50 +36,33 @@ import org.eclipse.emf.spi.cdo.InternalCDOSession;
*/
public class CloneSynchronizer extends QueueRunner
{
- public static final long NEVER_SYNCHRONIZED = -1;
-
public static final int DEFAULT_RETRY_INTERVAL = 3;
private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG_REPOSITORY, CloneSynchronizer.class);
+ private CloneRepository clone;
+
private int retryInterval = DEFAULT_RETRY_INTERVAL;
private CDOSessionConfiguration masterConfiguration;
private InternalCDOSession master;
- private IListener masterListener = new IListener()
- {
- public void notifyEvent(IEvent event)
- {
- if (event instanceof CDOSessionInvalidationEvent)
- {
- CDOSessionInvalidationEvent e = (CDOSessionInvalidationEvent)event;
- if (e.isRemote())
- {
- replicate(e);
- }
- }
- else if (event instanceof ILifecycleEvent)
- {
- ILifecycleEvent e = (ILifecycleEvent)event;
- if (e.getKind() == ILifecycleEvent.Kind.DEACTIVATED)
- {
- OM.LOG.info("Disconnected from master.");
- master.removeListener(masterListener);
- master = null;
- connect();
- }
- }
- }
- };
+ private MasterListener masterListener = new MasterListener();
- private MutableLong syncedTimeStamp = new MutableLong();
+ public CloneSynchronizer()
+ {
+ }
- private CloneRepository clone;
+ public CloneRepository getClone()
+ {
+ return clone;
+ }
- public CloneSynchronizer()
+ public void setClone(CloneRepository clone)
{
+ checkInactive();
+ this.clone = clone;
}
public int getRetryInterval()
@@ -103,38 +86,16 @@ public class CloneSynchronizer extends QueueRunner
this.masterConfiguration = masterConfiguration;
}
- public CloneRepository getClone()
- {
- return clone;
- }
-
- public void setClone(CloneRepository clone)
- {
- checkInactive();
- this.clone = clone;
- }
-
public CDOSession getMaster()
{
return master;
}
- public long getSyncedTimeStamp()
- {
- return syncedTimeStamp.getValue();
- }
-
- public void setSyncedTimeStamp(long syncedTimeStamp)
- {
- this.syncedTimeStamp.setValue(syncedTimeStamp);
- }
-
@Override
protected void doBeforeActivate() throws Exception
{
super.doBeforeActivate();
checkState(masterConfiguration, "masterConfiguration"); //$NON-NLS-1$
- checkState(syncedTimeStamp.isSpecified(), "syncedTimeStamp"); //$NON-NLS-1$
checkState(clone, "clone"); //$NON-NLS-1$
}
@@ -170,8 +131,6 @@ public class CloneSynchronizer extends QueueRunner
TRACER.format("Connecting to master ({0})...", CDOCommonUtil.formatTimeStamp()); //$NON-NLS-1$
}
- syncedTimeStamp.setValue(NEVER_SYNCHRONIZED);
-
try
{
masterConfiguration.setPassiveUpdateMode(PassiveUpdateMode.ADDITIONS);
@@ -184,18 +143,21 @@ public class CloneSynchronizer extends QueueRunner
throw new IllegalStateException("Master session does not use a NOOPRevisionCache: "
+ cache.getClass().getName());
}
+
+ sync();
}
catch (Exception ex)
{
if (isActive())
{
OM.LOG.warn("Connection attempt failed. Retrying in " + retryInterval + " seconds...", ex);
-
ConcurrencyUtil.sleep(1000L * retryInterval); // TODO Respect deactivation
-
- checkActive();
connect();
}
+ else
+ {
+ clearQueue();
+ }
return;
}
@@ -209,120 +171,54 @@ public class CloneSynchronizer extends QueueRunner
private void sync()
{
- // addWork(new Runnable()
- // {
- // public void run()
- // {
- // checkActive();
- // final long masterTimeStamp = master.getLastUpdateTime();
- // final long syncedTimeStamp = getSyncedTimeStamp();
- // if (syncedTimeStamp < masterTimeStamp)
- // {
- // if (TRACER.isEnabled())
- // {
- // TRACER.format("Synchronizing with master ({0})...", CDOCommonUtil.formatTimeStamp(masterTimeStamp)); //$NON-NLS-1$
- // }
- //
- // master.cloneRepository(new CDOCloningContext()
- // {
- // public long getStartTime()
- // {
- // return syncedTimeStamp;
- // }
- //
- // public long getEndTime()
- // {
- // return masterTimeStamp;
- // }
- //
- // public int getBranchID()
- // {
- // return 0;
- // }
- //
- // public void addPackageUnit(String id)
- // {
- // InternalCDOPackageUnit packageUnit = master.getPackageRegistry().getPackageUnit(id);
- // sync(packageUnit);
- // }
- //
- // public void addBranch(int id)
- // {
- // InternalCDOBranch branch = master.getBranchManager().getBranch(id);
- // sync(branch);
- // }
- //
- // public void addRevision(InternalCDORevision revision)
- // {
- // sync(revision);
- // }
- // });
- //
- // OM.LOG.info("Synchronized with master.");
- // }
- // }
- // });
- }
+ addWork(new Runnable()
+ {
+ public void run()
+ {
+ checkActive();
+ OM.LOG.info("Synchronizing with master...");
+ clone.setState(CloneRepository.State.SYNCING);
- // private void sync(InternalCDOPackageUnit packageUnit)
- // {
- // if (TRACER.isEnabled())
- // {
- // TRACER.format("Syncronized package unit {0}", packageUnit); //$NON-NLS-1$
- // }
- // }
- //
- // private void sync(InternalCDOBranch branch)
- // {
- // if (TRACER.isEnabled())
- // {
- // TRACER.format("Syncronized branch {0}", branch); //$NON-NLS-1$
- // }
- // }
- //
- // private void sync(InternalCDORevision revision)
- // {
- // if (TRACER.isEnabled())
- // {
- // TRACER.format("Syncronized revision {0}", revision); //$NON-NLS-1$
- // }
- // }
-
- protected void replicate(CDOCommitInfo commitInfo)
- {
- clone.replicate(commitInfo);
+ CDOSessionProtocol sessionProtocol = master.getSessionProtocol();
+ sessionProtocol.syncRepository(clone);
+
+ clone.setState(CloneRepository.State.ONLINE);
+ OM.LOG.info("Synchronized with master.");
+ }
+ });
}
/**
* @author Eike Stepper
*/
- private static final class MutableLong
+ private final class MasterListener implements IListener
{
- private long value = CDORevision.UNSPECIFIED_DATE;
-
- public MutableLong()
- {
- }
-
- public synchronized boolean isSpecified()
- {
- return value != CDORevision.UNSPECIFIED_DATE;
- }
-
- public synchronized long getValue()
- {
- return value;
- }
-
- public synchronized void setValue(long value)
- {
- this.value = value;
- }
-
- @Override
- public String toString()
+ public void notifyEvent(IEvent event)
{
- return String.valueOf(value);
+ if (event instanceof CDOBranchCreatedEvent)
+ {
+ CDOBranchCreatedEvent e = (CDOBranchCreatedEvent)event;
+ clone.handleBranch(e.getBranch());
+ }
+ else if (event instanceof CDOSessionInvalidationEvent)
+ {
+ CDOSessionInvalidationEvent e = (CDOSessionInvalidationEvent)event;
+ if (e.isRemote())
+ {
+ clone.handleCommitInfo(e);
+ }
+ }
+ else if (event instanceof ILifecycleEvent)
+ {
+ ILifecycleEvent e = (ILifecycleEvent)event;
+ if (e.getKind() == ILifecycleEvent.Kind.DEACTIVATED)
+ {
+ OM.LOG.info("Disconnected from master.");
+ master.removeListener(masterListener);
+ master = null;
+ connect();
+ }
+ }
}
}
}
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 ba3fa6d8e8..86fefe3f85 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
@@ -13,6 +13,7 @@ package org.eclipse.emf.cdo.internal.server.embedded;
import org.eclipse.emf.cdo.CDOObject;
import org.eclipse.emf.cdo.common.CDOCommonSession.Options.PassiveUpdateMode;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchHandler;
import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.branch.CDOBranchVersion;
import org.eclipse.emf.cdo.common.commit.CDOCommitData;
@@ -28,7 +29,7 @@ import org.eclipse.emf.cdo.common.util.CDOQueryQueue;
import org.eclipse.emf.cdo.server.StoreThreadLocal;
import org.eclipse.emf.cdo.session.remote.CDORemoteSession;
import org.eclipse.emf.cdo.session.remote.CDORemoteSessionMessage;
-import org.eclipse.emf.cdo.spi.common.CDOCloningContext;
+import org.eclipse.emf.cdo.spi.common.CDOReplicationContext;
import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageUnit;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionDelta;
@@ -114,6 +115,11 @@ public class EmbeddedClientSessionProtocol extends Lifecycle implements CDOSessi
throw new UnsupportedOperationException();
}
+ public int loadBranches(int startID, int endID, CDOBranchHandler branchHandler)
+ {
+ throw new UnsupportedOperationException();
+ }
+
public RepositoryTimeResult getRepositoryTime()
{
RepositoryTimeResult result = new RepositoryTimeResult();
@@ -409,7 +415,7 @@ public class EmbeddedClientSessionProtocol extends Lifecycle implements CDOSessi
throw new UnsupportedOperationException();
}
- public void cloneRepository(CDOCloningContext context)
+ public void syncRepository(CDOReplicationContext context)
{
throw new UnsupportedOperationException();
}
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/mem/MEMStore.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/mem/MEMStore.java
index 2bd41536ce..883d051e3b 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/mem/MEMStore.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/mem/MEMStore.java
@@ -14,6 +14,7 @@
package org.eclipse.emf.cdo.internal.server.mem;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchHandler;
import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.branch.CDOBranchVersion;
import org.eclipse.emf.cdo.common.commit.CDOCommitInfo;
@@ -118,6 +119,28 @@ public class MEMStore extends LongIDStore implements IMEMStore, BranchLoader
return result.toArray(new SubBranchInfo[result.size()]);
}
+ public synchronized int loadBranches(int startID, int endID, CDOBranchHandler handler)
+ {
+ int count = 0;
+ InternalCDOBranchManager branchManager = getRepository().getBranchManager();
+ for (Entry<Integer, BranchInfo> entry : branchInfos.entrySet())
+ {
+ int id = entry.getKey();
+ if (startID <= id && (id <= endID || endID == 0))
+ {
+ BranchInfo branchInfo = entry.getValue();
+ String name = branchInfo.getName();
+ InternalCDOBranch baseBranch = branchManager.getBranch(branchInfo.getBaseBranchID());
+ long baseTimeStamp = branchInfo.getBaseTimeStamp();
+ InternalCDOBranch branch = branchManager.getBranch(id, name, baseBranch, baseTimeStamp);
+ handler.handleBranch(branch);
+ ++count;
+ }
+ }
+
+ return count;
+ }
+
public synchronized void loadCommitInfos(CDOBranch branch, long startTime, long endTime, CDOCommitInfoHandler handler)
{
InternalCDOCommitInfoManager manager = getRepository().getCommitInfoManager();
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/mem/MEMStoreAccessor.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/mem/MEMStoreAccessor.java
index 645ae418c6..da39680704 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/mem/MEMStoreAccessor.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/mem/MEMStoreAccessor.java
@@ -13,6 +13,7 @@
package org.eclipse.emf.cdo.internal.server.mem;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchHandler;
import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.branch.CDOBranchVersion;
import org.eclipse.emf.cdo.common.commit.CDOCommitData;
@@ -169,6 +170,11 @@ public class MEMStoreAccessor extends LongIDStoreAccessor
return getStore().loadSubBranches(branchID);
}
+ public int loadBranches(int startID, int endID, CDOBranchHandler branchHandler)
+ {
+ return getStore().loadBranches(startID, endID, branchHandler);
+ }
+
public void loadCommitInfos(CDOBranch branch, long startTime, long endTime, CDOCommitInfoHandler handler)
{
getStore().loadCommitInfos(branch, startTime, endTime, handler);
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/InternalRepository.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/InternalRepository.java
index e868dea712..3f611e4d1c 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/InternalRepository.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/InternalRepository.java
@@ -16,7 +16,7 @@ import org.eclipse.emf.cdo.server.IRepository;
import org.eclipse.emf.cdo.server.IStoreAccessor;
import org.eclipse.emf.cdo.server.ITransaction;
import org.eclipse.emf.cdo.server.InternalStore;
-import org.eclipse.emf.cdo.spi.common.CDOCloningContext;
+import org.eclipse.emf.cdo.spi.common.CDOReplicationContext;
import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager;
import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager.BranchLoader;
import org.eclipse.emf.cdo.spi.common.commit.InternalCDOCommitInfoManager;
@@ -87,5 +87,5 @@ public interface InternalRepository extends IRepository, PackageLoader, BranchLo
public void notifyWriteAccessHandlers(ITransaction transaction, IStoreAccessor.CommitContext commitContext,
OMMonitor monitor);
- public void clone(CDOCloningContext context);
+ public void sync(CDOReplicationContext context);
}
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/config/impl/RepositoryConfig.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/config/impl/RepositoryConfig.java
index f665b94ba2..06c49a9d8b 100644
--- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/config/impl/RepositoryConfig.java
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/config/impl/RepositoryConfig.java
@@ -349,7 +349,6 @@ public abstract class RepositoryConfig extends Config implements IRepositoryConf
CloneSynchronizer synchronizer = new CloneSynchronizer();
synchronizer.setMasterConfiguration(config);
synchronizer.setRetryInterval(1);
- synchronizer.setSyncedTimeStamp(CloneSynchronizer.NEVER_SYNCHRONIZED);
IStore store = createStore(name);
return (InternalRepository)CDOServerUtil.createCloneRepository(name, store, props, synchronizer);
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java
index 565b919518..0bfaf318b7 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java
@@ -19,6 +19,7 @@ import org.eclipse.emf.cdo.CDOObject;
import org.eclipse.emf.cdo.common.CDOCommonRepository;
import org.eclipse.emf.cdo.common.CDOCommonSession.Options.PassiveUpdateMode;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchHandler;
import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.branch.CDOBranchVersion;
import org.eclipse.emf.cdo.common.commit.CDOCommitData;
@@ -41,7 +42,7 @@ import org.eclipse.emf.cdo.session.CDOSession;
import org.eclipse.emf.cdo.session.CDOSessionInvalidationEvent;
import org.eclipse.emf.cdo.session.remote.CDORemoteSession;
import org.eclipse.emf.cdo.session.remote.CDORemoteSessionMessage;
-import org.eclipse.emf.cdo.spi.common.CDOCloningContext;
+import org.eclipse.emf.cdo.spi.common.CDOReplicationContext;
import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranch;
import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageRegistry;
import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageUnit;
@@ -812,11 +813,6 @@ public abstract class CDOSessionImpl extends Container<CDOView> implements Inter
setLastUpdateTime(commitInfo.getTimeStamp());
}
- public void cloneRepository(CDOCloningContext context)
- {
- getSessionProtocol().cloneRepository(context);
- }
-
public Object getInvalidationLock()
{
return invalidationLock;
@@ -1622,6 +1618,22 @@ public abstract class CDOSessionImpl extends Container<CDOView> implements Inter
}
}
+ public int loadBranches(int startID, int endID, CDOBranchHandler branchHandler)
+ {
+ int attempt = 0;
+ for (;;)
+ {
+ try
+ {
+ return delegate.loadBranches(startID, endID, branchHandler);
+ }
+ catch (Exception ex)
+ {
+ handleException(++attempt, ex);
+ }
+ }
+ }
+
public void loadCommitInfos(CDOBranch branch, long startTime, long endTime, CDOCommitInfoHandler handler)
{
int attempt = 0;
@@ -1857,14 +1869,14 @@ public abstract class CDOSessionImpl extends Container<CDOView> implements Inter
}
}
- public void cloneRepository(CDOCloningContext context)
+ public void syncRepository(CDOReplicationContext context)
{
int attempt = 0;
for (;;)
{
try
{
- delegate.cloneRepository(context);
+ delegate.syncRepository(context);
return;
}
catch (Exception ex)
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java
index 23b3e2938e..7a47b7677f 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java
@@ -22,6 +22,7 @@ import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.branch.CDOBranchVersion;
import org.eclipse.emf.cdo.common.commit.CDOCommitData;
import org.eclipse.emf.cdo.common.commit.CDOCommitInfo;
+import org.eclipse.emf.cdo.common.commit.CDOCommitInfoManager;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDAndVersion;
import org.eclipse.emf.cdo.common.id.CDOIDProvider;
@@ -1332,6 +1333,12 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
}
@Override
+ protected CDOCommitInfoManager getCommitInfoManager()
+ {
+ return getSession().getCommitInfoManager();
+ }
+
+ @Override
protected CDORevisionFactory getRevisionFactory()
{
return getSession().getRevisionManager().getFactory();
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/CDOSessionProtocol.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/CDOSessionProtocol.java
index c9aee0389d..e0174cb23e 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/CDOSessionProtocol.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/CDOSessionProtocol.java
@@ -26,7 +26,7 @@ import org.eclipse.emf.cdo.common.revision.CDORevisionKey;
import org.eclipse.emf.cdo.common.util.CDOCommonUtil;
import org.eclipse.emf.cdo.session.remote.CDORemoteSession;
import org.eclipse.emf.cdo.session.remote.CDORemoteSessionMessage;
-import org.eclipse.emf.cdo.spi.common.CDOCloningContext;
+import org.eclipse.emf.cdo.spi.common.CDOReplicationContext;
import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager.BranchLoader;
import org.eclipse.emf.cdo.spi.common.commit.InternalCDOCommitInfoManager.CommitInfoLoader;
import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageUnit;
@@ -175,7 +175,7 @@ public interface CDOSessionProtocol extends CDOProtocol, PackageLoader, BranchLo
/**
* @since 3.0
*/
- public void cloneRepository(CDOCloningContext context);
+ public void syncRepository(CDOReplicationContext context);
/**
* @author Eike Stepper
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOSession.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOSession.java
index cf710866c5..6aef98c010 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOSession.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOSession.java
@@ -17,7 +17,6 @@ import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.session.CDORepositoryInfo;
import org.eclipse.emf.cdo.session.CDOSession;
-import org.eclipse.emf.cdo.spi.common.CDOCloningContext;
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;
@@ -143,9 +142,4 @@ public interface InternalCDOSession extends CDOSession, PackageProcessor, Packag
*/
public void processRefreshSessionResult(RefreshSessionResult result, CDOBranch branch,
List<InternalCDOView> branchViews, Map<CDOBranch, Map<CDOID, InternalCDORevision>> viewedRevisions);
-
- /**
- * @since 3.0
- */
- public void cloneRepository(CDOCloningContext context);
}
diff --git a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/concurrent/QueueWorker.java b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/concurrent/QueueWorker.java
index d00e4ce90e..39667f43a6 100644
--- a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/concurrent/QueueWorker.java
+++ b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/concurrent/QueueWorker.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:
* Eike Stepper - initial API and implementation
*/
@@ -39,6 +39,14 @@ public abstract class QueueWorker<E> extends Worker
this.pollMillis = pollMillis;
}
+ /**
+ * @since 3.0
+ */
+ public void clearQueue()
+ {
+ queue.clear();
+ }
+
public boolean addWork(E element)
{
if (queue != null)

Back to the top