Author: mreutegg
Date: Thu Mar 27 10:50:21 2014
New Revision: 1582252

URL: http://svn.apache.org/r1582252
Log:
OAK-1342: Cascading document history

Minor optimization to reduce calls to commit root

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java?rev=1582252&r1=1582251&r2=1582252&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
 Thu Mar 27 10:50:21 2014
@@ -20,7 +20,6 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.NavigableMap;
@@ -439,7 +438,7 @@ public final class NodeDocument extends 
                 Arrays.asList(revisions.keySet(), commitRoots.keySet()),
                 revisions.comparator())) {
             if (!r.equals(changeRev)) {
-                if (isValidRevision(context, r, null, changeRev, new 
HashSet<Revision>())) {
+                if (isValidRevision(context, r, null, changeRev, new 
HashMap<Revision, String>())) {
                     newestRev = r;
                     // found newest revision, no need to check more revisions
                     // revisions are sorted newest first
@@ -488,8 +487,9 @@ public final class NodeDocument extends 
      * @param commitValue the commit value of the revision to check or
      *                    <code>null</code> if unknown.
      * @param readRevision the read revision of the client.
-     * @param validRevisions set of revisions already checked against
-     *                       <code>readRevision</code> and considered valid.
+     * @param validRevisions map of revisions to commit value already checked
+     *                       against <code>readRevision</code> and considered
+     *                       valid.
      * @return <code>true</code> if the revision is valid; <code>false</code>
      *         otherwise.
      */
@@ -497,8 +497,8 @@ public final class NodeDocument extends 
                             @Nonnull Revision rev,
                             @Nullable String commitValue,
                             @Nonnull Revision readRevision,
-                            @Nonnull Set<Revision> validRevisions) {
-        if (validRevisions.contains(rev)) {
+                            @Nonnull Map<Revision, String> validRevisions) {
+        if (validRevisions.containsKey(rev)) {
             return true;
         }
         NodeDocument doc = getCommitRoot(rev);
@@ -506,7 +506,7 @@ public final class NodeDocument extends 
             return false;
         }
         if (doc.isCommitted(context, rev, commitValue, readRevision)) {
-            validRevisions.add(rev);
+            validRevisions.put(rev, commitValue);
             return true;
         }
         return false;
@@ -529,7 +529,7 @@ public final class NodeDocument extends 
     public DocumentNodeState getNodeAtRevision(@Nonnull DocumentNodeStore 
nodeStore,
                                                @Nonnull Revision readRevision,
                                                @Nullable Revision 
lastModified) {
-        Set<Revision> validRevisions = new HashSet<Revision>();
+        Map<Revision, String> validRevisions = Maps.newHashMap();
         Revision min = getLiveRevision(nodeStore, readRevision, 
validRevisions);
         if (min == null) {
             // deleted
@@ -615,14 +615,14 @@ public final class NodeDocument extends 
      *
      * @param context the revision context
      * @param maxRev the maximum revision to return
-     * @param validRevisions the set of revisions already checked against 
maxRev
-     *            and considered valid.
+     * @param validRevisions the map of revisions to commit value already
+     *                       checked against maxRev and considered valid.
      * @return the earliest revision, or null if the node is deleted at the
      *         given revision
      */
     @CheckForNull
     public Revision getLiveRevision(RevisionContext context, Revision maxRev,
-                                    Set<Revision> validRevisions) {
+                                    Map<Revision, String> validRevisions) {
         // check local deleted map first
         Value value = getLatestValue(context, getLocalDeleted(),
                 null, maxRev, validRevisions);
@@ -1227,8 +1227,8 @@ public final class NodeDocument extends 
      * @param valueMap the sorted revision-value map
      * @param min the minimum revision (null meaning unlimited)
      * @param readRevision the maximum revision
-     * @param validRevisions set of revision considered valid against the given
-     *                       readRevision.
+     * @param validRevisions map of revision to commit value considered valid
+     *                       against the given readRevision.
      * @return the value, or null if not found
      */
     @CheckForNull
@@ -1236,7 +1236,7 @@ public final class NodeDocument extends 
                                  @Nonnull Map<Revision, String> valueMap,
                                  @Nullable Revision min,
                                  @Nonnull Revision readRevision,
-                                 @Nonnull Set<Revision> validRevisions) {
+                                 @Nonnull Map<Revision, String> 
validRevisions) {
         String value = null;
         Revision latestRev = null;
         for (Map.Entry<Revision, String> entry : valueMap.entrySet()) {
@@ -1246,14 +1246,17 @@ public final class NodeDocument extends 
             if (isRevisionNewer(context, propRev, readRevision)) {
                 continue;
             }
-            // resolve revision
-            NodeDocument commitRoot = getCommitRoot(propRev);
-            if (commitRoot == null) {
-                continue;
-            }
-            String commitValue = commitRoot.getCommitValue(propRev);
+            String commitValue = validRevisions.get(propRev);
             if (commitValue == null) {
-                continue;
+                // resolve revision
+                NodeDocument commitRoot = getCommitRoot(propRev);
+                if (commitRoot == null) {
+                    continue;
+                }
+                commitValue = commitRoot.getCommitValue(propRev);
+                if (commitValue == null) {
+                    continue;
+                }
             }
             if (min != null && isRevisionNewer(context, min,
                     Utils.resolveCommitRevision(propRev, commitValue))) {


Reply via email to