You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by mr...@apache.org on 2014/07/17 10:05:41 UTC

svn commit: r1611277 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java

Author: mreutegg
Date: Thu Jul 17 08:05:41 2014
New Revision: 1611277

URL: http://svn.apache.org/r1611277
Log:
OAK-1972: Async property index update may fail on DocumentMK with more than 100 index changes

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.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=1611277&r1=1611276&r2=1611277&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 Jul 17 08:05:41 2014
@@ -743,6 +743,22 @@ public final class NodeDocument extends 
             // first check local map, which contains most recent values
             Value value = getLatestValue(nodeStore, getLocalMap(key),
                     min, readRevision, validRevisions);
+
+            // check if there may be more recent values in a previous document
+            if (value != null && !getPreviousRanges().isEmpty()) {
+                Revision newest = getLocalMap(key).firstKey();
+                if (!value.revision.equals(newest)) {
+                    // not reading the most recent value, we may need to
+                    // consider previous documents as well
+                    Revision newestPrev = getPreviousRanges().firstKey();
+                    if (isRevisionNewer(nodeStore, newestPrev, value.revision)) {
+                        // a previous document has more recent changes
+                        // than value.revision
+                        value = null;
+                    }
+                }
+            }
+
             if (value == null && !getPreviousRanges().isEmpty()) {
                 // check complete revision history
                 value = getLatestValue(nodeStore, getValueMap(key),

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java?rev=1611277&r1=1611276&r2=1611277&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java Thu Jul 17 08:05:41 2014
@@ -50,7 +50,6 @@ import org.apache.jackrabbit.oak.spi.sta
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.apache.jackrabbit.oak.stats.Clock;
 import org.junit.After;
-import org.junit.Ignore;
 import org.junit.Test;
 
 import com.google.common.collect.Iterables;
@@ -510,7 +509,6 @@ public class DocumentNodeStoreTest {
     }
 
     // OAK-1972
-    @Ignore
     @Test
     public void readFromPreviousDoc() throws CommitFailedException {
         DocumentStore docStore = new MemoryDocumentStore();