Author: thomasm
Date: Mon Aug 31 12:57:48 2020
New Revision: 1881341
URL: http://svn.apache.org/viewvc?rev=1881341&view=rev
Log:
OAK-9184 Very slow, potential endless loop in LucenePropertyIndex.loadDocs()
Modified:
jackrabbit/oak/branches/1.22/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java
Modified:
jackrabbit/oak/branches/1.22/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.22/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java?rev=1881341&r1=1881340&r2=1881341&view=diff
==============================================================================
---
jackrabbit/oak/branches/1.22/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java
(original)
+++
jackrabbit/oak/branches/1.22/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java
Mon Aug 31 12:57:48 2020
@@ -193,7 +193,8 @@ import static org.apache.lucene.search.B
*/
public class LucenePropertyIndex extends FulltextIndex {
-
+ private final static long LOAD_DOCS_WARN =
Long.getLong("oak.lucene.loadDocsWarn", 30 * 1000L);
+ private final static long LOAD_DOCS_STOP =
Long.getLong("oak.lucene.loadDocsStop", 3 * 60 * 1000L);
private static boolean NON_LAZY =
Boolean.parseBoolean(System.getProperty("oak.lucene.nonLazyIndex","true"));
public final static String OLD_FACET_PROVIDER_CONFIG_NAME =
"oak.lucene.oldFacetProvider";
private final static boolean OLD_FACET_PROVIDER =
Boolean.getBoolean(OLD_FACET_PROVIDER_CONFIG_NAME);
@@ -360,7 +361,18 @@ public class LucenePropertyIndex extends
TopDocs docs;
long start = PERF_LOGGER.start();
- while (true) {
+ long startLoop = System.currentTimeMillis();
+ for (int repeated = 0;; repeated++) {
+ if (repeated > 0) {
+ long now = System.currentTimeMillis();
+ if (now > startLoop + LOAD_DOCS_WARN) {
+ LOG.warn("loadDocs lastDoc {} repeated {}
times for query {}", lastDoc, repeated, query);
+ if (repeated > 1 && now > startLoop +
LOAD_DOCS_STOP) {
+ LOG.error("loadDocs stops", new
Exception());
+ break;
+ }
+ }
+ }
if (lastDoc != null) {
LOG.debug("loading the next {} entries for
query {}", nextBatchSize, query);
if (sort == null) {