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 ch...@apache.org on 2018/01/05 10:50:47 UTC
svn commit: r1820278 - in /jackrabbit/oak/trunk/oak-run/src:
main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/
test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/
Author: chetanm
Date: Fri Jan 5 10:50:46 2018
New Revision: 1820278
URL: http://svn.apache.org/viewvc?rev=1820278&view=rev
Log:
OAK-7123 - ChildNodeStateProvider does not return all immediate children
Modified:
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/ChildNodeStateProvider.java
jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/ChildNodeStateProviderTest.java
Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/ChildNodeStateProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/ChildNodeStateProvider.java?rev=1820278&r1=1820277&r2=1820278&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/ChildNodeStateProvider.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/ChildNodeStateProvider.java Fri Jan 5 10:50:46 2018
@@ -39,6 +39,7 @@ import static com.google.common.collect.
import static java.util.Collections.emptyIterator;
import static org.apache.jackrabbit.oak.commons.PathUtils.getName;
import static org.apache.jackrabbit.oak.commons.PathUtils.getParentPath;
+import static org.apache.jackrabbit.oak.commons.PathUtils.isAncestor;
import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.MISSING_NODE;
class ChildNodeStateProvider {
@@ -94,15 +95,19 @@ class ChildNodeStateProvider {
"Did not found path [%s] in leftover iterator. Possibly node state accessed " +
"after main iterator has moved past it", path);
- return new AbstractIterator<NodeStateEntry>() {
+ //Prepare an iterator to fetch all child node paths i.e. immediate and there children
+ Iterator<NodeStateEntry> itr = new AbstractIterator<NodeStateEntry>() {
@Override
protected NodeStateEntry computeNext() {
- if (pitr.hasNext() && isImmediateChild(pitr.peek().getPath())) {
+ if (pitr.hasNext() && isAncestor(path, pitr.peek().getPath())) {
return pitr.next();
}
return endOfData();
}
};
+
+ //Filter out non immediate children
+ return Iterators.filter(itr, (e) -> isImmediateChild(e.getPath()));
}
private static String name(NodeStateEntry p) {
Modified: jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/ChildNodeStateProviderTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/ChildNodeStateProviderTest.java?rev=1820278&r1=1820277&r2=1820278&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/ChildNodeStateProviderTest.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/ChildNodeStateProviderTest.java Fri Jan 5 10:50:46 2018
@@ -81,12 +81,12 @@ public class ChildNodeStateProviderTest
ChildNodeStateProvider p = new ChildNodeStateProvider(citr, "/a", 100);
assertEquals(singletonList("b"), copyOf(childNames(p.children())));
- assertEquals(3, citr.getCount());
+ assertEquals(5, citr.getCount());
citr.reset();
p = new ChildNodeStateProvider(citr, "/a/b", 100);
assertEquals(singletonList("c"), copyOf(childNames(p.children())));
- assertEquals(4, citr.getCount());
+ assertEquals(5, citr.getCount());
p = new ChildNodeStateProvider(citr, "/a/b/c", 100);
assertEquals(singletonList("d"), copyOf(childNames(p.children())));
@@ -129,6 +129,17 @@ public class ChildNodeStateProviderTest
}
@Test
+ public void childNames2() {
+ Set<String> preferred = ImmutableSet.of("jcr:content");
+ CountingIterable<NodeStateEntry> citr = createList(preferred, asList("/a", "/a/jcr:content", "/a/jcr:content/metadata",
+ "/a/c", "/a/c/status","/a/d", "/e", "/e/f"));
+ ChildNodeStateProvider p = new ChildNodeStateProvider(citr, "/a", 100);
+
+ assertEquals(asList("jcr:content", "c", "d"), copyOf(childNames(p.children())));
+ assertEquals(7, citr.getCount());
+ }
+
+ @Test
public void childEntries() {
Set<String> preferred = ImmutableSet.of("jcr:content");
CountingIterable<NodeStateEntry> citr = createList(preferred, asList("/a", "/a/jcr:content", "/a/c", "/a/d", "/e", "/e/f"));