Index: oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/NodeStoreTest.java =================================================================== --- oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/NodeStoreTest.java (revision 1494108) +++ oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/NodeStoreTest.java (working copy) @@ -229,8 +229,6 @@ @Test public void manyChildNodes() throws CommitFailedException { - // OAK-872 - Assume.assumeTrue(fixture != NodeStoreFixture.MONGO_MK); NodeStoreBranch branch = store.branch(); NodeBuilder root = branch.getHead().builder(); NodeBuilder parent = root.child("parent"); @@ -334,8 +332,6 @@ @Test public void compareAgainstBaseState100() throws CommitFailedException { - // OAK-872 - Assume.assumeTrue(fixture != NodeStoreFixture.MONGO_MK); compareAgainstBaseState(KernelNodeState.MAX_CHILD_NODE_NAMES); } Index: oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/MongoMK.java =================================================================== --- oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/MongoMK.java (revision 1494108) +++ oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/MongoMK.java (working copy) @@ -852,7 +852,25 @@ } String id = e.get(UpdateOp.ID).toString(); String p = Utils.getPathFromId(id); - w.tag('^').key(p).object().endObject().newline(); + if (getNode(p, fromRev) != null) { + // exists in fromRev + if (getNode(p, toRev) != null) { + // exists in both revisions + w.tag('^').key(p).object().endObject().newline(); + } else { + // does not exist in toRev -> was removed + w.tag('-').value(p).newline(); + } + } else { + // does not exist in fromRev + if (getNode(p, toRev) != null) { + // exists in toRev + w.tag('+').key(p).object().endObject().newline(); + } else { + // does not exist in either revisions + // -> do nothing + } + } } } Index: oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/MongoMKDiffTest.java =================================================================== --- oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/MongoMKDiffTest.java (revision 1494108) +++ oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/MongoMKDiffTest.java (working copy) @@ -246,4 +246,22 @@ obj = parseJSONObject(mk.getNodes("/level1", null, 0, 0, -1, null)); assertPropertyValue(obj, "prop1", "value1"); } + + @Test + public void diffManyChildren() { + String baseRev = mk.getHeadRevision(); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < MongoMK.MANY_CHILDREN_THRESHOLD * 2; i++) { + sb.append("+\"node-").append(i).append("\":{}"); + } + String rev = mk.commit("/", sb.toString(), null, null); + String jsop = mk.diff(baseRev, rev, "/", 0); + for (int i = 0; i < MongoMK.MANY_CHILDREN_THRESHOLD * 2; i++) { + assertTrue(jsop.contains("+\"/node-" + i + "\"")); + } + jsop = mk.diff(rev, baseRev, "/", 0); + for (int i = 0; i < MongoMK.MANY_CHILDREN_THRESHOLD * 2; i++) { + assertTrue(jsop.contains("-\"/node-" + i + "\"")); + } + } } \ No newline at end of file