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;
 					}