Support creating Lucene indexes in-memory
Control this with a config option, which is the easiest way to get it injected. Do not document the option as it should just be used for tests. Change-Id: Ic7d5dd5e7a3495079bacc2c2830feb0af1fe6188
This commit is contained in:
@@ -73,6 +73,7 @@ import org.apache.lucene.search.SearcherManager;
|
|||||||
import org.apache.lucene.search.Sort;
|
import org.apache.lucene.search.Sort;
|
||||||
import org.apache.lucene.search.SortField;
|
import org.apache.lucene.search.SortField;
|
||||||
import org.apache.lucene.search.TopDocs;
|
import org.apache.lucene.search.TopDocs;
|
||||||
|
import org.apache.lucene.store.RAMDirectory;
|
||||||
import org.apache.lucene.util.BytesRef;
|
import org.apache.lucene.util.BytesRef;
|
||||||
import org.apache.lucene.util.Version;
|
import org.apache.lucene.util.Version;
|
||||||
import org.eclipse.jgit.errors.ConfigInvalidException;
|
import org.eclipse.jgit.errors.ConfigInvalidException;
|
||||||
@@ -172,10 +173,18 @@ public class LuceneChangeIndex implements ChangeIndex {
|
|||||||
Version luceneVersion = checkNotNull(
|
Version luceneVersion = checkNotNull(
|
||||||
LUCENE_VERSIONS.get(schema),
|
LUCENE_VERSIONS.get(schema),
|
||||||
"unknown Lucene version for index schema: %s", schema);
|
"unknown Lucene version for index schema: %s", schema);
|
||||||
openIndex = new SubIndex(new File(dir, CHANGES_OPEN),
|
|
||||||
getIndexWriterConfig(luceneVersion, cfg, "changes_open"));
|
IndexWriterConfig openConfig =
|
||||||
closedIndex = new SubIndex(new File(dir, CHANGES_CLOSED),
|
getIndexWriterConfig(luceneVersion, cfg, "changes_open");
|
||||||
getIndexWriterConfig(luceneVersion, cfg, "changes_closed"));
|
IndexWriterConfig closedConfig =
|
||||||
|
getIndexWriterConfig(luceneVersion, cfg, "changes_closed");
|
||||||
|
if (cfg.getBoolean("index", "lucene", "testInmemory", false)) {
|
||||||
|
openIndex = new SubIndex(new RAMDirectory(), "ramOpen", openConfig);
|
||||||
|
closedIndex = new SubIndex(new RAMDirectory(), "ramClosed", closedConfig);
|
||||||
|
} else {
|
||||||
|
openIndex = new SubIndex(new File(dir, CHANGES_OPEN), openConfig);
|
||||||
|
closedIndex = new SubIndex(new File(dir, CHANGES_CLOSED), closedConfig);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -53,7 +53,12 @@ class SubIndex {
|
|||||||
private final ConcurrentMap<RefreshListener, Boolean> refreshListeners;
|
private final ConcurrentMap<RefreshListener, Boolean> refreshListeners;
|
||||||
|
|
||||||
SubIndex(File file, IndexWriterConfig writerConfig) throws IOException {
|
SubIndex(File file, IndexWriterConfig writerConfig) throws IOException {
|
||||||
dir = FSDirectory.open(file);
|
this(FSDirectory.open(file), file.getName(), writerConfig);
|
||||||
|
}
|
||||||
|
|
||||||
|
SubIndex(Directory dir, String dirName, IndexWriterConfig writerConfig)
|
||||||
|
throws IOException {
|
||||||
|
this.dir = dir;
|
||||||
writer = new TrackingIndexWriter(new IndexWriter(dir, writerConfig));
|
writer = new TrackingIndexWriter(new IndexWriter(dir, writerConfig));
|
||||||
searcherManager = new SearcherManager(
|
searcherManager = new SearcherManager(
|
||||||
writer.getIndexWriter(), true, new SearcherFactory());
|
writer.getIndexWriter(), true, new SearcherFactory());
|
||||||
@@ -76,7 +81,7 @@ class SubIndex {
|
|||||||
writer, searcherManager,
|
writer, searcherManager,
|
||||||
0.500 /* maximum stale age (seconds) */,
|
0.500 /* maximum stale age (seconds) */,
|
||||||
0.010 /* minimum stale age (seconds) */);
|
0.010 /* minimum stale age (seconds) */);
|
||||||
reopenThread.setName("NRT " + file.getName());
|
reopenThread.setName("NRT " + dirName);
|
||||||
reopenThread.setPriority(Math.min(
|
reopenThread.setPriority(Math.min(
|
||||||
Thread.currentThread().getPriority() + 2,
|
Thread.currentThread().getPriority() + 2,
|
||||||
Thread.MAX_PRIORITY));
|
Thread.MAX_PRIORITY));
|
||||||
|
|||||||
Reference in New Issue
Block a user