Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2008-06-12 06:48:57 +0000
committerEike Stepper2008-06-12 06:48:57 +0000
commit9d1815e9d5b8b9111ca47be0e05c799020e71987 (patch)
treebd47a23bd0740aaaabff8da121901927100f948a /plugins
parentdf25e08f5eac7e457220207fc71c435616ea8961 (diff)
downloadcdo-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')
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/revision/CDORevisionResolver.java4
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDORevisionResolverImpl.java4
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOAuditImpl.java3
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStateMachine.java15
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOViewImpl.java6
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)

Back to the top