diff options
Diffstat (limited to 'plugins')
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) |