diff options
author | Eike Stepper | 2008-06-12 06:48:57 +0000 |
---|---|---|
committer | Eike Stepper | 2008-06-12 06:48:57 +0000 |
commit | 9d1815e9d5b8b9111ca47be0e05c799020e71987 (patch) | |
tree | bd47a23bd0740aaaabff8da121901927100f948a /plugins | |
parent | df25e08f5eac7e457220207fc71c435616ea8961 (diff) | |
download | cdo-9d1815e9d5b8b9111ca47be0e05c799020e71987.tar.gz cdo-9d1815e9d5b8b9111ca47be0e05c799020e71987.tar.xz cdo-9d1815e9d5b8b9111ca47be0e05c799020e71987.zip |
[236784] Invalidate and cache problem
https://bugs.eclipse.org/bugs/show_bug.cgi?id=236784
Diffstat (limited to 'plugins')
5 files changed, 18 insertions, 14 deletions
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/revision/CDORevisionResolver.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/revision/CDORevisionResolver.java index 76bf815920..540ae82fbb 100644 --- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/revision/CDORevisionResolver.java +++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/revision/CDORevisionResolver.java @@ -37,8 +37,12 @@ public interface CDORevisionResolver public CDORevision getRevision(CDOID id, int referenceChunk); + public CDORevision getRevision(CDOID id, int referenceChunk, boolean loadOnDemand); + public CDORevision getRevisionByTime(CDOID id, int referenceChunk, long timeStamp); + public CDORevision getRevisionByTime(CDOID id, int referenceChunk, long timeStamp, boolean loadOnDemand); + public CDORevision getRevisionByVersion(CDOID id, int referenceChunk, int version); public CDORevision getRevisionByVersion(CDOID id, int referenceChunk, int version, boolean loadOnDemand); diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDORevisionResolverImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDORevisionResolverImpl.java index 63b3f3d708..8a3629ee71 100644 --- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDORevisionResolverImpl.java +++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDORevisionResolverImpl.java @@ -272,7 +272,7 @@ public abstract class CDORevisionResolverImpl extends Lifecycle implements CDORe return true; } - protected InternalCDORevision getRevision(CDOID id, int referenceChunk, boolean loadOnDemand) + public InternalCDORevision getRevision(CDOID id, int referenceChunk, boolean loadOnDemand) { RevisionHolder holder = revisions.get(id); InternalCDORevision revision = holder == null ? null : (InternalCDORevision)holder.getRevision(true); @@ -306,7 +306,7 @@ public abstract class CDORevisionResolverImpl extends Lifecycle implements CDORe return revision; } - protected synchronized InternalCDORevision getRevisionByTime(CDOID id, int referenceChunk, long timeStamp, + public synchronized InternalCDORevision getRevisionByTime(CDOID id, int referenceChunk, long timeStamp, boolean loadOnDemand) { RevisionHolder holder = revisions.get(id); diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOAuditImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOAuditImpl.java index 6438f95547..8ee6036332 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOAuditImpl.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOAuditImpl.java @@ -46,7 +46,8 @@ public class CDOAuditImpl extends CDOViewImpl implements CDOAudit { CDOSessionImpl session = getSession(); CDORevisionResolver revisionManager = session.getRevisionManager(); - return (InternalCDORevision)revisionManager.getRevisionByTime(id, session.getReferenceChunkSize(), timeStamp); + return (InternalCDORevision)revisionManager.getRevisionByTime(id, session.getReferenceChunkSize(), timeStamp, + loadOnDemand); } @Override diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStateMachine.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStateMachine.java index 926055d2c7..603baf4631 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStateMachine.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStateMachine.java @@ -531,14 +531,11 @@ public final class CDOStateMachine extends FiniteStateMachine<CDOState, CDOEvent InternalCDORevision revision = (InternalCDORevision)object.cdoRevision(); revision.setRevised(timeStamp - 1); - if (revision.isTransactional()) + CDOViewImpl view = (CDOViewImpl)object.cdoView(); + InternalCDORevision baseRevision = view.getRevision(object.cdoID(), false); + if (baseRevision != null && baseRevision.getVersion() + 1 == revision.getVersion()) { - CDOViewImpl view = (CDOViewImpl)object.cdoView(); - InternalCDORevision sessionRevision = view.getRevision(object.cdoID()); - if (sessionRevision.getVersion() < revision.getVersion()) - { - sessionRevision.setRevised(timeStamp - 1); - } + baseRevision.setRevised(timeStamp - 1); } } } @@ -575,7 +572,9 @@ public final class CDOStateMachine extends FiniteStateMachine<CDOState, CDOEvent { CDOID id = object.cdoID(); CDOViewImpl view = (CDOViewImpl)object.cdoView(); - InternalCDORevision revision = view.getRevision(id); + CDOSessionImpl session = view.getSession(); + CDORevisionManagerImpl revisionManager = session.getRevisionManager(); + InternalCDORevision revision = revisionManager.getRevision(id, session.getReferenceChunkSize()); object.cdoInternalSetRevision(revision); changeState(object, CDOState.CLEAN); object.cdoInternalPostLoad(); diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOViewImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOViewImpl.java index 3b7e97209b..5060e0096a 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOViewImpl.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOViewImpl.java @@ -293,10 +293,10 @@ public class CDOViewImpl extends org.eclipse.net4j.util.event.Notifier implement return newInstance(eClass); } - public InternalCDORevision getRevision(CDOID id) + public InternalCDORevision getRevision(CDOID id, boolean loadOnDemand) { CDORevisionResolver revisionManager = session.getRevisionManager(); - return (InternalCDORevision)revisionManager.getRevision(id, session.getReferenceChunkSize()); + return (InternalCDORevision)revisionManager.getRevision(id, session.getReferenceChunkSize(), loadOnDemand); } public InternalCDOObject getObject(CDOID id) @@ -385,7 +385,7 @@ public class CDOViewImpl extends org.eclipse.net4j.util.event.Notifier implement TRACER.trace("Creating object for " + id); } - InternalCDORevision revision = getRevision(id); + InternalCDORevision revision = getRevision(id, true); CDOClass cdoClass = revision.getCDOClass(); InternalCDOObject object = newInstance(cdoClass); if (object instanceof CDOResourceImpl) |