Closes #62: logs for index checking, explicit commit on close

This commit is contained in:
jendib 2016-03-01 23:52:15 +01:00
parent a7a6adfa34
commit 59682b5ba6
4 changed files with 35 additions and 14 deletions

View File

@ -93,6 +93,12 @@
<artifactId>lucene-queryparser</artifactId> <artifactId>lucene-queryparser</artifactId>
</dependency> </dependency>
<!-- Only there to read old index and rebuild them -->
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-backward-codecs</artifactId>
</dependency>
<dependency> <dependency>
<groupId>org.imgscalr</groupId> <groupId>org.imgscalr</groupId>
<artifactId>imgscalr-lib</artifactId> <artifactId>imgscalr-lib</artifactId>

View File

@ -9,9 +9,9 @@ import org.apache.lucene.index.CheckIndex.Status;
import org.apache.lucene.index.CheckIndex.Status.SegmentInfoStatus; import org.apache.lucene.index.CheckIndex.Status.SegmentInfoStatus;
import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.store.Directory; import org.apache.lucene.store.Directory;
import org.apache.lucene.store.NoLockFactory;
import org.apache.lucene.store.RAMDirectory; import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.store.SimpleFSDirectory; import org.apache.lucene.store.SimpleFSDirectory;
import org.apache.lucene.store.SingleInstanceLockFactory;
import org.apache.lucene.util.Version; import org.apache.lucene.util.Version;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -63,29 +63,35 @@ public class IndexingService extends AbstractScheduledService {
Path luceneDirectory = DirectoryUtil.getLuceneDirectory(); Path luceneDirectory = DirectoryUtil.getLuceneDirectory();
log.info("Using file Lucene storage: {}", luceneDirectory); log.info("Using file Lucene storage: {}", luceneDirectory);
try { try {
directory = new SimpleFSDirectory(luceneDirectory, new SingleInstanceLockFactory()); directory = new SimpleFSDirectory(luceneDirectory, NoLockFactory.INSTANCE);
} catch (IOException e) { } catch (IOException e) {
log.error("Error initializing Lucene index", e); log.error("Error initializing Lucene index", e);
} }
} }
// Check index version and rebuild it if necessary // Check index version and rebuild it if necessary
try {
if (DirectoryReader.indexExists(directory)) {
log.info("Checking index health and version"); log.info("Checking index health and version");
try (CheckIndex checkIndex = new CheckIndex(directory)) { try (CheckIndex checkIndex = new CheckIndex(directory)) {
Status status = checkIndex.checkIndex(); Status status = checkIndex.checkIndex();
if (status.clean) { if (status.clean) {
for (SegmentInfoStatus segmentInfo : status.segmentInfos) { for (SegmentInfoStatus segmentInfo : status.segmentInfos) {
if (!segmentInfo.version.onOrAfter(Version.LATEST)) { if (!segmentInfo.version.onOrAfter(Version.LATEST)) {
log.info("Index is old (" + segmentInfo.version + "), rebuilding");
RebuildIndexAsyncEvent rebuildIndexAsyncEvent = new RebuildIndexAsyncEvent(); RebuildIndexAsyncEvent rebuildIndexAsyncEvent = new RebuildIndexAsyncEvent();
AppContext.getInstance().getAsyncEventBus().post(rebuildIndexAsyncEvent); AppContext.getInstance().getAsyncEventBus().post(rebuildIndexAsyncEvent);
break; break;
} }
} }
} else { } else {
log.info("Index is dirty, rebuilding");
RebuildIndexAsyncEvent rebuildIndexAsyncEvent = new RebuildIndexAsyncEvent(); RebuildIndexAsyncEvent rebuildIndexAsyncEvent = new RebuildIndexAsyncEvent();
AppContext.getInstance().getAsyncEventBus().post(rebuildIndexAsyncEvent); AppContext.getInstance().getAsyncEventBus().post(rebuildIndexAsyncEvent);
} }
} catch (IOException e) { }
}
} catch (Exception e) {
log.error("Error checking index", e); log.error("Error checking index", e);
} }
} }

View File

@ -33,6 +33,9 @@ public class LuceneUtil {
// Standard analyzer // Standard analyzer
IndexWriterConfig config = new IndexWriterConfig(new StandardAnalyzer()); IndexWriterConfig config = new IndexWriterConfig(new StandardAnalyzer());
// Automatically commit when closing this writer
config.setCommitOnClose(true);
// Merge sequentially, because Lucene writing is already done asynchronously // Merge sequentially, because Lucene writing is already done asynchronously
config.setMergeScheduler(new SerialMergeScheduler()); config.setMergeScheduler(new SerialMergeScheduler());
@ -59,7 +62,7 @@ public class LuceneUtil {
try { try {
indexWriter.close(); indexWriter.close();
} catch (IOException e) { } catch (IOException e) {
log.error("Cannot close IndexWriter", e); log.error("Cannot commit and close IndexWriter", e);
} }
} }

View File

@ -339,6 +339,12 @@
<version>${org.apache.lucene.version}</version> <version>${org.apache.lucene.version}</version>
</dependency> </dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-backward-codecs</artifactId>
<version>${org.apache.lucene.version}</version>
</dependency>
<dependency> <dependency>
<groupId>org.imgscalr</groupId> <groupId>org.imgscalr</groupId>
<artifactId>imgscalr-lib</artifactId> <artifactId>imgscalr-lib</artifactId>