Use SerialMergeScheduler and avoid indexer delays
Change-Id: I05ca55ef128cea4690e2e1c1acb50aa79f8a1a2f
Signed-off-by: Dawid Pakuła <zulus@w3des.net>
diff --git a/core/plugins/org.eclipse.dltk.core.index.lucene/src/org/eclipse/dltk/internal/core/index/lucene/IndexContainer.java b/core/plugins/org.eclipse.dltk.core.index.lucene/src/org/eclipse/dltk/internal/core/index/lucene/IndexContainer.java
index 6b966b1..65f1829 100644
--- a/core/plugins/org.eclipse.dltk.core.index.lucene/src/org/eclipse/dltk/internal/core/index/lucene/IndexContainer.java
+++ b/core/plugins/org.eclipse.dltk.core.index.lucene/src/org/eclipse/dltk/internal/core/index/lucene/IndexContainer.java
@@ -21,11 +21,11 @@
import java.util.Map;
import org.apache.lucene.analysis.core.SimpleAnalyzer;
-import org.apache.lucene.index.ConcurrentMergeScheduler;
import org.apache.lucene.index.IndexNotFoundException;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
+import org.apache.lucene.index.SerialMergeScheduler;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.SearcherFactory;
import org.apache.lucene.search.SearcherManager;
@@ -133,10 +133,10 @@
new SingleInstanceLockFactory());
purgeLocks(path);
IndexWriterConfig config = new IndexWriterConfig(new SimpleAnalyzer());
- config.setUseCompoundFile(false);
- ConcurrentMergeScheduler mergeScheduler = new ConcurrentMergeScheduler();
- mergeScheduler.setDefaultMaxMergesAndThreads(true);
- config.setMergeScheduler(mergeScheduler);
+ config.setUseCompoundFile(true);
+ // we already are on separate thread
+ SerialMergeScheduler sheduler = new SerialMergeScheduler();
+ config.setMergeScheduler(sheduler);
config.setOpenMode(OpenMode.CREATE_OR_APPEND);
config.setCommitOnClose(false);
return new IndexWriter(indexDir, config);
@@ -183,7 +183,8 @@
fTimestampsSearcher.maybeRefresh();
}
}
-
+ } else {
+ fTimestampsSearcher.maybeRefresh();
}
} catch (IOException e) {
diff --git a/core/plugins/org.eclipse.dltk.core/search/org/eclipse/dltk/internal/core/search/processing/JobManager.java b/core/plugins/org.eclipse.dltk.core/search/org/eclipse/dltk/internal/core/search/processing/JobManager.java
index 7cb3f93..a36369a 100644
--- a/core/plugins/org.eclipse.dltk.core/search/org/eclipse/dltk/internal/core/search/processing/JobManager.java
+++ b/core/plugins/org.eclipse.dltk.core/search/org/eclipse/dltk/internal/core/search/processing/JobManager.java
@@ -230,9 +230,12 @@
case IJob.WaitUntilReady:
SubMonitor subProgress = subMonitor.setWorkRemaining(10).split(8).setWorkRemaining(1000);
- synchronized (delaySignal) {
- delaySignal.notify();
+ if (ENABLE_DELAYS) {
+ synchronized (delaySignal) {
+ delaySignal.notify();
+ }
}
+
// use local variable to avoid potential NPE (see bug 20435 NPE
// when searchingscriptmethod
// and bug 42760 NullPointerException in JobManager when
@@ -404,8 +407,10 @@
notifyIdle(System.currentTimeMillis() - idlingStart);
// just woke up, delay before processing any new jobs,
// allow some time for the active thread to finish
- synchronized (delaySignal) {
- delaySignal.wait(50);
+ if (ENABLE_DELAYS) {
+ synchronized (delaySignal) {
+ delaySignal.wait(50);
+ }
}
continue;
}