Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/protocol/CDOProtocolConstants.java28
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/CDOCloningContext.java20
-rw-r--r--plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java6
-rw-r--r--plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CloneRepositoryRequest.java70
-rw-r--r--plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CDOServerProtocol.java3
-rw-r--r--plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CloneRepositoryIndication.java102
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java5
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/embedded/EmbeddedClientSessionProtocol.java6
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/offline/MasterInterface.java26
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/InternalRepository.java3
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/SessionTest.java2
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/session/CDOSession.java2
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java25
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/CDOSessionProtocol.java6
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOSession.java6
15 files changed, 287 insertions, 23 deletions
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 a1378c4397..940cce5aa7 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
@@ -121,6 +121,11 @@ public interface CDOProtocolConstants
*/
public static final short SIGNAL_BRANCH_NOTIFICATION = 33;
+ /**
+ * @since 3.0
+ */
+ public static final short SIGNAL_CLONE_REPOSITORY = 34;
+
// //////////////////////////////////////////////////////////////////////
// Session Management
@@ -159,4 +164,27 @@ public interface CDOProtocolConstants
* @since 3.0
*/
public static final byte REMOTE_SESSION_CUSTOM_DATA = 5;
+
+ // //////////////////////////////////////////////////////////////////////
+ // Cloning
+
+ /**
+ * @since 3.0
+ */
+ public static final byte CLONING_FINISHED = 0;
+
+ /**
+ * @since 3.0
+ */
+ public static final byte CLONING_PACKAGE = 1;
+
+ /**
+ * @since 3.0
+ */
+ public static final byte CLONING_BRANCH = 2;
+
+ /**
+ * @since 3.0
+ */
+ public static final byte CLONING_REVISION = 3;
}
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
new file mode 100644
index 0000000000..952028f720
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/CDOCloningContext.java
@@ -0,0 +1,20 @@
+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 void addPackageUnit(String id);
+
+ public void addBranch(int id);
+
+ public void addRevision(InternalCDORevision revision);
+} \ No newline at end of file
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 9d911d5adb..1f398455d1 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
@@ -23,6 +23,7 @@ import org.eclipse.emf.cdo.internal.net4j.messages.Messages;
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.model.InternalCDOPackageUnit;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
import org.eclipse.emf.cdo.spi.common.revision.RevisionInfo;
@@ -262,6 +263,11 @@ public class CDOClientProtocol extends SignalProtocol<CDOSession> implements CDO
return send(new UnsubscribeRemoteSessionsRequest(this));
}
+ public void cloneRepository(CDOCloningContext context)
+ {
+ send(new CloneRepositoryRequest(this, context));
+ }
+
@Override
protected SignalReactor createSignalReactor(short signalID)
{
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/CloneRepositoryRequest.java
new file mode 100644
index 0000000000..dc85c8223b
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CloneRepositoryRequest.java
@@ -0,0 +1,70 @@
+/***************************************************************************
+ * 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.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 java.io.IOException;
+
+/**
+ * @author Eike Stepper
+ */
+public class CloneRepositoryRequest extends CDOClientRequest<Boolean>
+{
+ private CDOCloningContext context;
+
+ public CloneRepositoryRequest(CDOClientProtocol protocol, CDOCloningContext context)
+ {
+ super(protocol, CDOProtocolConstants.SIGNAL_OPEN_VIEW);
+ this.context = context;
+ }
+
+ @Override
+ protected void requesting(CDODataOutput out) throws IOException
+ {
+ out.writeLong(context.getStartTime());
+ out.writeLong(context.getEndTime());
+ }
+
+ @Override
+ protected Boolean confirming(CDODataInput in) throws IOException
+ {
+ for (;;)
+ {
+ byte opcode = in.readByte();
+ switch (opcode)
+ {
+ case CDOProtocolConstants.CLONING_FINISHED:
+ return true;
+
+ case CDOProtocolConstants.CLONING_PACKAGE:
+ context.addPackageUnit(in.readCDOPackageURI());
+ break;
+
+ case CDOProtocolConstants.CLONING_BRANCH:
+ context.addBranch(in.readInt());
+ break;
+
+ case CDOProtocolConstants.CLONING_REVISION:
+ context.addRevision((InternalCDORevision)in.readCDORevision());
+ break;
+
+ default:
+ throw new IOException("Invalid cloning opcode: " + opcode);
+ }
+ }
+ }
+}
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 e9462c6fe9..cbf42f10ab 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
@@ -256,6 +256,9 @@ public class CDOServerProtocol extends SignalProtocol<InternalSession> implement
case CDOProtocolConstants.SIGNAL_REMOTE_MESSAGE:
return new RemoteMessageIndication(this);
+ case CDOProtocolConstants.SIGNAL_CLONE_REPOSITORY:
+ return new CloneRepositoryIndication(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
new file mode 100644
index 0000000000..523780c9a7
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CloneRepositoryIndication.java
@@ -0,0 +1,102 @@
+/**
+ * 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;
+
+ public CloneRepositoryIndication(CDOServerProtocol protocol)
+ {
+ super(protocol, CDOProtocolConstants.SIGNAL_CLONE_REPOSITORY);
+ }
+
+ @Override
+ protected void indicating(CDODataInput in) throws IOException
+ {
+ startTime = in.readLong();
+ endTime = in.readLong();
+ }
+
+ @Override
+ protected void responding(final CDODataOutput out) throws IOException
+ {
+ getRepository().clone(new CDOCloningContext()
+ {
+ public long getStartTime()
+ {
+ return startTime;
+ }
+
+ public long getEndTime()
+ {
+ return endTime;
+ }
+
+ 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/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 0a52d1687f..968f1c502c 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
@@ -39,6 +39,7 @@ import org.eclipse.emf.cdo.server.InternalNotificationManager;
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.branch.CDOBranchUtil;
import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager;
import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageInfo;
@@ -838,6 +839,10 @@ public class Repository extends Container<Object> implements InternalRepository
}
}
+ public void clone(CDOCloningContext context)
+ {
+ }
+
@Override
public String toString()
{
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 ee00746a71..d400e89b78 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
@@ -25,6 +25,7 @@ import org.eclipse.emf.cdo.eresource.CDOResource;
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.model.InternalCDOPackageUnit;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionDelta;
@@ -396,6 +397,11 @@ public class EmbeddedClientSessionProtocol extends Lifecycle implements CDOSessi
throw new UnsupportedOperationException();
}
+ public void cloneRepository(CDOCloningContext context)
+ {
+ throw new UnsupportedOperationException();
+ }
+
@Override
protected void doActivate() throws Exception
{
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/offline/MasterInterface.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/offline/MasterInterface.java
index b7eb068ebe..8e3a6dd122 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/offline/MasterInterface.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/offline/MasterInterface.java
@@ -25,6 +25,8 @@ import org.eclipse.net4j.util.lifecycle.ILifecycle;
import org.eclipse.net4j.util.lifecycle.LifecycleEventAdapter;
import org.eclipse.net4j.util.om.trace.ContextTracer;
+import org.eclipse.emf.spi.cdo.InternalCDOSession;
+
/**
* @author Eike Stepper
* @since 3.0
@@ -41,7 +43,7 @@ public class MasterInterface extends QueueRunner
private CDOSessionConfiguration sessionConfiguration;
- private CDOSession session;
+ private InternalCDOSession session;
private IListener deactivationListener = new LifecycleEventAdapter()
{
@@ -62,21 +64,11 @@ public class MasterInterface extends QueueRunner
{
if (event instanceof CDOSessionInvalidationEvent)
{
- CDOSessionInvalidationEvent e = (CDOSessionInvalidationEvent)event;
- long timeStamp = e.getTimeStamp();
- if (TRACER.isEnabled())
- {
- TRACER.format("Invalidation from master: {0}", CDOCommonUtil.formatTimeStamp(timeStamp));
- }
-
- masterTimeStamp.setValue(timeStamp);
sync();
}
}
};
- private MutableLong masterTimeStamp = new MutableLong();
-
private MutableLong syncedTimeStamp = new MutableLong();
public MasterInterface()
@@ -111,7 +103,7 @@ public class MasterInterface extends QueueRunner
return State.OFFLINE;
}
- long masterTimeStamp = getMasterTimeStamp();
+ long masterTimeStamp = session.getLastUpdateTime();
long syncedTimeStamp = getSyncedTimeStamp();
if (masterTimeStamp > syncedTimeStamp)
{
@@ -126,11 +118,6 @@ public class MasterInterface extends QueueRunner
return session;
}
- public long getMasterTimeStamp()
- {
- return masterTimeStamp.getValue();
- }
-
public long getSyncedTimeStamp()
{
return syncedTimeStamp.getValue();
@@ -184,12 +171,11 @@ public class MasterInterface extends QueueRunner
TRACER.format("Connecting to master ({0})...", CDOCommonUtil.formatTimeStamp());
}
- session = sessionConfiguration.openSession();
+ session = (InternalCDOSession)sessionConfiguration.openSession();
OM.LOG.info("Connected to master.");
session.addListener(deactivationListener);
- masterTimeStamp.setValue(0);
syncedTimeStamp.setValue(NEVER_SYNCHRONIZED);
session.addListener(invalidationListener);
@@ -216,7 +202,7 @@ public class MasterInterface extends QueueRunner
public void run()
{
checkActive();
- long masterTimeStamp = getMasterTimeStamp();
+ long masterTimeStamp = session.getLastUpdateTime();
long syncedTimeStamp = getSyncedTimeStamp();
if (masterTimeStamp > syncedTimeStamp)
{
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 2e08858b98..9adbc8cf84 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
@@ -17,6 +17,7 @@ import org.eclipse.emf.cdo.server.IStoreAccessor;
import org.eclipse.emf.cdo.server.ITransaction;
import org.eclipse.emf.cdo.server.InternalNotificationManager;
import org.eclipse.emf.cdo.server.InternalStore;
+import org.eclipse.emf.cdo.spi.common.CDOCloningContext;
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.model.InternalCDOPackageRegistry;
@@ -82,4 +83,6 @@ public interface InternalRepository extends IRepository, PackageLoader, BranchLo
public void notifyWriteAccessHandlers(ITransaction transaction, IStoreAccessor.CommitContext commitContext,
OMMonitor monitor);
+
+ public void clone(CDOCloningContext context);
}
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/SessionTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/SessionTest.java
index 0fdbe47474..713ba98974 100644
--- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/SessionTest.java
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/SessionTest.java
@@ -78,7 +78,7 @@ public class SessionTest extends AbstractCDOTest
@Override
protected boolean successful()
{
- return commitTime == session.getLastCommitTime();
+ return commitTime == session.getLastUpdateTime();
}
}.assertNoTimeOut();
}
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/session/CDOSession.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/session/CDOSession.java
index 2f5a66e94c..635f3b21f7 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/session/CDOSession.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/session/CDOSession.java
@@ -208,7 +208,7 @@ public interface CDOSession extends CDOCommonSession, IContainer<CDOView>
*
* @since 3.0
*/
- public long getLastCommitTime();
+ public long getLastUpdateTime();
/**
* Blocks the calling thread until a commit operation with the given time stamp or higher has occured.
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 e2b7aea663..cc64f6911e 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
@@ -33,6 +33,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.branch.InternalCDOBranch;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionManager;
@@ -498,7 +499,7 @@ public abstract class CDOSessionImpl extends Container<CDOView> implements Inter
return Collections.emptyList();
}
- public long getLastCommitTime()
+ public long getLastUpdateTime()
{
synchronized (lastUpdateTimeLock)
{
@@ -724,6 +725,11 @@ public abstract class CDOSessionImpl extends Container<CDOView> implements Inter
}
}
+ public void cloneRepository(CDOCloningContext context)
+ {
+ getSessionProtocol().cloneRepository(context);
+ }
+
public Object getInvalidationLock()
{
return invalidationLock;
@@ -1591,6 +1597,23 @@ public abstract class CDOSessionImpl extends Container<CDOView> implements Inter
}
}
+ public void cloneRepository(CDOCloningContext context)
+ {
+ int attempt = 0;
+ for (;;)
+ {
+ try
+ {
+ delegate.cloneRepository(context);
+ return;
+ }
+ catch (Exception ex)
+ {
+ handleException(++attempt, ex);
+ }
+ }
+ }
+
@Override
protected void doActivate() throws Exception
{
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 59a183c41e..d69f6e3cac 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
@@ -21,6 +21,7 @@ import org.eclipse.emf.cdo.common.revision.CDOReferenceAdjuster;
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.branch.InternalCDOBranchManager.BranchLoader;
import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageUnit;
import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageRegistry.PackageLoader;
@@ -134,6 +135,11 @@ public interface CDOSessionProtocol extends CDOProtocol, PackageLoader, BranchLo
public boolean unsubscribeRemoteSessions();
/**
+ * @since 3.0
+ */
+ public void cloneRepository(CDOCloningContext context);
+
+ /**
* @author Eike Stepper
*/
public final class OpenSessionResult
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 bff859e79b..4f1b3aa9a5 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
@@ -18,6 +18,7 @@ import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta;
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.model.InternalCDOPackageRegistry;
@@ -135,4 +136,9 @@ public interface InternalCDOSession extends CDOSession, PackageProcessor, Packag
*/
public void reviseRevisions(CDOBranchPoint branchPoint, Set<CDOIDAndVersion> dirtyOIDandVersions,
Collection<CDOID> detachedOIDs, InternalCDOView excludedView);
+
+ /**
+ * @since 3.0
+ */
+ public void cloneRepository(CDOCloningContext context);
}

Back to the top