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 2013/10/24 11:10:18 UTC

svn commit: r1535320 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoMK.java test/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoMKDiffTest.java

Author: mreutegg
Date: Thu Oct 24 09:10:17 2013
New Revision: 1535320

URL: http://svn.apache.org/r1535320
Log:
OAK-1107: MongoMK may not detect changes with diffManyChildren()
- add test for diff in branch and fix remaining issue

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoMK.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoMKDiffTest.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoMK.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoMK.java?rev=1535320&r1=1535319&r2=1535320&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoMK.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoMK.java Thu Oct 24 09:10:17 2013
@@ -254,13 +254,13 @@ public class MongoMK implements MicroKer
         }
         // also consider nodes with not yet stored modifications (OAK-1107)
         Revision minRev = new Revision(minTimestamp, 0, nodeStore.getClusterId());
-        for (String p : nodeStore.getPendingModifications().getPaths(minRev)) {
-            if (PathUtils.denotesRoot(p)) {
-                continue;
-            }
-            String parent = PathUtils.getParentPath(p);
-            if (path.equals(parent)) {
-                paths.add(p);
+        addPathsForDiff(path, paths, nodeStore.getPendingModifications(), minRev);
+        for (Revision r : new Revision[]{fromRev, toRev}) {
+            if (r.isBranch()) {
+                Branch b = nodeStore.getBranches().getBranch(fromRev);
+                if (b != null) {
+                    addPathsForDiff(path, paths, b.getModifications(r), r);
+                }
             }
         }
         for (String p : paths) {
@@ -290,6 +290,21 @@ public class MongoMK implements MicroKer
             }
         }
     }
+
+    private void addPathsForDiff(String path,
+                                 Set<String> paths,
+                                 UnsavedModifications pending,
+                                 Revision minRev) {
+        for (String p : pending.getPaths(minRev)) {
+            if (PathUtils.denotesRoot(p)) {
+                continue;
+            }
+            String parent = PathUtils.getParentPath(p);
+            if (path.equals(parent)) {
+                paths.add(p);
+            }
+        }
+    }
     
     private void diffFewChildren(JsopWriter w, Children fromChildren, Revision fromRev, Children toChildren, Revision toRev) {
         Set<String> childrenSet = new HashSet<String>(toChildren.children);

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoMKDiffTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoMKDiffTest.java?rev=1535320&r1=1535319&r2=1535320&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoMKDiffTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoMKDiffTest.java Thu Oct 24 09:10:17 2013
@@ -255,15 +255,24 @@ public class MongoMKDiffTest extends Abs
         for (int i = 0; i < MongoMK.MANY_CHILDREN_THRESHOLD * 2; i++) {
             sb.append("+\"node-").append(i).append("\":{}");
         }
+        String branchRev = mk.branch(null);
         mk.commit("/", sb.toString(), null, null);
+        branchRev = mk.commit("/", "+\"branch\":{}", branchRev, null);
+        branchRev = mk.commit("/branch", sb.toString(), branchRev, null);
         // wait a while, _modified has 5 seconds resolution
         Thread.sleep(TimeUnit.SECONDS.toMillis(6));
-        // create a base commit for the diff
+        // create a base commits for the diffs
         String base = mk.commit("/", "+\"foo\":{}", null, null);
-        // this is the commit we want to get the diff for
+        branchRev = mk.commit("/branch", "+\"foo\":{}", branchRev, null);
+        String branchBase = branchRev;
+        // these are the commits we want to get the diffs for
         String rev = mk.commit("/node-0", "+\"foo\":{}", null, null);
+        branchRev = mk.commit("/branch/node-0", "+\"foo\":{}", branchRev, null);
+        // perform diffs
         String diff = mk.diff(base, rev, "/", 0);
         assertTrue(diff, diff.contains("^\"/node-0\""));
+        diff = mk.diff(branchBase, branchRev, "/branch", 0);
+        assertTrue(diff, diff.contains("^\"/branch/node-0\""));
     }
 
     @Test