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