Author: mreutegg
Date: Fri Mar 28 21:34:33 2014
New Revision: 1582889

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

- Optimize isConflicting()
- Split off revisions independent of existing previous ranges

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/UpdateUtils.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=1582889&r1=1582888&r2=1582889&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
 Fri Mar 28 21:34:33 2014
@@ -800,7 +800,9 @@ public final class NodeDocument extends 
                                  @Nonnull Revision baseRevision,
                                  @Nonnull RevisionContext context) {
         // did existence of node change after baseRevision?
-        Map<Revision, String> deleted = getDeleted();
+        // only check local deleted map, which contains the most
+        // recent values
+        Map<Revision, String> deleted = getLocalDeleted();
         for (Map.Entry<Revision, String> entry : deleted.entrySet()) {
             if (isRevisionNewer(context, entry.getKey(), baseRevision)) {
                 return true;
@@ -852,18 +854,13 @@ public final class NodeDocument extends 
         if (id == null) {
             throw new IllegalStateException("document does not have an id: " + 
this);
         }
-        // what's the most recent previous revision?
-        Revision recentPrevious = null;
+        // collect ranges and create a histogram of the height
         Map<Integer, List<Range>> prevHisto = Maps.newHashMap();
         for (Map.Entry<Revision, Range> entry : previous.entrySet()) {
             Revision rev = entry.getKey();
             if (rev.getClusterId() != context.getClusterId()) {
                 continue;
             }
-            if (recentPrevious == null
-                    || isRevisionNewer(context, rev, recentPrevious)) {
-                recentPrevious = rev;
-            }
             Range r = entry.getValue();
             List<Range> list = prevHisto.get(r.getHeight());
             if (list == null) {
@@ -889,11 +886,8 @@ public final class NodeDocument extends 
                 if (rev.getClusterId() != context.getClusterId()) {
                     continue;
                 }
-                if (recentPrevious == null
-                        || isRevisionNewer(context, rev, recentPrevious)) {
-                    if (isCommitted(rev)) {
-                        splitMap.put(rev, entry.getValue());
-                    }
+                if (isCommitted(rev)) {
+                    splitMap.put(rev, entry.getValue());
                 }
             }
         }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/UpdateUtils.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/UpdateUtils.java?rev=1582889&r1=1582888&r2=1582889&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/UpdateUtils.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/UpdateUtils.java
 Fri Mar 28 21:34:33 2014
@@ -70,6 +70,9 @@ public class UpdateUtils {
                         m = new TreeMap<Revision, Object>(comparator);
                         doc.put(k.getName(), m);
                     }
+                    if (k.getRevision() == null) {
+                        throw new IllegalArgumentException("Cannot set map 
entry " + k.getName() + " with null revision");
+                    }
                     m.put(k.getRevision(), op.value);
                     break;
                 }


Reply via email to