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 th...@apache.org on 2017/10/27 14:54:44 UTC
svn commit: r1813541 - in /jackrabbit/oak/trunk:
oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/
oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/
Author: thomasm
Date: Fri Oct 27 14:54:43 2017
New Revision: 1813541
URL: http://svn.apache.org/viewvc?rev=1813541&view=rev
Log:
OAK-6875 Lucene index: the query read limit is ignored
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/Cursors.java
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndex.java
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/Cursors.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/Cursors.java?rev=1813541&r1=1813540&r2=1813541&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/Cursors.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/Cursors.java Fri Oct 27 14:54:43 2017
@@ -59,6 +59,14 @@ public class Cursors {
private Cursors() {
}
+ public static void checkMemoryLimit(long count, QueryLimits settings) {
+ FilterIterators.checkMemoryLimit(count, settings);
+ }
+
+ public static void checkReadLimit(long count, QueryLimits settings) {
+ FilterIterators.checkReadLimit(count, settings);
+ }
+
public static Cursor newIntersectionCursor(Cursor a, Cursor b, QueryLimits settings) {
return new IntersectionCursor(a, b, settings);
}
Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndex.java?rev=1813541&r1=1813540&r2=1813541&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndex.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndex.java Fri Oct 27 14:54:43 2017
@@ -48,6 +48,7 @@ import org.apache.jackrabbit.oak.spi.que
import org.apache.jackrabbit.oak.spi.query.fulltext.FullTextTerm;
import org.apache.jackrabbit.oak.spi.query.fulltext.FullTextVisitor;
import org.apache.jackrabbit.oak.spi.query.Cursor;
+import org.apache.jackrabbit.oak.plugins.index.Cursors;
import org.apache.jackrabbit.oak.plugins.index.Cursors.PathCursor;
import org.apache.jackrabbit.oak.spi.query.Filter;
import org.apache.jackrabbit.oak.spi.query.Filter.PropertyRestriction;
@@ -62,11 +63,9 @@ import org.apache.lucene.analysis.TokenS
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.apache.lucene.analysis.tokenattributes.OffsetAttribute;
import org.apache.lucene.document.Document;
-import org.apache.lucene.index.FieldInfo;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexableField;
import org.apache.lucene.index.MultiFields;
-import org.apache.lucene.index.StoredFieldVisitor;
import org.apache.lucene.index.Term;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
@@ -101,7 +100,6 @@ import static org.apache.jackrabbit.JcrC
import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE;
import static org.apache.jackrabbit.oak.api.Type.STRING;
import static org.apache.jackrabbit.oak.commons.PathUtils.*;
-import static org.apache.jackrabbit.oak.plugins.index.lucene.FieldNames.PATH;
import static org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.VERSION;
import static org.apache.jackrabbit.oak.plugins.index.lucene.TermFactory.newFulltextTerm;
import static org.apache.jackrabbit.oak.plugins.index.lucene.TermFactory.newPathTerm;
@@ -499,7 +497,7 @@ public class LuceneIndex implements Adva
return -1;
}
};
- return new LucenePathCursor(itr, settings, sizeEstimator);
+ return new LucenePathCursor(itr, settings, sizeEstimator, filter);
}
private String getExcerpt(Analyzer analyzer, IndexSearcher searcher, ScoreDoc doc) throws IOException {
@@ -1123,15 +1121,20 @@ public class LuceneIndex implements Adva
*/
static class LucenePathCursor implements Cursor {
+ private static final int TRAVERSING_WARNING = Integer.getInteger("oak.traversing.warning", 10000);
+
private final Cursor pathCursor;
LuceneResultRow currentRow;
private final SizeEstimator sizeEstimator;
private long estimatedSize;
- LucenePathCursor(final Iterator<LuceneResultRow> it, QueryLimits settings, SizeEstimator sizeEstimator) {
+ LucenePathCursor(final Iterator<LuceneResultRow> it, QueryLimits settings, SizeEstimator sizeEstimator, Filter filter) {
this.sizeEstimator = sizeEstimator;
+
Iterator<String> pathIterator = new Iterator<String>() {
+ private int readCount;
+
@Override
public boolean hasNext() {
return it.hasNext();
@@ -1140,6 +1143,11 @@ public class LuceneIndex implements Adva
@Override
public String next() {
currentRow = it.next();
+ readCount++;
+ if (readCount % TRAVERSING_WARNING == 0) {
+ Cursors.checkReadLimit(readCount, settings);
+ LOG.warn("Index-Traversed {} nodes with filter {}", readCount, filter);
+ }
return currentRow.path;
}
Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java?rev=1813541&r1=1813540&r2=1813541&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java Fri Oct 27 14:54:43 2017
@@ -67,6 +67,7 @@ import org.apache.jackrabbit.oak.spi.que
import org.apache.jackrabbit.oak.spi.query.fulltext.FullTextTerm;
import org.apache.jackrabbit.oak.spi.query.fulltext.FullTextVisitor;
import org.apache.jackrabbit.oak.spi.query.Cursor;
+import org.apache.jackrabbit.oak.plugins.index.Cursors;
import org.apache.jackrabbit.oak.plugins.index.Cursors.PathCursor;
import org.apache.jackrabbit.oak.spi.query.Filter;
import org.apache.jackrabbit.oak.spi.query.Filter.PropertyRestriction;
@@ -1640,6 +1641,8 @@ public class LucenePropertyIndex impleme
*/
static class LucenePathCursor implements Cursor {
+ private static final int TRAVERSING_WARNING = Integer.getInteger("oak.traversing.warning", 10000);
+
private final Cursor pathCursor;
private final String pathPrefix;
LuceneResultRow currentRow;
@@ -1652,6 +1655,8 @@ public class LucenePropertyIndex impleme
this.sizeEstimator = sizeEstimator;
Iterator<String> pathIterator = new Iterator<String>() {
+ private int readCount;
+
@Override
public boolean hasNext() {
return it.hasNext();
@@ -1660,6 +1665,11 @@ public class LucenePropertyIndex impleme
@Override
public String next() {
currentRow = it.next();
+ readCount++;
+ if (readCount % TRAVERSING_WARNING == 0) {
+ Cursors.checkReadLimit(readCount, settings);
+ LOG.warn("Index-Traversed {} nodes with filter {}", readCount, plan.getFilter());
+ }
return currentRow.path;
}