From 59682b5ba663cbc094279a3a18c76ecac2732d7b Mon Sep 17 00:00:00 2001 From: jendib Date: Tue, 1 Mar 2016 23:52:15 +0100 Subject: [PATCH] Closes #62: logs for index checking, explicit commit on close --- docs-core/pom.xml | 6 ++++ .../docs/core/service/IndexingService.java | 32 +++++++++++-------- .../sismics/docs/core/util/LuceneUtil.java | 5 ++- docs-parent/pom.xml | 6 ++++ 4 files changed, 35 insertions(+), 14 deletions(-) diff --git a/docs-core/pom.xml b/docs-core/pom.xml index 9e12d3fb..ed0673dc 100644 --- a/docs-core/pom.xml +++ b/docs-core/pom.xml @@ -93,6 +93,12 @@ lucene-queryparser + + + org.apache.lucene + lucene-backward-codecs + + org.imgscalr imgscalr-lib diff --git a/docs-core/src/main/java/com/sismics/docs/core/service/IndexingService.java b/docs-core/src/main/java/com/sismics/docs/core/service/IndexingService.java index 535fc26e..7f7fbeed 100644 --- a/docs-core/src/main/java/com/sismics/docs/core/service/IndexingService.java +++ b/docs-core/src/main/java/com/sismics/docs/core/service/IndexingService.java @@ -9,9 +9,9 @@ import org.apache.lucene.index.CheckIndex.Status; import org.apache.lucene.index.CheckIndex.Status.SegmentInfoStatus; import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.store.Directory; +import org.apache.lucene.store.NoLockFactory; import org.apache.lucene.store.RAMDirectory; import org.apache.lucene.store.SimpleFSDirectory; -import org.apache.lucene.store.SingleInstanceLockFactory; import org.apache.lucene.util.Version; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -63,29 +63,35 @@ public class IndexingService extends AbstractScheduledService { Path luceneDirectory = DirectoryUtil.getLuceneDirectory(); log.info("Using file Lucene storage: {}", luceneDirectory); try { - directory = new SimpleFSDirectory(luceneDirectory, new SingleInstanceLockFactory()); + directory = new SimpleFSDirectory(luceneDirectory, NoLockFactory.INSTANCE); } catch (IOException e) { log.error("Error initializing Lucene index", e); } } // Check index version and rebuild it if necessary - log.info("Checking index health and version"); - try (CheckIndex checkIndex = new CheckIndex(directory)) { - Status status = checkIndex.checkIndex(); - if (status.clean) { - for (SegmentInfoStatus segmentInfo : status.segmentInfos) { - if (!segmentInfo.version.onOrAfter(Version.LATEST)) { + try { + if (DirectoryReader.indexExists(directory)) { + log.info("Checking index health and version"); + try (CheckIndex checkIndex = new CheckIndex(directory)) { + Status status = checkIndex.checkIndex(); + if (status.clean) { + for (SegmentInfoStatus segmentInfo : status.segmentInfos) { + if (!segmentInfo.version.onOrAfter(Version.LATEST)) { + log.info("Index is old (" + segmentInfo.version + "), rebuilding"); + RebuildIndexAsyncEvent rebuildIndexAsyncEvent = new RebuildIndexAsyncEvent(); + AppContext.getInstance().getAsyncEventBus().post(rebuildIndexAsyncEvent); + break; + } + } + } else { + log.info("Index is dirty, rebuilding"); RebuildIndexAsyncEvent rebuildIndexAsyncEvent = new RebuildIndexAsyncEvent(); AppContext.getInstance().getAsyncEventBus().post(rebuildIndexAsyncEvent); - break; } } - } else { - RebuildIndexAsyncEvent rebuildIndexAsyncEvent = new RebuildIndexAsyncEvent(); - AppContext.getInstance().getAsyncEventBus().post(rebuildIndexAsyncEvent); } - } catch (IOException e) { + } catch (Exception e) { log.error("Error checking index", e); } } diff --git a/docs-core/src/main/java/com/sismics/docs/core/util/LuceneUtil.java b/docs-core/src/main/java/com/sismics/docs/core/util/LuceneUtil.java index 9fcb977f..2754c533 100644 --- a/docs-core/src/main/java/com/sismics/docs/core/util/LuceneUtil.java +++ b/docs-core/src/main/java/com/sismics/docs/core/util/LuceneUtil.java @@ -33,6 +33,9 @@ public class LuceneUtil { // Standard analyzer IndexWriterConfig config = new IndexWriterConfig(new StandardAnalyzer()); + // Automatically commit when closing this writer + config.setCommitOnClose(true); + // Merge sequentially, because Lucene writing is already done asynchronously config.setMergeScheduler(new SerialMergeScheduler()); @@ -59,7 +62,7 @@ public class LuceneUtil { try { indexWriter.close(); } catch (IOException e) { - log.error("Cannot close IndexWriter", e); + log.error("Cannot commit and close IndexWriter", e); } } diff --git a/docs-parent/pom.xml b/docs-parent/pom.xml index 54ee0aa2..c90ce97c 100644 --- a/docs-parent/pom.xml +++ b/docs-parent/pom.xml @@ -339,6 +339,12 @@ ${org.apache.lucene.version} + + org.apache.lucene + lucene-backward-codecs + ${org.apache.lucene.version} + + org.imgscalr imgscalr-lib