diff options
author | Eike Stepper | 2012-09-15 17:19:49 +0000 |
---|---|---|
committer | Eike Stepper | 2012-09-15 17:19:49 +0000 |
commit | 8b9148653cd64e2a072292e4b5521f41be815dd7 (patch) | |
tree | 1a3f8f18977c55cdcc6084d763b5265145c6873f /plugins/org.eclipse.emf.cdo.net4j | |
parent | c5f8afb091979d794f7b023f98bbc6a748d90f48 (diff) | |
download | cdo-8b9148653cd64e2a072292e4b5521f41be815dd7.tar.gz cdo-8b9148653cd64e2a072292e4b5521f41be815dd7.tar.xz cdo-8b9148653cd64e2a072292e4b5521f41be815dd7.zip |
[389665] Cache path->resourceNodeID mappings in AbstractCDOView
https://bugs.eclipse.org/bugs/show_bug.cgi?id=389665
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.net4j')
2 files changed, 18 insertions, 3 deletions
diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitNotificationIndication.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitNotificationIndication.java index 77588ac82f..dfb8fbc169 100644 --- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitNotificationIndication.java +++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitNotificationIndication.java @@ -34,6 +34,8 @@ public class CommitNotificationIndication extends CDOClientIndication { InternalCDOSession session = getSession(); CDOCommitInfo commitInfo = in.readCDOCommitInfo(); - session.handleCommitNotification(commitInfo); + boolean clearResourcePathCache = in.readBoolean(); + + session.handleCommitNotification(commitInfo, clearResourcePathCache); } } diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitTransactionRequest.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitTransactionRequest.java index 190bc92581..08c8bd482d 100644 --- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitTransactionRequest.java +++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitTransactionRequest.java @@ -41,6 +41,7 @@ import org.eclipse.emf.cdo.session.CDORepositoryInfo; import org.eclipse.emf.cdo.transaction.CDOTransaction; import org.eclipse.emf.internal.cdo.object.CDOObjectReferenceImpl; +import org.eclipse.emf.internal.cdo.view.AbstractCDOView; import org.eclipse.net4j.util.concurrent.ConcurrencyUtil; import org.eclipse.net4j.util.io.ExtendedDataOutputStream; @@ -83,6 +84,8 @@ public class CommitTransactionRequest extends CDOClientRequestWithMonitoring<Com private CDOTransaction transaction; + private boolean clearResourcePathCache; + public CommitTransactionRequest(CDOClientProtocol protocol, InternalCDOCommitContext context) { this(protocol, CDOProtocolConstants.SIGNAL_COMMIT_TRANSACTION, context); @@ -182,11 +185,20 @@ public class CommitTransactionRequest extends CDOClientRequestWithMonitoring<Com TRACER.format("Writing {0} dirty objects", changedObjects.size()); //$NON-NLS-1$ } + CDOID rootResourceID = transaction.getSession().getRepositoryInfo().getRootResourceID(); for (CDORevisionKey changedObject : changedObjects) { - out.writeCDORevisionDelta((CDORevisionDelta)changedObject); + CDORevisionDelta delta = (CDORevisionDelta)changedObject; + if (!clearResourcePathCache && AbstractCDOView.canHaveResourcePathImpact(delta, rootResourceID)) + { + clearResourcePathCache = true; + } + + out.writeCDORevisionDelta(delta); } + out.writeBoolean(clearResourcePathCache); + if (TRACER.isEnabled()) { TRACER.format("Writing {0} detached objects", detachedObjects.size()); //$NON-NLS-1$ @@ -301,7 +313,8 @@ public class CommitTransactionRequest extends CDOClientRequestWithMonitoring<Com } } - return new CommitTransactionResult(idProvider, rollbackMessage, branchPoint, previousTimeStamp, xRefs); + return new CommitTransactionResult(idProvider, rollbackMessage, branchPoint, previousTimeStamp, xRefs, + clearResourcePathCache); } return null; |