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 2020/08/31 12:46:11 UTC

svn commit: r1881340 - in /jackrabbit/oak/branches/1.8: ./ oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java

Author: thomasm
Date: Mon Aug 31 12:46:11 2020
New Revision: 1881340

URL: http://svn.apache.org/viewvc?rev=1881340&view=rev
Log:
OAK-9184 Very slow, potential endless loop in LucenePropertyIndex.loadDocs()

Modified:
    jackrabbit/oak/branches/1.8/   (props changed)
    jackrabbit/oak/branches/1.8/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java

Propchange: jackrabbit/oak/branches/1.8/
------------------------------------------------------------------------------
  Merged /jackrabbit/oak/trunk:r1881271

Modified: jackrabbit/oak/branches/1.8/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.8/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java?rev=1881340&r1=1881339&r2=1881340&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.8/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java (original)
+++ jackrabbit/oak/branches/1.8/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java Mon Aug 31 12:46:11 2020
@@ -189,6 +189,9 @@ import static org.apache.lucene.search.B
 public class LucenePropertyIndex implements AdvancedQueryIndex, QueryIndex, NativeQueryIndex,
         AdvanceFulltextQueryIndex {
 
+    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 double MIN_COST = 2.1;
 
     private static final Logger LOG = LoggerFactory
@@ -427,7 +430,18 @@ public class LucenePropertyIndex impleme
 
                         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) {