### Eclipse Workspace Patch 1.0
#P org.eclipse.emf.cdo.server
Index: src/org/eclipse/emf/cdo/server/IStore.java
===================================================================
RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/IStore.java,v
retrieving revision 1.19
diff -u -r1.19 IStore.java
--- src/org/eclipse/emf/cdo/server/IStore.java 6 Jan 2008 12:02:39 -0000 1.19
+++ src/org/eclipse/emf/cdo/server/IStore.java 19 Jan 2008 14:41:45 -0000
@@ -20,36 +20,36 @@
public String getStoreType();
/**
- * Returns if this store supports the writing of modified revisions in terms of deltas.
+ * Returns if this store supports the writing of modified newRevisions in terms of deltas.
*
* The contract includes that store implementations with write delta support must also implement
* {@link IStoreWriter#writeRevisionDelta(org.eclipse.emf.cdo.internal.protocol.revision.delta.CDORevisionDeltaImpl) IStoreWriter.writeRevisionDelta(CDORevisionDeltaImpl)}
* to not throw an UnsupportedOperationException
.
*
- * @return true
if this store supports the writing of modified revisions in terms of deltas,
+ * @return true
if this store supports the writing of modified newRevisions in terms of deltas,
* false
otherwise.
*/
public boolean hasWriteDeltaSupport();
/**
- * Returns if this store supports the retrieval of historical revisions.
+ * Returns if this store supports the retrieval of historical newRevisions.
*
* The contract includes that store implementations with auditing support must also implement
* {@link IStoreReader#readRevisionByTime(org.eclipse.emf.cdo.protocol.CDOID, int, long) IStoreReader.readRevisionByTime(CDOID, int, long)}
* to not throw an UnsupportedOperationException
.
*
- * @return true
if this store supports the retrieval of historical revisions, false
+ * @return true
if this store supports the retrieval of historical newRevisions, false
* otherwise.
*/
public boolean hasAuditingSupport();
/**
- * Returns if this store supports the storage of concurrent revisions in separate branches.
+ * Returns if this store supports the storage of concurrent newRevisions in separate branches.
*
* Note: This is reserved for future use by the framework. There is currently no support for branching in the
* framework!
*
- * @return true
if this store supports the storage of concurrent revisions in separate branches,
+ * @return true
if this store supports the storage of concurrent newRevisions in separate branches,
* false
otherwise.
*/
public boolean hasBranchingSupport();
Index: src/org/eclipse/emf/cdo/server/CDOServerUtil.java
===================================================================
RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/CDOServerUtil.java,v
retrieving revision 1.8
diff -u -r1.8 CDOServerUtil.java
--- src/org/eclipse/emf/cdo/server/CDOServerUtil.java 28 Dec 2007 12:57:16 -0000 1.8
+++ src/org/eclipse/emf/cdo/server/CDOServerUtil.java 19 Jan 2008 14:41:45 -0000
@@ -52,6 +52,11 @@
container.putElement(RepositoryFactory.PRODUCT_GROUP, RepositoryFactory.TYPE, repository.getName(), repository);
}
+ public static IRepository getRepository(IManagedContainer container, String name)
+ {
+ return RepositoryFactory.get(container, name);
+ }
+
public static Element getRepositoryConfig(String repositoryName) throws ParserConfigurationException, SAXException,
IOException
{
Index: src/org/eclipse/emf/cdo/server/IRepository.java
===================================================================
RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/IRepository.java,v
retrieving revision 1.14
diff -u -r1.14 IRepository.java
--- src/org/eclipse/emf/cdo/server/IRepository.java 6 Jan 2008 12:02:39 -0000 1.14
+++ src/org/eclipse/emf/cdo/server/IRepository.java 19 Jan 2008 14:41:45 -0000
@@ -19,6 +19,18 @@
*/
public interface IRepository extends IContainer
{
+ public static final String PROP_OVERRIDE_UUID = "overrideUUID";
+
+ public static final String PROP_SUPPORTING_REVISION_DELTAS = "supportingRevisionDeltas";
+
+ public static final String PROP_SUPPORTING_AUDITS = "supportingAudits";
+
+ public static final String PROP_VERIFYING_REVISIONS = "verifyingRevisions";
+
+ public static final String PROP_CURRENT_LRU_CAPACITY = "currentLRUCapacity";
+
+ public static final String PROP_REVISED_LRU_CAPACITY = "revisedLRUCapacity";
+
public String getName();
public void setName(String name);
Index: src/org/eclipse/emf/cdo/internal/server/RevisionManager.java
===================================================================
RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/RevisionManager.java,v
retrieving revision 1.31
diff -u -r1.31 RevisionManager.java
--- src/org/eclipse/emf/cdo/internal/server/RevisionManager.java 19 Jan 2008 09:56:49 -0000 1.31
+++ src/org/eclipse/emf/cdo/internal/server/RevisionManager.java 19 Jan 2008 14:41:44 -0000
@@ -21,9 +21,9 @@
import org.eclipse.emf.cdo.internal.protocol.revision.delta.CDORevisionDeltaImpl;
import org.eclipse.emf.cdo.protocol.CDOID;
import org.eclipse.emf.cdo.protocol.model.CDOFeature;
-import org.eclipse.emf.cdo.protocol.revision.CDODuplicateRevisionException;
import org.eclipse.emf.cdo.protocol.revision.CDOReferenceProxy;
import org.eclipse.emf.cdo.protocol.revision.CDORevision;
+import org.eclipse.emf.cdo.server.IRepository;
import org.eclipse.emf.cdo.server.IRevisionManager;
import org.eclipse.emf.cdo.server.IStoreChunkReader;
import org.eclipse.emf.cdo.server.IStoreReader;
@@ -42,10 +42,6 @@
*/
public class RevisionManager extends CDORevisionResolverImpl implements IRevisionManager
{
- public static final String PROP_CURRENT_LRU_CAPACITY = "currentLRUCapacity";
-
- public static final String PROP_REVISED_LRU_CAPACITY = "revisedLRUCapacity";
-
private Repository repository;
private CDOPathFeatureImpl cdoPathFeature;
@@ -257,8 +253,8 @@
protected void doBeforeActivate() throws Exception
{
super.doBeforeActivate();
- setCurrentLRUCapacity(getLRUCapacity(PROP_CURRENT_LRU_CAPACITY));
- setRevisedLRUCapacity(getLRUCapacity(PROP_REVISED_LRU_CAPACITY));
+ setCurrentLRUCapacity(getLRUCapacity(IRepository.PROP_CURRENT_LRU_CAPACITY));
+ setRevisedLRUCapacity(getLRUCapacity(IRepository.PROP_REVISED_LRU_CAPACITY));
}
protected int getLRUCapacity(String prop)
@@ -327,7 +323,7 @@
.getOriginVersion(), true);
if (oldRevision == null)
{
- throw new IllegalArgumentException("Cannot retrieve origin revision");
+ throw new IllegalStateException("Can not retrieve origin revision");
}
dirtyRevision = new CDORevisionImpl(oldRevision);
@@ -337,13 +333,11 @@
storeWriter.writeRevision(dirtyRevision);
}
- // Look if we already have it in our cache revision
- CDORevisionImpl currentVersion = getRevisionByVersion(revisionDelta.getID(), 0, revisionDelta.getDirtyVersion(),
- false);
-
- if (currentVersion != null)
+ // Look if we already have it in our cache
+ CDORevisionImpl revision = getRevisionByVersion(revisionDelta.getID(), 0, revisionDelta.getDirtyVersion(), false);
+ if (revision != null)
{
- throw new CDODuplicateRevisionException(currentVersion);
+ throw new IllegalStateException("Concurrent modification of revision " + revision);
}
}
Index: src/org/eclipse/emf/cdo/internal/server/MEMStoreAccessor.java
===================================================================
RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/MEMStoreAccessor.java,v
retrieving revision 1.6
diff -u -r1.6 MEMStoreAccessor.java
--- src/org/eclipse/emf/cdo/internal/server/MEMStoreAccessor.java 19 Jan 2008 09:56:49 -0000 1.6
+++ src/org/eclipse/emf/cdo/internal/server/MEMStoreAccessor.java 19 Jan 2008 14:41:44 -0000
@@ -18,7 +18,6 @@
import org.eclipse.emf.cdo.protocol.model.CDOClassRef;
import org.eclipse.emf.cdo.protocol.model.CDOFeature;
import org.eclipse.emf.cdo.protocol.model.CDOPackageInfo;
-import org.eclipse.emf.cdo.protocol.revision.CDODuplicateRevisionException;
import org.eclipse.emf.cdo.protocol.revision.CDORevision;
import org.eclipse.emf.cdo.server.ISession;
import org.eclipse.emf.cdo.server.IStoreChunkReader;
@@ -39,7 +38,7 @@
*/
public class MEMStoreAccessor extends StoreAccessor implements IStoreReader, IStoreWriter
{
- List listToCommit = new ArrayList();
+ List newRevisions = new ArrayList();
public MEMStoreAccessor(MEMStore store, ISession session)
{
@@ -85,7 +84,7 @@
public CDORevision readRevision(CDOID id, int referenceChunk)
{
CDORevisionImpl revStore = (CDORevisionImpl)getStore().getRevision(id);
- CDORevisionImpl newRevision = new CDORevisionImpl(this.getStore().getRepository().getRevisionManager(), revStore
+ CDORevisionImpl newRevision = new CDORevisionImpl(getStore().getRepository().getRevisionManager(), revStore
.getCDOClass(), revStore.getID());
newRevision.setResourceID(revStore.getResourceID());
@@ -130,31 +129,30 @@
public void writeRevision(CDORevisionImpl revision)
{
getStore().addRevision(revision);
+ newRevisions.add(revision);
}
@Override
public void writeRevisionDelta(CDORevisionDeltaImpl delta)
{
- CDORevisionImpl revision2 = (CDORevisionImpl)getStore().getRevision(delta.getID());
- if (delta.getOriginVersion() != revision2.getVersion())
- {
- throw new CDODuplicateRevisionException(revision2);
- }
-
- CDORevisionImpl newRevision = new CDORevisionImpl(revision2);
+ CDORevisionImpl revision = (CDORevisionImpl)getStore().getRevision(delta.getID());
+ CDORevisionImpl newRevision = new CDORevisionImpl(revision);
delta.apply(newRevision);
- listToCommit.add(newRevision);
+ getStore().addRevision(newRevision);
+ newRevisions.add(newRevision);
}
@Override
public void release()
{
- for (CDORevisionImpl rev : listToCommit)
- getStore().addRevision(rev);
+ newRevisions.clear();
}
public void rollback(IView view, ITransaction storeTransaction)
{
- listToCommit.clear();
+ for (CDORevision revision : newRevisions)
+ {
+ getStore().removeRevision(revision);
+ }
}
}
Index: src/org/eclipse/emf/cdo/internal/server/Store.java
===================================================================
RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Store.java,v
retrieving revision 1.10
diff -u -r1.10 Store.java
--- src/org/eclipse/emf/cdo/internal/server/Store.java 28 Dec 2007 12:57:16 -0000 1.10
+++ src/org/eclipse/emf/cdo/internal/server/Store.java 19 Jan 2008 14:41:44 -0000
@@ -77,4 +77,14 @@
{
return false;
}
+
+ public boolean hasAuditingSupport()
+ {
+ return false;
+ }
+
+ public boolean hasBranchingSupport()
+ {
+ return false;
+ }
}
Index: src/org/eclipse/emf/cdo/internal/server/NOOPStore.java
===================================================================
RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/NOOPStore.java,v
retrieving revision 1.4
diff -u -r1.4 NOOPStore.java
--- src/org/eclipse/emf/cdo/internal/server/NOOPStore.java 6 Jan 2008 12:02:39 -0000 1.4
+++ src/org/eclipse/emf/cdo/internal/server/NOOPStore.java 19 Jan 2008 14:41:44 -0000
@@ -25,16 +25,12 @@
super(TYPE);
}
+ @Override
public boolean hasAuditingSupport()
{
return true;
}
- public boolean hasBranchingSupport()
- {
- return false;
- }
-
public void repairAfterCrash()
{
}
Index: src/org/eclipse/emf/cdo/internal/server/Repository.java
===================================================================
RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java,v
retrieving revision 1.40
diff -u -r1.40 Repository.java
--- src/org/eclipse/emf/cdo/internal/server/Repository.java 6 Jan 2008 12:02:39 -0000 1.40
+++ src/org/eclipse/emf/cdo/internal/server/Repository.java 19 Jan 2008 14:41:44 -0000
@@ -31,18 +31,6 @@
*/
public class Repository extends Container implements IRepository
{
- public static final String PROP_OVERRIDE_UUID = "overrideUUID";
-
- public static final String PROP_SUPPORTING_REVISION_DELTAS = "supportingRevisionDeltas";
-
- public static final String PROP_SUPPORTING_AUDITS = "supportingAudits";
-
- public static final String PROP_VERIFYING_REVISIONS = "verifyingRevisions";
-
- public static final String PROP_CURRENT_LRU_CAPACITY = "currentLRUCapacity";
-
- public static final String PROP_REVISED_LRU_CAPACITY = "revisedLRUCapacity";
-
private static final long INITIAL_META_ID_VALUE = 1;
private String name;
@@ -99,7 +87,7 @@
{
if (uuid == null)
{
- String value = getProperties().get(PROP_OVERRIDE_UUID);
+ String value = getProperties().get(IRepository.PROP_OVERRIDE_UUID);
uuid = StringUtil.isEmpty(value) ? UUID.randomUUID().toString() : value;
}
@@ -125,7 +113,7 @@
{
if (supportingRevisionDeltas == null)
{
- String value = getProperties().get(PROP_SUPPORTING_REVISION_DELTAS);
+ String value = getProperties().get(IRepository.PROP_SUPPORTING_REVISION_DELTAS);
supportingRevisionDeltas = value == null ? false : Boolean.valueOf(value);
}
@@ -136,7 +124,7 @@
{
if (supportingAudits == null)
{
- String value = getProperties().get(PROP_SUPPORTING_AUDITS);
+ String value = getProperties().get(IRepository.PROP_SUPPORTING_AUDITS);
supportingAudits = value == null ? false : Boolean.valueOf(value);
}
@@ -147,7 +135,7 @@
{
if (verifyingRevisions == null)
{
- String value = getProperties().get(PROP_VERIFYING_REVISIONS);
+ String value = getProperties().get(IRepository.PROP_VERIFYING_REVISIONS);
verifyingRevisions = value == null ? false : Boolean.valueOf(value);
}
Index: src/org/eclipse/emf/cdo/internal/server/MEMStore.java
===================================================================
RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/MEMStore.java,v
retrieving revision 1.5
diff -u -r1.5 MEMStore.java
--- src/org/eclipse/emf/cdo/internal/server/MEMStore.java 18 Jan 2008 11:10:25 -0000 1.5
+++ src/org/eclipse/emf/cdo/internal/server/MEMStore.java 19 Jan 2008 14:41:44 -0000
@@ -17,9 +17,13 @@
import org.eclipse.emf.cdo.server.IView;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
/**
* @author Simon McDuff
@@ -28,70 +32,121 @@
{
public static final String TYPE = "mem";
- private Map> mapOfRevisions = new HashMap>();
+ private Map> revisions = new HashMap>()
+ {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public String toString()
+ {
+ List>> entries = new ArrayList>>(entrySet());
+ Collections.sort(entries, new Comparator>>()
+ {
+ public int compare(Entry> o1, Entry> o2)
+ {
+ return o1.getKey().compareTo(o2.getKey());
+ }
+ });
+
+ StringBuilder builder = new StringBuilder();
+ for (Entry> entry : entries)
+ {
+ builder.append(entry.getKey());
+ builder.append(" -->");
+ List list = entry.getValue();
+ for (CDORevision revision : list)
+ {
+ builder.append(" ");
+ builder.append(revision);
+ }
+
+ builder.append("\n");
+ }
+
+ return builder.toString();
+ }
+ };
public MEMStore()
{
super(TYPE);
}
- public synchronized CDORevision getRevision(CDOID rev)
+ public synchronized CDORevision getRevision(CDOID id)
{
- List list = getList(rev);
- if (list.size() == 0)
+ List list = revisions.get(id);
+ if (list != null)
{
- return null;
+ return list.get(list.size() - 1);
}
- return list.get(list.size() - 1);
+ return null;
}
- public synchronized List getList(CDOID rev)
+ public synchronized CDORevision getRevisionByVersion(CDOID id, int version)
{
- List list = mapOfRevisions.get(rev);
- if (list == null)
+ List list = revisions.get(id);
+ if (list != null)
{
- list = new ArrayList();
- mapOfRevisions.put(rev, list);
+ return getRevisionByVersion(list, version);
}
- return list;
+ return null;
}
- public synchronized CDORevision getRevision(CDOID rev, int version)
+ public synchronized void addRevision(CDORevision revision)
{
- List list = getList(rev);
- for (CDORevision revision : list)
+ CDOID id = revision.getID();
+ List list = revisions.get(id);
+ if (list == null)
{
- if (revision.getVersion() == version) return revision;
+ list = new ArrayList();
+ revisions.put(id, list);
}
- return null;
+
+ CDORevision rev = getRevisionByVersion(list, revision.getVersion());
+ if (rev != null)
+ {
+ throw new IllegalStateException("Concurrent modification of revision " + rev);
+ }
+
+ list.add(revision);
}
- public synchronized void addRevision(CDORevision revision)
+ public synchronized boolean removeRevision(CDORevision revision)
{
- CDORevision rev = getRevision(revision.getID(), revision.getVersion());
- if (rev == null)
+ CDOID id = revision.getID();
+ List list = revisions.get(id);
+ if (list == null)
+ {
+ return false;
+ }
+
+ for (Iterator it = list.iterator(); it.hasNext();)
{
- getList(revision.getID()).add(revision);
+ CDORevision rev = it.next();
+ if (rev.getVersion() == revision.getVersion())
+ {
+ it.remove();
+ return true;
+ }
}
+
+ return false;
}
+ @Override
public boolean hasWriteDeltaSupport()
{
return true;
}
+ @Override
public boolean hasAuditingSupport()
{
return true;
}
- public boolean hasBranchingSupport()
- {
- return false;
- }
-
public void repairAfterCrash()
{
}
@@ -105,4 +160,17 @@
{
return new MEMStoreAccessor(this, view);
}
+
+ private CDORevision getRevisionByVersion(List list, int version)
+ {
+ for (CDORevision revision : list)
+ {
+ if (revision.getVersion() == version)
+ {
+ return revision;
+ }
+ }
+
+ return null;
+ }
}
Index: src/org/eclipse/emf/cdo/internal/server/MEMStoreChunkReader.java
===================================================================
RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/MEMStoreChunkReader.java,v
retrieving revision 1.3
diff -u -r1.3 MEMStoreChunkReader.java
--- src/org/eclipse/emf/cdo/internal/server/MEMStoreChunkReader.java 6 Jan 2008 18:03:50 -0000 1.3
+++ src/org/eclipse/emf/cdo/internal/server/MEMStoreChunkReader.java 19 Jan 2008 14:41:44 -0000
@@ -32,20 +32,19 @@
public List executeRead()
{
MEMStore store = getStoreReader().getStore();
- for (Chunk chunk : getChunks())
+ List chunks = getChunks();
+ for (Chunk chunk : chunks)
{
int startIndex = chunk.getStartIndex();
- int size = chunk.size();
- CDORevisionImpl revisionMEM = (CDORevisionImpl)store.getRevision(getRevision().getID());
-
- for (int i = 0; i < size; i++)
+ CDORevisionImpl revision = (CDORevisionImpl)store.getRevision(getRevision().getID());
+ for (int i = 0; i < chunk.size(); i++)
{
- Object object = revisionMEM.get(getFeature(), startIndex + i);
+ Object object = revision.get(getFeature(), startIndex + i);
chunk.addID(i, (CDOID)object);
}
}
- return this.getChunks();
+ return chunks;
}
@Override
Index: src/org/eclipse/emf/cdo/internal/server/protocol/LoadRevisionIndication.java
===================================================================
RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/LoadRevisionIndication.java,v
retrieving revision 1.18
diff -u -r1.18 LoadRevisionIndication.java
--- src/org/eclipse/emf/cdo/internal/server/protocol/LoadRevisionIndication.java 28 Dec 2007 12:57:16 -0000 1.18
+++ src/org/eclipse/emf/cdo/internal/server/protocol/LoadRevisionIndication.java 19 Jan 2008 14:41:45 -0000
@@ -119,7 +119,7 @@
Set revisions = new HashSet();
if (PROTOCOL.isEnabled())
{
- PROTOCOL.format("Writing {0} revisions", ids.length);
+ PROTOCOL.format("Writing {0} newRevisions", ids.length);
}
for (CDOID id : ids)
@@ -153,7 +153,7 @@
int additionalSize = additionalRevisions.size();
if (PROTOCOL.isEnabled())
{
- PROTOCOL.format("Writing {0} additional revisions", additionalSize);
+ PROTOCOL.format("Writing {0} additional newRevisions", additionalSize);
}
out.writeInt(additionalSize);
#P org.eclipse.emf.cdo
Index: src/org/eclipse/emf/cdo/CDOTransactionHandler.java
===================================================================
RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOTransactionHandler.java,v
retrieving revision 1.3
diff -u -r1.3 CDOTransactionHandler.java
--- src/org/eclipse/emf/cdo/CDOTransactionHandler.java 28 Dec 2007 12:56:45 -0000 1.3
+++ src/org/eclipse/emf/cdo/CDOTransactionHandler.java 19 Jan 2008 14:41:46 -0000
@@ -14,6 +14,8 @@
import org.eclipse.emf.cdo.protocol.revision.delta.CDOFeatureDelta;
/**
+ * TODO Enhance API: Return exceptions instead of letting them be thrown
+ *
* @author Eike Stepper
*/
public interface CDOTransactionHandler
Index: src/org/eclipse/emf/internal/cdo/CDORevisionManagerImpl.java
===================================================================
RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDORevisionManagerImpl.java,v
retrieving revision 1.22
diff -u -r1.22 CDORevisionManagerImpl.java
--- src/org/eclipse/emf/internal/cdo/CDORevisionManagerImpl.java 17 Jan 2008 16:31:34 -0000 1.22
+++ src/org/eclipse/emf/internal/cdo/CDORevisionManagerImpl.java 19 Jan 2008 14:41:46 -0000
@@ -17,7 +17,6 @@
import org.eclipse.emf.cdo.internal.protocol.revision.CDORevisionImpl.MoveableList;
import org.eclipse.emf.cdo.protocol.CDOID;
import org.eclipse.emf.cdo.protocol.model.CDOFeature;
-import org.eclipse.emf.cdo.protocol.revision.CDODuplicateRevisionException;
import org.eclipse.emf.cdo.protocol.revision.CDOReferenceProxy;
import org.eclipse.emf.cdo.protocol.revision.CDORevision;
import org.eclipse.emf.cdo.protocol.util.TransportException;
@@ -29,7 +28,6 @@
import org.eclipse.emf.internal.cdo.protocol.LoadRevisionRequest;
import org.eclipse.net4j.channel.IChannel;
-import org.eclipse.net4j.internal.util.om.trace.ContextTracer;
import org.eclipse.net4j.internal.util.om.trace.PerfTracer;
import org.eclipse.net4j.signal.failover.IFailOverStrategy;
@@ -42,8 +40,6 @@
*/
public class CDORevisionManagerImpl extends CDORevisionResolverImpl implements CDORevisionManager
{
- private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG_REVISION, CDORevisionManagerImpl.class);
-
private static final PerfTracer LOADING = new PerfTracer(OM.PERF_REVISION_LOADING, CDORevisionManagerImpl.class);
private CDOSessionImpl session;
@@ -60,22 +56,6 @@
return session;
}
- @Override
- public void addRevision(CDORevisionImpl revision) throws CDODuplicateRevisionException
- {
- try
- {
- super.addRevision(revision);
- }
- catch (CDODuplicateRevisionException ignore)
- {
- if (TRACER.isEnabled())
- {
- TRACER.trace("Ignorable exception on client side", ignore);
- }
- }
- }
-
public CDOID resolveReferenceProxy(CDOReferenceProxy referenceProxy)
{
// Get proxy values
#P org.eclipse.emf.cdo.server.db
Index: src/org/eclipse/emf/cdo/server/internal/db/DBStore.java
===================================================================
RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStore.java,v
retrieving revision 1.39
diff -u -r1.39 DBStore.java
--- src/org/eclipse/emf/cdo/server/internal/db/DBStore.java 17 Jan 2008 16:14:30 -0000 1.39
+++ src/org/eclipse/emf/cdo/server/internal/db/DBStore.java 19 Jan 2008 14:41:48 -0000
@@ -100,11 +100,13 @@
return schema;
}
+ @Override
public boolean hasAuditingSupport()
{
return true;
}
+ @Override
public boolean hasBranchingSupport()
{
return false;
#P org.eclipse.net4j.tests
Index: src/org/eclipse/net4j/util/tests/AbstractOMTest.java
===================================================================
RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.net4j/tests/org.eclipse.net4j.tests/src/org/eclipse/net4j/util/tests/AbstractOMTest.java,v
retrieving revision 1.8
diff -u -r1.8 AbstractOMTest.java
--- src/org/eclipse/net4j/util/tests/AbstractOMTest.java 28 Dec 2007 13:04:32 -0000 1.8
+++ src/org/eclipse/net4j/util/tests/AbstractOMTest.java 19 Jan 2008 14:41:49 -0000
@@ -105,11 +105,10 @@
{
}
- protected static void msg(String m)
+ protected static void msg(Object m)
{
if (consoleEnabled)
{
- IOUtil.OUT().println();
IOUtil.OUT().println("--> " + m);
}
}
#P org.eclipse.emf.cdo.protocol
Index: src/org/eclipse/emf/cdo/internal/protocol/revision/CDORevisionResolverImpl.java
===================================================================
RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo.protocol/src/org/eclipse/emf/cdo/internal/protocol/revision/CDORevisionResolverImpl.java,v
retrieving revision 1.50
diff -u -r1.50 CDORevisionResolverImpl.java
--- src/org/eclipse/emf/cdo/internal/protocol/revision/CDORevisionResolverImpl.java 18 Jan 2008 12:29:14 -0000 1.50
+++ src/org/eclipse/emf/cdo/internal/protocol/revision/CDORevisionResolverImpl.java 19 Jan 2008 14:41:50 -0000
@@ -14,7 +14,6 @@
import org.eclipse.emf.cdo.internal.protocol.bundle.OM;
import org.eclipse.emf.cdo.protocol.CDOID;
import org.eclipse.emf.cdo.protocol.model.CDOClass;
-import org.eclipse.emf.cdo.protocol.revision.CDODuplicateRevisionException;
import org.eclipse.emf.cdo.protocol.revision.CDORevisionResolver;
import org.eclipse.net4j.internal.util.lifecycle.Lifecycle;
@@ -122,13 +121,13 @@
missingIDs.add(id);
}
}
-
+
if (!missingIDs.isEmpty())
{
List missingRevisions = loadRevisions(missingIDs, referenceChunk);
handleMissingRevisions(revisions, missingRevisions);
}
-
+
return revisions;
}
@@ -150,13 +149,13 @@
missingIDs.add(id);
}
}
-
+
if (!missingIDs.isEmpty())
{
List missingRevisions = loadRevisions(missingIDs, referenceChunk);
handleMissingRevisions(revisions, missingRevisions);
}
-
+
return revisions;
}
@@ -199,7 +198,7 @@
return null;
}
- public void addRevision(CDORevisionImpl revision) throws CDODuplicateRevisionException
+ public boolean addRevision(CDORevisionImpl revision)
{
if (TRACER.isEnabled())
{
@@ -208,7 +207,6 @@
}
RevisionHolder newHolder = createHolder(revision);
-
LRU list = revision.isCurrent() ? currentLRU : revisedLRU;
list.add((DLRevisionHolder)newHolder);
@@ -225,7 +223,7 @@
}
else if (holderVersion == version)
{
- throw new CDODuplicateRevisionException(revision);
+ return false;
}
else
{
@@ -234,6 +232,7 @@
}
adjustHolder(revision, newHolder, lastHolder, holder);
+ return true;
}
protected CDORevisionImpl getRevision(CDOID id, int referenceChunk, boolean loadOnDemand)
Index: src/org/eclipse/emf/cdo/internal/protocol/revision/CDORevisionImpl.java
===================================================================
RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo.protocol/src/org/eclipse/emf/cdo/internal/protocol/revision/CDORevisionImpl.java,v
retrieving revision 1.66
diff -u -r1.66 CDORevisionImpl.java
--- src/org/eclipse/emf/cdo/internal/protocol/revision/CDORevisionImpl.java 19 Jan 2008 09:29:51 -0000 1.66
+++ src/org/eclipse/emf/cdo/internal/protocol/revision/CDORevisionImpl.java 19 Jan 2008 14:41:50 -0000
@@ -18,8 +18,8 @@
import org.eclipse.emf.cdo.internal.protocol.model.CDOClassRefImpl;
import org.eclipse.emf.cdo.internal.protocol.model.CDOFeatureImpl;
import org.eclipse.emf.cdo.internal.protocol.model.CDOTypeImpl;
-import org.eclipse.emf.cdo.internal.protocol.revision.delta.CDORevisionMerger;
import org.eclipse.emf.cdo.internal.protocol.revision.delta.CDORevisionDeltaImpl;
+import org.eclipse.emf.cdo.internal.protocol.revision.delta.CDORevisionMerger;
import org.eclipse.emf.cdo.protocol.CDOID;
import org.eclipse.emf.cdo.protocol.model.CDOFeature;
import org.eclipse.emf.cdo.protocol.model.CDOPackageManager;
@@ -193,6 +193,10 @@
if (TRACER.isEnabled())
{
TRACER.format("Setting version: v{0} -> v{1}", this.version, version);
+ if (this.version == version)
+ {
+ System.out.println("XXX");
+ }
}
this.version = version;
Index: src/org/eclipse/emf/cdo/internal/protocol/revision/delta/CDORevisionDeltaImpl.java
===================================================================
RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo.protocol/src/org/eclipse/emf/cdo/internal/protocol/revision/delta/CDORevisionDeltaImpl.java,v
retrieving revision 1.9
diff -u -r1.9 CDORevisionDeltaImpl.java
--- src/org/eclipse/emf/cdo/internal/protocol/revision/delta/CDORevisionDeltaImpl.java 19 Jan 2008 09:56:48 -0000 1.9
+++ src/org/eclipse/emf/cdo/internal/protocol/revision/delta/CDORevisionDeltaImpl.java 19 Jan 2008 14:41:50 -0000
@@ -56,7 +56,7 @@
cdoClass = cdoRevision.getCDOClass();
cdoID = cdoRevision.getID();
dirtyVersion = cdoRevision.getVersion();
- originVersion = cdoRevision.getVersion() - 1;
+ originVersion = dirtyVersion - 1;
}
public CDORevisionDeltaImpl(CDORevision originRevision, CDORevision dirtyRevision)
@@ -68,14 +68,13 @@
cdoClass = originRevision.getCDOClass();
cdoID = originRevision.getID();
- dirtyVersion = originRevision.getVersion();
- originVersion = dirtyRevision.getVersion();
+ dirtyVersion = dirtyRevision.getVersion();
+ originVersion = originRevision.getVersion();
- this.compare(originRevision, dirtyRevision);
+ compare(originRevision, dirtyRevision);
- if (!this.compare(originRevision.getData().getContainerID(), dirtyRevision.getData().getContainerID())
- || !this.compare(originRevision.getData().getContainingFeatureID(), dirtyRevision.getData()
- .getContainingFeatureID()))
+ if (!compare(originRevision.getData().getContainerID(), dirtyRevision.getData().getContainerID())
+ || !compare(originRevision.getData().getContainingFeatureID(), dirtyRevision.getData().getContainingFeatureID()))
{
addFeatureDelta(new CDOContainerFeatureDeltaImpl(dirtyRevision.getData().getContainerID(), dirtyRevision
.getData().getContainingFeatureID()));
@@ -110,11 +109,10 @@
public void apply(CDORevisionImpl revision)
{
- revision.setVersion(dirtyVersion < 0 ? -dirtyVersion : dirtyVersion);
+ revision.setVersion(dirtyVersion);
for (CDOFeatureDelta featureDelta : featureDeltas.values())
{
- CDOFeatureDeltaImpl changeImpl = (CDOFeatureDeltaImpl)featureDelta;
- changeImpl.apply(revision);
+ ((CDOFeatureDeltaImpl)featureDelta).apply(revision);
}
}
@@ -138,10 +136,8 @@
CDOClassRefImpl classRef = (CDOClassRefImpl)cdoClass.createClassRef();
classRef.write(out, null);
CDOIDImpl.write(out, cdoID);
-
out.writeInt(originVersion);
out.writeInt(dirtyVersion);
-
out.writeInt(featureDeltas.size());
for (CDOFeatureDelta featureDelta : featureDeltas.values())
{
Index: src/org/eclipse/emf/cdo/protocol/revision/CDODuplicateRevisionException.java
===================================================================
RCS file: src/org/eclipse/emf/cdo/protocol/revision/CDODuplicateRevisionException.java
diff -N src/org/eclipse/emf/cdo/protocol/revision/CDODuplicateRevisionException.java
--- src/org/eclipse/emf/cdo/protocol/revision/CDODuplicateRevisionException.java 28 Dec 2007 12:56:50 -0000 1.2
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,34 +0,0 @@
-/***************************************************************************
- * Copyright (c) 2004 - 2008 Eike Stepper, Germany.
- * 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.protocol.revision;
-
-import org.eclipse.emf.cdo.protocol.util.CDOException;
-
-/**
- * @author Eike Stepper
- */
-public class CDODuplicateRevisionException extends CDOException
-{
- private static final long serialVersionUID = 1L;
-
- private CDORevision revision;
-
- public CDODuplicateRevisionException(CDORevision revision)
- {
- super(revision.toString());
- this.revision = revision;
- }
-
- public CDORevision getRevision()
- {
- return revision;
- }
-}
#P org.eclipse.emf.cdo.tests
Index: src/org/eclipse/emf/cdo/tests/ChunkingTest.java
===================================================================
RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/tests/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/ChunkingTest.java,v
retrieving revision 1.7
diff -u -r1.7 ChunkingTest.java
--- src/org/eclipse/emf/cdo/tests/ChunkingTest.java 4 Jan 2008 17:58:41 -0000 1.7
+++ src/org/eclipse/emf/cdo/tests/ChunkingTest.java 19 Jan 2008 14:41:52 -0000
@@ -17,8 +17,6 @@
import org.eclipse.emf.cdo.tests.model1.Model1Factory;
import org.eclipse.emf.cdo.tests.model1.SalesOrder;
-import org.eclipse.net4j.util.io.IOUtil;
-
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
@@ -76,9 +74,9 @@
int i = 0;
for (Iterator it = salesOrders.iterator(); it.hasNext();)
{
- IOUtil.OUT().println(i++);
+ msg(i++);
SalesOrder salesOrder = it.next();
- IOUtil.OUT().println(salesOrder);
+ msg(salesOrder);
}
}
@@ -175,7 +173,7 @@
resource.getContents().add(customer);
for (EObject element : resource.getContents())
{
- IOUtil.OUT().println(element);
+ msg(element);
}
transaction.commit();
Index: src/org/eclipse/emf/cdo/tests/TDD.java
===================================================================
RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/tests/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/TDD.java,v
retrieving revision 1.14
diff -u -r1.14 TDD.java
--- src/org/eclipse/emf/cdo/tests/TDD.java 31 Dec 2007 10:33:19 -0000 1.14
+++ src/org/eclipse/emf/cdo/tests/TDD.java 19 Jan 2008 14:41:52 -0000
@@ -21,9 +21,9 @@
*/
public class TDD
{
- private static final AbstractOMTest test = new InitialTest();
+ private static final AbstractOMTest test = new ChunkingWithMEMTest();
- private static final String METHOD_NAME = "testOpenSession";
+ private static final String METHOD_NAME = "testWriteNative";
public static void main(String[] args) throws Throwable
{
Index: src/org/eclipse/emf/cdo/tests/AbstractCDOTest.java
===================================================================
RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/tests/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AbstractCDOTest.java,v
retrieving revision 1.13
diff -u -r1.13 AbstractCDOTest.java
--- src/org/eclipse/emf/cdo/tests/AbstractCDOTest.java 19 Jan 2008 10:56:39 -0000 1.13
+++ src/org/eclipse/emf/cdo/tests/AbstractCDOTest.java 19 Jan 2008 14:41:52 -0000
@@ -18,6 +18,7 @@
import org.eclipse.emf.cdo.internal.server.Repository;
import org.eclipse.emf.cdo.internal.server.StoreUtil;
import org.eclipse.emf.cdo.server.CDOServerUtil;
+import org.eclipse.emf.cdo.server.IRepository;
import org.eclipse.emf.cdo.server.IStore;
import org.eclipse.emf.cdo.tests.model1.Model1Package;
import org.eclipse.emf.cdo.util.CDOUtil;
@@ -41,12 +42,6 @@
public static final String REPOSITORY_NAME = "repo1";
@Override
- protected boolean useJVMTransport()
- {
- return false;
- }
-
- @Override
protected IManagedContainer createContainer()
{
IManagedContainer container = super.createContainer();
@@ -56,11 +51,17 @@
return container;
}
+ protected IStore createStore()
+ {
+ return StoreUtil.createMEMStore();
+ }
+
protected Repository createRepository()
{
Map props = new HashMap();
- // props.put(RevisionManager.PROP_CURRENT_LRU_CAPACITY, "20");
- // props.put(RevisionManager.PROP_REVISED_LRU_CAPACITY, "20");
+ // props.put(IRepository.PROP_SUPPORTING_REVISION_DELTAS, "true");
+ // props.put(IRepository.PROP_CURRENT_LRU_CAPACITY, "20");
+ // props.put(IRepository.PROP_REVISED_LRU_CAPACITY, "20");
IStore store = createStore();
@@ -73,28 +74,11 @@
return repository;
}
- protected IStore createStore()
+ protected IRepository getRepository()
{
- return StoreUtil.createMEMStore();
+ return CDOServerUtil.getRepository(container, REPOSITORY_NAME);
}
- // protected DBStore createDBStore()
- // {
- // IMappingStrategy mappingStrategy = new HorizontalMappingStrategy();
- // IDBAdapter dbAdapter = new DerbyAdapter();
- //
- // Properties properties = new Properties();
- // properties.put("driverClass", "org.apache.derby.jdbc.EmbeddedDataSource");
- // properties.put("databaseName", "C:/temp/cdo-repo1");
- // properties.put("createDatabase", "create");
- // DataSource dataSource = DBUtil.createDataSource(properties);
- // ConnectionProvider connectionProvider = DBUtil.createConnectionProvider(dataSource);
- //
- // DBStore store = new DBStore(mappingStrategy, dbAdapter, connectionProvider);
- // mappingStrategy.setStore(store);
- // return store;
- // }
-
@Override
protected void doSetUp() throws Exception
{
Index: src/org/eclipse/emf/cdo/tests/ChunkingWithMEMTest.java
===================================================================
RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/tests/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/ChunkingWithMEMTest.java,v
retrieving revision 1.4
diff -u -r1.4 ChunkingWithMEMTest.java
--- src/org/eclipse/emf/cdo/tests/ChunkingWithMEMTest.java 4 Jan 2008 17:58:41 -0000 1.4
+++ src/org/eclipse/emf/cdo/tests/ChunkingWithMEMTest.java 19 Jan 2008 14:41:52 -0000
@@ -14,9 +14,7 @@
import org.eclipse.emf.cdo.CDOSession;
import org.eclipse.emf.cdo.CDOTransaction;
import org.eclipse.emf.cdo.eresource.CDOResource;
-import org.eclipse.emf.cdo.internal.server.MEMStore;
import org.eclipse.emf.cdo.internal.server.Repository;
-import org.eclipse.emf.cdo.internal.server.RepositoryFactory;
import org.eclipse.emf.cdo.internal.server.RevisionManager;
import org.eclipse.emf.cdo.protocol.revision.CDORevision;
import org.eclipse.emf.cdo.server.IStore;
@@ -24,8 +22,6 @@
import org.eclipse.emf.cdo.tests.model1.Model1Factory;
import org.eclipse.emf.cdo.tests.model1.SalesOrder;
-import org.eclipse.net4j.util.io.IOUtil;
-
import org.eclipse.emf.common.util.EList;
import java.util.HashMap;
@@ -37,33 +33,6 @@
*/
public class ChunkingWithMEMTest extends AbstractCDOTest
{
- @Override
- protected IStore createStore()
- {
- return new MEMStore();
- }
-
- @Override
- protected Repository createRepository()
- {
- Map props = new HashMap();
- IStore store = createStore();
- Repository repository = new Repository()
- {
- @Override
- protected RevisionManager createRevisionManager()
- {
- return new TestRevisionManager(this);
- }
- };
-
- repository.setName(REPOSITORY_NAME);
- repository.setProperties(props);
- repository.setStore(store);
- store.setRepository(repository);
- return repository;
- }
-
public void testReadNative() throws Exception
{
CDORevision revisionToRemove = null;
@@ -96,12 +65,8 @@
transaction.commit();
}
- // ************************************************************* //
- Repository repos = (Repository)container.getElement(RepositoryFactory.PRODUCT_GROUP, RepositoryFactory.TYPE,
- REPOSITORY_NAME);
- TestRevisionManager revManagerTest = (TestRevisionManager)repos.getRevisionManager();
- // Remove a specific version
- revManagerTest.removeRevision(revisionToRemove);
+ TestRevisionManager revisionManager = (TestRevisionManager)getRepository().getRevisionManager();
+ revisionManager.removeRevision(revisionToRemove);
msg("Opening session");
CDOSession session = openModel1Session();
@@ -117,9 +82,9 @@
int i = 0;
for (Iterator it = salesOrders.iterator(); it.hasNext();)
{
- IOUtil.OUT().println(i++);
+ msg(i++);
SalesOrder salesOrder = it.next();
- IOUtil.OUT().println(salesOrder);
+ msg(salesOrder);
}
}
@@ -156,12 +121,8 @@
revisionToRemove = customer.cdoRevision();
}
- // ************************************************************* //
- Repository repos = (Repository)container.getElement(RepositoryFactory.PRODUCT_GROUP, RepositoryFactory.TYPE,
- REPOSITORY_NAME);
- TestRevisionManager revManagerTest = (TestRevisionManager)repos.getRevisionManager();
-
- revManagerTest.removeRevision(revisionToRemove);
+ TestRevisionManager revisionManager = (TestRevisionManager)getRepository().getRevisionManager();
+ revisionManager.removeRevision(revisionToRemove);
msg("Opening session");
CDOSession session = openModel1Session();
@@ -186,6 +147,29 @@
transaction.commit();
}
+ @Override
+ protected Repository createRepository()
+ {
+ Map props = new HashMap();
+ // props.put(IRepository.PROP_SUPPORTING_REVISION_DELTAS, "true");
+
+ IStore store = createStore();
+ Repository repository = new Repository()
+ {
+ @Override
+ protected RevisionManager createRevisionManager()
+ {
+ return new TestRevisionManager(this);
+ }
+ };
+
+ repository.setName(REPOSITORY_NAME);
+ repository.setProperties(props);
+ repository.setStore(store);
+ store.setRepository(repository);
+ return repository;
+ }
+
/**
* @author Simon McDuff
*/
Index: net4j/org/eclipse/net4j/tests/AbstractOMTest.java
===================================================================
RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/tests/org.eclipse.emf.cdo.tests/net4j/org/eclipse/net4j/tests/AbstractOMTest.java,v
retrieving revision 1.7
diff -u -r1.7 AbstractOMTest.java
--- net4j/org/eclipse/net4j/tests/AbstractOMTest.java 28 Dec 2007 13:04:58 -0000 1.7
+++ net4j/org/eclipse/net4j/tests/AbstractOMTest.java 19 Jan 2008 14:41:52 -0000
@@ -105,11 +105,10 @@
{
}
- protected static void msg(String m)
+ protected static void msg(Object m)
{
if (consoleEnabled)
{
- IOUtil.OUT().println();
IOUtil.OUT().println("--> " + m);
}
}