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/02/04 16:01:25 UTC

svn commit: r1564331 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java

Author: mreutegg
Date: Tue Feb  4 15:01:25 2014
New Revision: 1564331

URL: http://svn.apache.org/r1564331
Log:
OAK-1384: Background write does not update all _lastRev

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

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java?rev=1564331&r1=1564330&r2=1564331&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java Tue Feb  4 15:01:25 2014
@@ -1323,7 +1323,7 @@ public final class DocumentNodeStore
     }
 
     void backgroundWrite() {
-        if (unsavedLastRevisions.getPaths().size() == 0) {
+        if (unsavedLastRevisions.getPaths().isEmpty()) {
             return;
         }
         ArrayList<String> paths = new ArrayList<String>(unsavedLastRevisions.getPaths());
@@ -1333,10 +1333,11 @@ public final class DocumentNodeStore
         UpdateOp updateOp = null;
         Revision lastRev = null;
         List<String> ids = new ArrayList<String>();
-        for (int i = 0; i < paths.size(); i++) {
+        for (int i = 0; i < paths.size(); ) {
             String p = paths.get(i);
             Revision r = unsavedLastRevisions.get(p);
             if (r == null) {
+                i++;
                 continue;
             }
             int size = ids.size();
@@ -1347,16 +1348,18 @@ public final class DocumentNodeStore
                 updateOp = commit.getUpdateOperationForNode(p);
                 lastRev = r;
                 ids.add(Utils.getIdFromPath(p));
+                i++;
             } else if (r.equals(lastRev)) {
                 // use multi update when possible
                 ids.add(Utils.getIdFromPath(p));
+                i++;
             }
             // call update if any of the following is true:
             // - this is the second-to-last or last path (update last path, the
             //   root document, individually)
             // - revision is not equal to last revision (size of ids didn't change)
             // - the update limit is reached
-            if (i + 2 >= paths.size()
+            if (i + 2 > paths.size()
                     || size == ids.size()
                     || ids.size() >= BACKGROUND_MULTI_UPDATE_LIMIT) {
                 store.update(Collection.NODES, ids, updateOp);