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 2017/12/08 07:25:58 UTC
svn commit: r1817462 - in /jackrabbit/oak/trunk/oak-run/src:
main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/PathElementComparator.java
test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/PathElementComparatorTest.java
Author: chetanm
Date: Fri Dec 8 07:25:58 2017
New Revision: 1817462
URL: http://svn.apache.org/viewvc?rev=1817462&view=rev
Log:
OAK-6353 - Use Document order traversal for reindexing performed on DocumentNodeStore setups
Support for preferred sorting
Modified:
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/PathElementComparator.java
jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/PathElementComparatorTest.java
Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/PathElementComparator.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/PathElementComparator.java?rev=1817462&r1=1817461&r2=1817462&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/PathElementComparator.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/PathElementComparator.java Fri Dec 8 07:25:58 2017
@@ -19,17 +19,31 @@
package org.apache.jackrabbit.oak.index.indexer.document.flatfile;
+import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
+import java.util.Set;
+
+import com.google.common.collect.ImmutableSet;
public class PathElementComparator implements Comparator<Iterable<String>> {
+ private final Set<String> preferred;
+
+ public PathElementComparator() {
+ this(Collections.emptySet());
+ }
+
+ public PathElementComparator(Iterable<String> preferredPathElements) {
+ this.preferred = ImmutableSet.copyOf(preferredPathElements);
+ }
+
@Override
public int compare(Iterable<String> p1, Iterable<String> p2) {
Iterator<String> i1 = p1.iterator();
Iterator<String> i2 = p2.iterator();
//Shorter paths come first i.e. first parent then children
- //TODO Rank jcr:content higher i.e. first child
+ //Also Rank jcr:content higher i.e. first child
while (i1.hasNext() || i2.hasNext()) {
if (!i1.hasNext()) {
return -1;
@@ -37,7 +51,22 @@ public class PathElementComparator imple
if (!i2.hasNext()) {
return 1;
}
- int compare = i1.next().compareTo(i2.next());
+
+ String pe1 = i1.next();
+ String pe2 = i2.next();
+
+ boolean pe1Preferred = preferred.contains(pe1);
+ boolean pe2Preferred = preferred.contains(pe2);
+
+ if (pe1Preferred && !pe2Preferred) {
+ return -1;
+ }
+
+ if (pe2Preferred && !pe1Preferred) {
+ return 1;
+ }
+
+ int compare = pe1.compareTo(pe2);
if (compare != 0) {
return compare;
}
Modified: jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/PathElementComparatorTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/PathElementComparatorTest.java?rev=1817462&r1=1817461&r2=1817462&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/PathElementComparatorTest.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/PathElementComparatorTest.java Fri Dec 8 07:25:58 2017
@@ -26,6 +26,7 @@ import java.util.List;
import java.util.stream.Collectors;
import com.google.common.base.Joiner;
+import com.google.common.collect.ImmutableList;
import org.apache.jackrabbit.oak.commons.PathUtils;
import org.junit.Test;
@@ -44,15 +45,30 @@ public class PathElementComparatorTest {
public void sort2() {
assertSorted(asList("/a", "/a/b", "/a/b/c", "/d", "/e/f", "/g"));
assertSorted(asList("/", "/a", "/a/b", "/a/b/c", "/d", "/e/f", "/g"));
+ assertSorted(asList("/", "/a", "/a/b", "/a/b/b", "/a/b/c", "/d", "/e/f", "/g"));
+ assertSorted(asList("/", "/a", "/a/b", "/a/b/bc", "/a/b/c", "/d", "/e/f", "/g"));
//Duplicates
assertSorted(asList("/", "/a", "/a", "/a/b", "/a/b/c", "/d", "/e/f", "/g"));
}
+ @Test
+ public void preferredElements() throws Exception{
+ PathElementComparator c = new PathElementComparator(asList("jcr:content"));
+ assertEquals(asList("/a", "/a/jcr:content", "/a/b"), sortPaths(asList("/a/jcr:content", "/a/b", "/a"), c));
+
+ assertSorted(asList("/a", "/a/jcr:content", "/a/b"),c);
+ assertSorted(asList("/a", "/a/jcr:content", "/a/b", "/a/b/c", "/d", "/e/f", "/g"), c);
+ }
+
private void assertSorted(List<String> sorted) {
+ assertSorted(sorted, new PathElementComparator());
+ }
+
+ private void assertSorted(List<String> sorted, Comparator<Iterable<String>> comparator) {
List<String> copy = new ArrayList<>(sorted);
Collections.shuffle(copy);
- List<String> sortedNew = sortPaths(copy);
+ List<String> sortedNew = sortPaths(copy, comparator);
assertEquals(sorted, sortedNew);
}
@@ -61,7 +77,8 @@ public class PathElementComparatorTest {
}
private List<String> sortPaths(List<String> paths, Comparator<Iterable<String>> comparator) {
- List<Iterable<String>> copy = paths.stream().map(PathUtils::elements).sorted(comparator).collect(Collectors.toList());
+ List<Iterable<String>> copy = paths.stream().map(p -> ImmutableList.copyOf(PathUtils.elements(p)))
+ .sorted(comparator).collect(Collectors.toList());
Joiner j = Joiner.on('/');
return copy.stream().map(e -> "/" + j.join(e)).collect(Collectors.toList());
}