Bug 495055 - Do not check drive type before performing Lucene segments
merge

Change-Id: Ia8e5a1ac0f91742e380a084dd9540b79354b7dca
Signed-off-by: Bartlomiej Laczkowski <bartlomiej.l@zend.com>
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 84e9a5d..da667a3 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,6 +21,7 @@
 import java.util.Map;
 
 import org.apache.lucene.analysis.core.SimpleAnalyzer;
+import org.apache.lucene.index.ConcurrentMergeScheduler;
 import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.index.IndexWriterConfig;
 import org.apache.lucene.index.IndexWriterConfig.OpenMode;
@@ -112,22 +113,32 @@
 				new HashMap<Integer, SearcherManager>());
 	}
 
+	private IndexWriter createIndexWriter(Path path) {
+		IndexWriter indexWriter = null;
+		try {
+			Directory indexDir = new IndexDirectory(path);
+			IndexWriterConfig config = new IndexWriterConfig(
+					new SimpleAnalyzer());
+			ConcurrentMergeScheduler mergeScheduler = new ConcurrentMergeScheduler();
+			mergeScheduler.setDefaultMaxMergesAndThreads(true);
+			config.setMergeScheduler(mergeScheduler);
+			config.setOpenMode(OpenMode.CREATE_OR_APPEND);
+			indexWriter = new IndexWriter(indexDir, config);
+		} catch (IOException e) {
+			Logger.logException(e);
+		}
+		return indexWriter;
+	}
+
 	public final String getId() {
 		return fContainerId;
 	}
 
 	public synchronized IndexWriter getTimestampsWriter() {
 		if (fTimestampsWriter == null) {
-			try {
-				Directory indexDir = new IndexDirectory(
-						Paths.get(fIndexRoot, fContainerId, TIMESTAMPS_DIR));
-				IndexWriterConfig config = new IndexWriterConfig(
-						new SimpleAnalyzer());
-				config.setOpenMode(OpenMode.CREATE_OR_APPEND);
-				fTimestampsWriter = new IndexWriter(indexDir, config);
-			} catch (IOException e) {
-				Logger.logException(e);
-			}
+			Path writerPath = Paths.get(fIndexRoot, fContainerId,
+					TIMESTAMPS_DIR);
+			fTimestampsWriter = createIndexWriter(writerPath);
 		}
 		return fTimestampsWriter;
 	}
@@ -150,18 +161,10 @@
 			int elementType) {
 		IndexWriter writer = fIndexWriters.get(dataType).get(elementType);
 		if (writer == null) {
-			try {
-				Directory indexDir = new IndexDirectory(Paths.get(fIndexRoot,
-						fContainerId, dataType.getDirectory(),
-						String.valueOf(elementType)));
-				IndexWriterConfig config = new IndexWriterConfig(
-						new SimpleAnalyzer());
-				config.setOpenMode(OpenMode.CREATE_OR_APPEND);
-				writer = new IndexWriter(indexDir, config);
-				fIndexWriters.get(dataType).put(elementType, writer);
-			} catch (IOException e) {
-				Logger.logException(e);
-			}
+			Path writerPath = Paths.get(fIndexRoot, fContainerId,
+					dataType.getDirectory(), String.valueOf(elementType));
+			writer = createIndexWriter(writerPath);
+			fIndexWriters.get(dataType).put(elementType, writer);
 		}
 		return writer;
 	}