Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 87330 Details for
Bug 214752
Concurrency problem with getRevision()
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
Patch v5
clipboard.txt (text/plain), 59.71 KB, created by
Eike Stepper
on 2008-01-19 12:41:13 EST
(
hide
)
Description:
Patch v5
Filename:
MIME Type:
Creator:
Eike Stepper
Created:
2008-01-19 12:41:13 EST
Size:
59.71 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#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 17:40:23 -0000 >@@ -100,11 +100,13 @@ > return schema; > } > >+ @Override > public boolean hasAuditingSupport() > { > return true; > } > >+ @Override > public boolean hasBranchingSupport() > { > return false; >Index: src/org/eclipse/emf/cdo/server/internal/db/DBStoreWriter.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/DBStoreWriter.java,v >retrieving revision 1.25 >diff -u -r1.25 DBStoreWriter.java >--- src/org/eclipse/emf/cdo/server/internal/db/DBStoreWriter.java 17 Jan 2008 16:14:30 -0000 1.25 >+++ src/org/eclipse/emf/cdo/server/internal/db/DBStoreWriter.java 19 Jan 2008 17:40:23 -0000 >@@ -16,7 +16,6 @@ > import org.eclipse.emf.cdo.internal.protocol.model.CDOPackageImpl; > import org.eclipse.emf.cdo.internal.protocol.revision.CDORevisionImpl; > import org.eclipse.emf.cdo.protocol.CDOIDRange; >-import org.eclipse.emf.cdo.server.IStoreWriter; > import org.eclipse.emf.cdo.server.IView; > import org.eclipse.emf.cdo.server.db.IClassMapping; > import org.eclipse.emf.cdo.server.db.IDBStoreWriter; >@@ -27,7 +26,6 @@ > import org.eclipse.net4j.db.DBUtil; > import org.eclipse.net4j.db.ddl.IDBTable; > import org.eclipse.net4j.internal.util.om.trace.ContextTracer; >-import org.eclipse.net4j.util.transaction.ITransaction; > > import java.sql.PreparedStatement; > import java.sql.SQLException; >@@ -45,23 +43,6 @@ > super(store, view); > } > >- @Override >- public void release() throws DBException >- { >- try >- { >- getConnection().commit(); >- } >- catch (SQLException ex) >- { >- throw new DBException(ex); >- } >- finally >- { >- super.release(); >- } >- } >- > public void writePackages(CDOPackageImpl... cdoPackages) > { > for (CDOPackageImpl cdoPackage : cdoPackages) >@@ -194,13 +175,30 @@ > mapping.writeRevision(this, revision); > } > >- public void rollback(IView view, ITransaction<IStoreWriter> storeTransaction) >+ public void commit() >+ { >+ try >+ { >+ if (TRACER.isEnabled()) >+ { >+ TRACER.format("Committing transaction: {0}", getView()); >+ } >+ >+ getConnection().commit(); >+ } >+ catch (SQLException ex) >+ { >+ throw new DBException(ex); >+ } >+ } >+ >+ public void rollback() > { > try > { > if (TRACER.isEnabled()) > { >- TRACER.format("Rolling back transaction: {0}", view); >+ TRACER.format("Rolling back transaction: {0}", getView()); > } > > getConnection().rollback(); >#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 17:40:24 -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; >@@ -23,10 +22,13 @@ > import java.text.MessageFormat; > import java.util.ArrayList; > import java.util.Collection; >+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 Eike Stepper >@@ -35,7 +37,41 @@ > { > private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG_REVISION, CDORevisionResolverImpl.class); > >- private Map<CDOID, RevisionHolder> revisions = new HashMap<CDOID, RevisionHolder>(); >+ private Map<CDOID, RevisionHolder> revisions = new HashMap<CDOID, RevisionHolder>() >+ { >+ private static final long serialVersionUID = 1L; >+ >+ @Override >+ public String toString() >+ { >+ List<Entry<CDOID, RevisionHolder>> entries = new ArrayList<Entry<CDOID, RevisionHolder>>(entrySet()); >+ Collections.sort(entries, new Comparator<Entry<CDOID, RevisionHolder>>() >+ { >+ public int compare(Entry<CDOID, RevisionHolder> o1, Entry<CDOID, RevisionHolder> o2) >+ { >+ return o1.getKey().compareTo(o2.getKey()); >+ } >+ }); >+ >+ StringBuilder builder = new StringBuilder(); >+ for (Entry<CDOID, RevisionHolder> entry : entries) >+ { >+ builder.append(entry.getKey()); >+ builder.append(" -->"); >+ RevisionHolder holder = entry.getValue(); >+ while (holder != null) >+ { >+ builder.append(" "); >+ builder.append(holder.getRevision(false)); >+ holder = holder.getNext(); >+ } >+ >+ builder.append("\n"); >+ } >+ >+ return builder.toString(); >+ } >+ }; > > private int currentLRUCapacity; > >@@ -122,13 +158,13 @@ > missingIDs.add(id); > } > } >- >+ > if (!missingIDs.isEmpty()) > { > List<CDORevisionImpl> missingRevisions = loadRevisions(missingIDs, referenceChunk); > handleMissingRevisions(revisions, missingRevisions); > } >- >+ > return revisions; > } > >@@ -150,13 +186,13 @@ > missingIDs.add(id); > } > } >- >+ > if (!missingIDs.isEmpty()) > { > List<CDORevisionImpl> missingRevisions = loadRevisions(missingIDs, referenceChunk); > handleMissingRevisions(revisions, missingRevisions); > } >- >+ > return revisions; > } > >@@ -199,7 +235,7 @@ > return null; > } > >- public void addRevision(CDORevisionImpl revision) throws CDODuplicateRevisionException >+ public boolean addRevision(CDORevisionImpl revision) > { > if (TRACER.isEnabled()) > { >@@ -208,7 +244,6 @@ > } > > RevisionHolder newHolder = createHolder(revision); >- > LRU list = revision.isCurrent() ? currentLRU : revisedLRU; > list.add((DLRevisionHolder)newHolder); > >@@ -225,7 +260,7 @@ > } > else if (holderVersion == version) > { >- throw new CDODuplicateRevisionException(revision); >+ return false; > } > else > { >@@ -234,6 +269,7 @@ > } > > adjustHolder(revision, newHolder, lastHolder, holder); >+ return true; > } > > protected CDORevisionImpl getRevision(CDOID id, int referenceChunk, boolean loadOnDemand) >@@ -344,14 +380,14 @@ > { > holder = holder.getNext(); > } >- else if (holderVersion == version) >- { >- removeHolder(holder); >- break; >- } > else > { >- break; >+ if (holderVersion == version) >+ { >+ removeHolder(holder); >+ } >+ >+ holder = null; > } > } > } >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 17:40:24 -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; >@@ -192,23 +192,38 @@ > { > if (TRACER.isEnabled()) > { >- TRACER.format("Setting version: v{0} -> v{1}", this.version, version); >+ TRACER.format("Setting version for {0}: v{1}", this, version); > } > > this.version = version; > } > >- public int increaseVersion() >+ public boolean isTransactional() >+ { >+ return version < 0; >+ } >+ >+ public int setTransactional() > { > if (TRACER.isEnabled()) > { >- TRACER.format("Increasing version: v{0} -> v{1}", version, -(version + 1)); >+ TRACER.format("Setting transactional {0}: v{1}", this, -(version + 1)); > } > > version = -(version + 1); > return version; > } > >+ public void setUntransactional() >+ { >+ if (TRACER.isEnabled()) >+ { >+ TRACER.format("Setting untransactional {0}: v{1}", this, Math.abs(version)); >+ } >+ >+ version = Math.abs(version); >+ } >+ > public long getCreated() > { > return created; >@@ -218,7 +233,7 @@ > { > if (TRACER.isEnabled()) > { >- TRACER.format("Setting created: {0,date} {0,time}", created); >+ TRACER.format("Setting created {0}: {1,date} {1,time}", this, created); > } > > this.created = created; >@@ -233,7 +248,7 @@ > { > if (TRACER.isEnabled()) > { >- TRACER.format("Setting revised: {0} -> {1,date} {1,time}", this, revised); >+ TRACER.format("Setting revised {0}: {1,date} {1,time}", this, revised); > } > > this.revised = revised; >@@ -249,21 +264,6 @@ > return (revised == UNSPECIFIED_DATE || revised >= timeStamp) && timeStamp >= created; > } > >- public boolean isTransactional() >- { >- return version < 0; >- } >- >- public void setUntransactional() >- { >- if (TRACER.isEnabled()) >- { >- TRACER.format("Setting untransactional: v{0} -> v{1}", version, Math.abs(version)); >- } >- >- version = Math.abs(version); >- } >- > public boolean isResource() > { > return cdoClass.isResource(); >@@ -294,7 +294,7 @@ > { > if (TRACER.isEnabled()) > { >- TRACER.format("Setting resourceID: {0}", resourceID); >+ TRACER.format("Setting resourceID {0}: {1}", this, resourceID); > } > > this.resourceID = resourceID; >@@ -309,7 +309,7 @@ > { > if (TRACER.isEnabled()) > { >- TRACER.format("Setting containerID: {0}", containerID); >+ TRACER.format("Setting containerID {0}: {1}", this, containerID); > } > > this.containerID = containerID; >@@ -324,7 +324,7 @@ > { > if (TRACER.isEnabled()) > { >- TRACER.format("Setting containingFeatureID: {0}", containingFeatureID); >+ TRACER.format("Setting containingFeatureID {0}: {1}", this, containingFeatureID); > } > > this.containingFeatureID = containingFeatureID; >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 17:40:24 -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 >Index: src/org/eclipse/emf/internal/cdo/CDOStateMachine.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStateMachine.java,v >retrieving revision 1.57 >diff -u -r1.57 CDOStateMachine.java >--- src/org/eclipse/emf/internal/cdo/CDOStateMachine.java 17 Jan 2008 16:31:34 -0000 1.57 >+++ src/org/eclipse/emf/internal/cdo/CDOStateMachine.java 19 Jan 2008 17:40:26 -0000 >@@ -441,8 +441,8 @@ > { > // Copy revision > CDORevisionImpl revision = new CDORevisionImpl((CDORevisionImpl)object.cdoRevision()); >+ revision.setTransactional(); > object.cdoInternalSetRevision(revision); >- revision.increaseVersion(); > > CDOViewImpl view = (CDOViewImpl)object.cdoView(); > CDOTransactionImpl transaction = view.toTransaction(); >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 17:40:26 -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 >Index: src/org/eclipse/emf/internal/cdo/CDOObjectMerger.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectMerger.java,v >retrieving revision 1.1 >diff -u -r1.1 CDOObjectMerger.java >--- src/org/eclipse/emf/internal/cdo/CDOObjectMerger.java 19 Jan 2008 09:29:53 -0000 1.1 >+++ src/org/eclipse/emf/internal/cdo/CDOObjectMerger.java 19 Jan 2008 17:40:26 -0000 >@@ -28,7 +28,7 @@ > public void merge(InternalCDOObject object, CDORevisionDelta delta) > { > CDORevisionImpl revision = new CDORevisionImpl((CDORevisionImpl)object.cdoRevision()); >- revision.increaseVersion(); >+ revision.setTransactional(); > object.cdoInternalSetRevision(revision); > object.cdoInternalSetState(CDOState.DIRTY); > merge(revision, delta); >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 17:40:26 -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 >#P org.eclipse.emf.cdo.server >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 17:40:28 -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); >@@ -336,15 +332,6 @@ > // Can throw an exception if duplicate > 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) >- { >- throw new CDODuplicateRevisionException(currentVersion); >- } > } > > public void phase2(IStoreWriter storeWriter) >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 17:40:28 -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/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 17:40:28 -0000 >@@ -31,18 +31,6 @@ > */ > public class Repository extends Container<IRepositoryElement> 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 17:40:28 -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,120 @@ > { > public static final String TYPE = "mem"; > >- private Map<CDOID, List<CDORevision>> mapOfRevisions = new HashMap<CDOID, List<CDORevision>>(); >+ private Map<CDOID, List<CDORevision>> revisions = new HashMap<CDOID, List<CDORevision>>() >+ { >+ private static final long serialVersionUID = 1L; >+ >+ @Override >+ public String toString() >+ { >+ List<Entry<CDOID, List<CDORevision>>> entries = new ArrayList<Entry<CDOID, List<CDORevision>>>(entrySet()); >+ Collections.sort(entries, new Comparator<Entry<CDOID, List<CDORevision>>>() >+ { >+ public int compare(Entry<CDOID, List<CDORevision>> o1, Entry<CDOID, List<CDORevision>> o2) >+ { >+ return o1.getKey().compareTo(o2.getKey()); >+ } >+ }); >+ >+ StringBuilder builder = new StringBuilder(); >+ for (Entry<CDOID, List<CDORevision>> entry : entries) >+ { >+ builder.append(entry.getKey()); >+ builder.append(" -->"); >+ for (CDORevision revision : entry.getValue()) >+ { >+ 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<CDORevision> list = getList(rev); >- if (list.size() == 0) >+ List<CDORevision> 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<CDORevision> getList(CDOID rev) >+ public synchronized CDORevision getRevisionByVersion(CDOID id, int version) > { >- List<CDORevision> list = mapOfRevisions.get(rev); >- if (list == null) >+ List<CDORevision> list = revisions.get(id); >+ if (list != null) > { >- list = new ArrayList<CDORevision>(); >- 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<CDORevision> list = getList(rev); >- for (CDORevision revision : list) >+ CDOID id = revision.getID(); >+ List<CDORevision> list = revisions.get(id); >+ if (list == null) > { >- if (revision.getVersion() == version) return revision; >+ list = new ArrayList<CDORevision>(); >+ 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<CDORevision> list = revisions.get(id); >+ if (list == null) > { >- getList(revision.getID()).add(revision); >+ return false; > } >+ >+ for (Iterator<CDORevision> it = list.iterator(); it.hasNext();) >+ { >+ 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 +159,24 @@ > { > return new MEMStoreAccessor(this, view); > } >+ >+ @Override >+ protected void doDeactivate() throws Exception >+ { >+ revisions.clear(); >+ super.doDeactivate(); >+ } >+ >+ private CDORevision getRevisionByVersion(List<CDORevision> list, int version) >+ { >+ for (CDORevision revision : list) >+ { >+ if (revision.getVersion() == version) >+ { >+ return revision; >+ } >+ } >+ >+ return null; >+ } > } >Index: src/org/eclipse/emf/cdo/internal/server/NOOPStoreAccessor.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/NOOPStoreAccessor.java,v >retrieving revision 1.6 >diff -u -r1.6 NOOPStoreAccessor.java >--- src/org/eclipse/emf/cdo/internal/server/NOOPStoreAccessor.java 6 Jan 2008 18:03:50 -0000 1.6 >+++ src/org/eclipse/emf/cdo/internal/server/NOOPStoreAccessor.java 19 Jan 2008 17:40:28 -0000 >@@ -24,7 +24,6 @@ > import org.eclipse.emf.cdo.server.IView; > > import org.eclipse.net4j.util.io.CloseableIterator; >-import org.eclipse.net4j.util.transaction.ITransaction; > > import java.util.Collection; > import java.util.Collections; >@@ -108,7 +107,11 @@ > { > } > >- public void rollback(IView view, ITransaction<IStoreWriter> storeTransaction) >+ public void commit() >+ { >+ } >+ >+ public void rollback() > { > } > } >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 17:40:28 -0000 >@@ -32,20 +32,19 @@ > public List<Chunk> executeRead() > { > MEMStore store = getStoreReader().getStore(); >- for (Chunk chunk : getChunks()) >+ List<Chunk> 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/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 17:40:28 -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; >@@ -27,7 +26,6 @@ > import org.eclipse.emf.cdo.server.IView; > > import org.eclipse.net4j.util.io.CloseableIterator; >-import org.eclipse.net4j.util.transaction.ITransaction; > > import java.util.ArrayList; > import java.util.Collection; >@@ -39,7 +37,7 @@ > */ > public class MEMStoreAccessor extends StoreAccessor implements IStoreReader, IStoreWriter > { >- List<CDORevisionImpl> listToCommit = new ArrayList<CDORevisionImpl>(); >+ List<CDORevision> newRevisions = new ArrayList<CDORevision>(); > > public MEMStoreAccessor(MEMStore store, ISession session) > { >@@ -84,23 +82,28 @@ > > public CDORevision readRevision(CDOID id, int referenceChunk) > { >- CDORevisionImpl revStore = (CDORevisionImpl)getStore().getRevision(id); >- CDORevisionImpl newRevision = new CDORevisionImpl(this.getStore().getRepository().getRevisionManager(), revStore >- .getCDOClass(), revStore.getID()); >- newRevision.setResourceID(revStore.getResourceID()); >- >- for (CDOFeature feature : revStore.getCDOClass().getAllFeatures()) >- { >- if (feature.isMany()) >- { >- newRevision.setListSize(feature, revStore.getList(feature).size()); >- for (int i = 0; i < referenceChunk; i++) >- { >- newRevision.getList(feature).set(i, revStore.get(feature, i)); >- } >- } >- } >- return newRevision; >+ CDORevisionImpl storeRevision = (CDORevisionImpl)getStore().getRevision(id); >+ // IRevisionManager revisionManager = getStore().getRepository().getRevisionManager(); >+ // CDORevisionImpl newRevision = new CDORevisionImpl(revisionManager, storeRevision.getCDOClass(), storeRevision >+ // .getID()); >+ // newRevision.setResourceID(storeRevision.getResourceID()); >+ // >+ // for (CDOFeature feature : storeRevision.getCDOClass().getAllFeatures()) >+ // { >+ // if (feature.isMany()) >+ // { >+ // newRevision.setListSize(feature, storeRevision.getList(feature).size()); >+ // MoveableList list = newRevision.getList(feature); >+ // int size = referenceChunk == CDORevision.UNCHUNKED ? list.size() : referenceChunk; >+ // for (int i = 0; i < size; i++) >+ // { >+ // list.set(i, storeRevision.get(feature, i)); >+ // } >+ // } >+ // } >+ // >+ // return newRevision; >+ return storeRevision; > } > > public CDORevision readRevisionByTime(CDOID id, int referenceChunk, long timeStamp) >@@ -129,32 +132,34 @@ > > 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); >+ newRevisions.add(newRevision); > } > > @Override > public void release() > { >- for (CDORevisionImpl rev : listToCommit) >- getStore().addRevision(rev); >+ newRevisions.clear(); >+ } >+ >+ public void commit() >+ { >+ MEMStore store = getStore(); >+ for (CDORevision revision : newRevisions) >+ { >+ store.addRevision(revision); >+ } > } > >- public void rollback(IView view, ITransaction<IStoreWriter> storeTransaction) >+ public void rollback() > { >- listToCommit.clear(); > } > } >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 17:40:28 -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/server/IStoreWriter.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/IStoreWriter.java,v >retrieving revision 1.13 >diff -u -r1.13 IStoreWriter.java >--- src/org/eclipse/emf/cdo/server/IStoreWriter.java 7 Jan 2008 16:26:15 -0000 1.13 >+++ src/org/eclipse/emf/cdo/server/IStoreWriter.java 19 Jan 2008 17:40:28 -0000 >@@ -21,8 +21,6 @@ > import org.eclipse.emf.cdo.protocol.model.CDOClass; > import org.eclipse.emf.cdo.protocol.model.CDOFeature; > >-import org.eclipse.net4j.util.transaction.ITransaction; >- > /** > * @author Eike Stepper > */ >@@ -46,12 +44,13 @@ > */ > public void writePackages(CDOPackageImpl... cdoPackages); > >+ public CDOID primeNewObject(CDOClass cdoClass); >+ > public void writeRevision(CDORevisionImpl revision); > > public void writeRevisionDelta(CDORevisionDeltaImpl delta); > >- public CDOID primeNewObject(CDOClass cdoClass); >+ public void commit(); > >- // TODO Remove storeTransaction parameter >- public void rollback(IView view, ITransaction<IStoreWriter> storeTransaction); >+ public void rollback(); > } >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 17:40:28 -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. > * <p> > * 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 <code>UnsupportedOperationException</code>. > * >- * @return <code>true</code> if this store supports the writing of modified revisions in terms of deltas, >+ * @return <code>true</code> if this store supports the writing of modified newRevisions in terms of deltas, > * <code>false</code> otherwise. > */ > public boolean hasWriteDeltaSupport(); > > /** >- * Returns if this store supports the retrieval of historical revisions. >+ * Returns if this store supports the retrieval of historical newRevisions. > * <p> > * 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 <code>UnsupportedOperationException</code>. > * >- * @return <code>true</code> if this store supports the retrieval of historical revisions, <code>false</code> >+ * @return <code>true</code> if this store supports the retrieval of historical newRevisions, <code>false</code> > * 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. > * <p> > * Note: This is reserved for future use by the framework. There is currently no support for branching in the > * framework! > * >- * @return <code>true</code> if this store supports the storage of concurrent revisions in separate branches, >+ * @return <code>true</code> if this store supports the storage of concurrent newRevisions in separate branches, > * <code>false</code> 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 17:40:28 -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 17:40:28 -0000 >@@ -19,6 +19,18 @@ > */ > public interface IRepository extends IContainer<IRepositoryElement> > { >+ 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/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 17:40:28 -0000 >@@ -116,7 +116,7 @@ > { > Session session = getSession(); > List<CDORevisionImpl> additionalRevisions = new ArrayList<CDORevisionImpl>(); >- Set<CDOID> revisions = new HashSet<CDOID>(); >+ Set<CDOID> revisionIDs = new HashSet<CDOID>(); > if (PROTOCOL.isEnabled()) > { > PROTOCOL.format("Writing {0} revisions", ids.length); >@@ -124,7 +124,7 @@ > > for (CDOID id : ids) > { >- revisions.add(id); >+ revisionIDs.add(id); > } > > // Need to fetch the rule first. >@@ -133,11 +133,11 @@ > { > if (PROTOCOL.isEnabled()) > { >- PROTOCOL.format("Collecting more objects based on rules"); >+ PROTOCOL.format("Collecting more revisions based on rules"); > } > > CDORevisionImpl revisionContext = getRevision(contextID); >- collectRevisions(revisionContext, revisions, additionalRevisions, visitedFetchRules); >+ collectRevisions(revisionContext, revisionIDs, additionalRevisions, visitedFetchRules); > } > > for (CDOID id : ids) >@@ -146,7 +146,7 @@ > revision.write(out, session, referenceChunk); > if (loadRevisionCollectionChunkSize > 0) > { >- collectRevisions(revision, revisions, additionalRevisions, visitedFetchRules); >+ collectRevisions(revision, revisionIDs, additionalRevisions, visitedFetchRules); > } > } > >@@ -165,7 +165,8 @@ > > protected CDORevisionImpl getRevision(CDOID id) > { >- return getRevisionManager().getRevision(id, referenceChunk); >+ RevisionManager revisionManager = getRevisionManager(); >+ return revisionManager.getRevision(id, referenceChunk); > } > > private void collectRevisions(CDORevisionImpl revision, Set<CDOID> revisions, >Index: src/org/eclipse/emf/cdo/internal/server/protocol/CommitTransactionIndication.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/CommitTransactionIndication.java,v >retrieving revision 1.34 >diff -u -r1.34 CommitTransactionIndication.java >--- src/org/eclipse/emf/cdo/internal/server/protocol/CommitTransactionIndication.java 19 Jan 2008 09:51:38 -0000 1.34 >+++ src/org/eclipse/emf/cdo/internal/server/protocol/CommitTransactionIndication.java 19 Jan 2008 17:40:28 -0000 >@@ -123,13 +123,15 @@ > writeRevisions(storeTransaction, dirtyObjects); > // addRevisions(storeTransaction, dirtyObjects); > >+ storeWriter.commit(); > storeTransaction.commit(); > } > catch (RuntimeException ex) > { > OM.LOG.error(ex); > rollbackMessage = ex.getLocalizedMessage(); >- storeWriter.rollback(view, storeTransaction); >+ storeWriter.rollback(); >+ storeTransaction.rollback(); > } > } > finally >#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 17:40:30 -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<SalesOrder> 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 17:40:30 -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 17:40:30 -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<String, String> props = new HashMap<String, String>(); >- // 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 17:40:30 -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<String, String> props = new HashMap<String, String>(); >- 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; >@@ -94,14 +63,11 @@ > > msg("Committing"); > transaction.commit(); >+ session.close(); > } > >- // ************************************************************* // >- 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,10 +83,12 @@ > int i = 0; > for (Iterator<SalesOrder> it = salesOrders.iterator(); it.hasNext();) > { >- IOUtil.OUT().println(i++); >+ msg(i++); > SalesOrder salesOrder = it.next(); >- IOUtil.OUT().println(salesOrder); >+ msg(salesOrder); > } >+ >+ session.close(); > } > > public void testWriteNative() throws Exception >@@ -154,14 +122,11 @@ > msg("Committing"); > transaction.commit(); > revisionToRemove = customer.cdoRevision(); >+ session.close(); > } > >- // ************************************************************* // >- 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(); >@@ -184,6 +149,30 @@ > } > > transaction.commit(); >+ session.close(); >+ } >+ >+ @Override >+ protected Repository createRepository() >+ { >+ Map<String, String> props = new HashMap<String, String>(); >+ // 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; > } > > /** >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 17:40:30 -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); > } > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 214752
:
87319
|
87326
|
87327
|
87328
|
87329
|
87330
|
87343
|
87344
|
87348