Author: thomasm
Date: Tue Nov 22 13:36:19 2016
New Revision: 1770834
URL: http://svn.apache.org/viewvc?rev=1770834&view=rev
Log:
OAK-4096 Limit the number of times a LuceneResultRow based iterator get reset
Modified:
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndex.java
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=1770834&r1=1770833&r2=1770834&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
Tue Nov 22 13:36:19 2016
@@ -165,6 +165,8 @@ public class LuceneIndex implements Adva
static final boolean USE_PATH_RESTRICTION =
Boolean.getBoolean("oak.luceneUsePath");
+ static final int MAX_RELOAD_COUNT =
Integer.getInteger("oak.luceneMaxReloadCount", 16);
+
protected final IndexTracker tracker;
private final NodeAggregator aggregator;
@@ -289,6 +291,7 @@ public class LuceneIndex implements Adva
private int nextBatchSize = LUCENE_QUERY_BATCH_SIZE;
private boolean noDocs = false;
private long lastSearchIndexerVersion;
+ private int reloadCount;
@Override
protected LuceneResultRow computeNext() {
@@ -457,9 +460,16 @@ public class LuceneIndex implements Adva
private void checkForIndexVersionChange(IndexSearcher searcher) {
long currentVersion = LucenePropertyIndex.getVersion(searcher);
if (currentVersion != lastSearchIndexerVersion && lastDoc !=
null){
+ reloadCount++;
+ if (reloadCount > MAX_RELOAD_COUNT) {
+ LOG.error("More than {} index version changes detected
for query {}",
+ MAX_RELOAD_COUNT,
+ plan);
+ throw new IllegalStateException("Too many version
changes");
+ }
lastDoc = null;
LOG.debug("Change in index version detected {} => {}.
Query would be performed without " +
- "offset", currentVersion,
lastSearchIndexerVersion);
+ "offset; reload {}", currentVersion,
lastSearchIndexerVersion, reloadCount);
}
this.lastSearchIndexerVersion = currentVersion;
}