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/23 14:45:05 UTC
svn commit: r1535004 - in /jackrabbit/oak/trunk:
oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/
oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/mongomk/ oak-jcr/
Author: mreutegg
Date: Wed Oct 23 12:45:04 2013
New Revision: 1535004
URL: http://svn.apache.org/r1535004
Log:
OAK-1107: MongoMK may not detect changes with diffManyChildren()
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoMK.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/UnsavedModifications.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoMKDiffTest.java
jackrabbit/oak/trunk/oak-jcr/pom.xml
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=1535004&r1=1535003&r2=1535004&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 Wed Oct 23 12:45:04 2013
@@ -18,7 +18,6 @@ package org.apache.jackrabbit.oak.plugin
import java.io.InputStream;
import java.util.HashSet;
-import java.util.List;
import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
@@ -250,11 +249,23 @@ public class MongoMK implements MicroKer
long minValue = Commit.getModified(minTimestamp);
String fromKey = Utils.getKeyLowerLimit(path);
String toKey = Utils.getKeyUpperLimit(path);
- List<NodeDocument> list = store.query(Collection.NODES, fromKey, toKey,
- NodeDocument.MODIFIED, minValue, Integer.MAX_VALUE);
- for (NodeDocument doc : list) {
- String id = doc.getId();
- String p = Utils.getPathFromId(id);
+ Set<String> paths = new HashSet<String>();
+ for (NodeDocument doc : store.query(Collection.NODES, fromKey, toKey,
+ NodeDocument.MODIFIED, minValue, Integer.MAX_VALUE)) {
+ paths.add(Utils.getPathFromId(doc.getId()));
+ }
+ // 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);
+ }
+ }
+ for (String p : paths) {
Node fromNode = nodeStore.getNode(p, fromRev);
Node toNode = nodeStore.getNode(p, toRev);
if (fromNode != null) {
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/UnsavedModifications.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/UnsavedModifications.java?rev=1535004&r1=1535003&r2=1535004&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/UnsavedModifications.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/UnsavedModifications.java Wed Oct 23 12:45:04 2013
@@ -17,11 +17,17 @@
package org.apache.jackrabbit.oak.plugins.mongomk;
import java.util.Collection;
+import java.util.Collections;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
import static com.google.common.base.Preconditions.checkNotNull;
@@ -95,4 +101,31 @@ class UnsavedModifications {
other.put(entry.getKey(), mergeCommit);
}
}
+
+ /**
+ * Returns all paths of nodes with modifications at the start revision
+ * (inclusive) or later.
+ *
+ * @param start the start revision (inclusive).
+ * @return matching paths with pending modifications.
+ */
+ @Nonnull
+ public Iterable<String> getPaths(@Nonnull final Revision start) {
+ if (map.isEmpty()) {
+ return Collections.emptyList();
+ } else {
+ return Iterables.transform(Iterables.filter(map.entrySet(),
+ new Predicate<Map.Entry<String, Revision>>() {
+ @Override
+ public boolean apply(Map.Entry<String, Revision> input) {
+ return start.compareRevisionTime(input.getValue()) < 1;
+ }
+ }), new Function<Map.Entry<String, Revision>, String>() {
+ @Override
+ public String apply(Map.Entry<String, Revision> input) {
+ return input.getKey();
+ }
+ });
+ }
+ }
}
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=1535004&r1=1535003&r2=1535004&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 Wed Oct 23 12:45:04 2013
@@ -250,14 +250,13 @@ public class MongoMKDiffTest extends Abs
}
@Test
- @Ignore
public void diffForChangeBelowManyChildren() throws InterruptedException {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < MongoMK.MANY_CHILDREN_THRESHOLD * 2; i++) {
sb.append("+\"node-").append(i).append("\":{}");
}
mk.commit("/", sb.toString(), null, null);
- // wait a while, _modified has 5 seconds granularity
+ // wait a while, _modified has 5 seconds resolution
Thread.sleep(TimeUnit.SECONDS.toMillis(6));
// create a base commit for the diff
String base = mk.commit("/", "+\"foo\":{}", null, null);
Modified: jackrabbit/oak/trunk/oak-jcr/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/pom.xml?rev=1535004&r1=1535003&r2=1535004&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-jcr/pom.xml Wed Oct 23 12:45:04 2013
@@ -80,7 +80,6 @@
org.apache.jackrabbit.test.api.observation.GetIdentifierTest#testNodeMoved
org.apache.jackrabbit.test.api.observation.LockingTest#testAddLockToNode
org.apache.jackrabbit.test.api.observation.LockingTest#testRemoveLockFromNode
- org.apache.jackrabbit.test.api.observation.GetUserDataTest#testVersioning
<!-- Versioning -->
org.apache.jackrabbit.test.api.version.VersionTest#testUpdate