From a7a6adfa3423f5d3645152908f7ea2eae1626d53 Mon Sep 17 00:00:00 2001 From: jendib Date: Tue, 1 Mar 2016 01:24:26 +0100 Subject: [PATCH] #62: Rebuild index if too old or corrupted --- .../docs/core/service/IndexingService.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) 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 0ecf95b2..535fc26e 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 @@ -4,11 +4,15 @@ import java.io.IOException; import java.nio.file.Path; import java.util.concurrent.TimeUnit; +import org.apache.lucene.index.CheckIndex; +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.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; @@ -64,6 +68,26 @@ public class IndexingService extends AbstractScheduledService { 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)) { + RebuildIndexAsyncEvent rebuildIndexAsyncEvent = new RebuildIndexAsyncEvent(); + AppContext.getInstance().getAsyncEventBus().post(rebuildIndexAsyncEvent); + break; + } + } + } else { + RebuildIndexAsyncEvent rebuildIndexAsyncEvent = new RebuildIndexAsyncEvent(); + AppContext.getInstance().getAsyncEventBus().post(rebuildIndexAsyncEvent); + } + } catch (IOException e) { + log.error("Error checking index", e); + } } @Override