### 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); } }