From b213718a72bdc0a7f2eee99eb436ed55ce40184e Mon Sep 17 00:00:00 2001 From: Jim Blake Date: Fri, 6 Feb 2015 15:51:29 -0500 Subject: [PATCH] VIVO-869 A full re-inference invokes a full re-index. IndexingChangeListener is also modified to listen for the beginning of a re-index, and discard any changes it has accumulated. --- .../vitro/webapp/reasoner/ABoxRecomputer.java | 1 + .../searchindex/IndexingChangeListener.java | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/reasoner/ABoxRecomputer.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/reasoner/ABoxRecomputer.java index 80713e4a9..5b82a263e 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/reasoner/ABoxRecomputer.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/reasoner/ABoxRecomputer.java @@ -108,6 +108,7 @@ public class ABoxRecomputer { recomputeABox(); } finally { if (searchIndexer != null) { + searchIndexer.rebuildIndex(); searchIndexer.unpause(); } synchronized (lock1) { diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/searchindex/IndexingChangeListener.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/searchindex/IndexingChangeListener.java index 8f66d6ff7..645115a56 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/searchindex/IndexingChangeListener.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/searchindex/IndexingChangeListener.java @@ -3,6 +3,7 @@ package edu.cornell.mannlib.vitro.webapp.searchindex; import static edu.cornell.mannlib.vitro.webapp.modules.searchIndexer.SearchIndexer.Event.Type.PAUSE; +import static edu.cornell.mannlib.vitro.webapp.modules.searchIndexer.SearchIndexer.Event.Type.START_REBUILD; import static edu.cornell.mannlib.vitro.webapp.modules.searchIndexer.SearchIndexer.Event.Type.UNPAUSE; import java.io.ByteArrayInputStream; @@ -24,6 +25,7 @@ import com.hp.hpl.jena.rdf.model.StmtIterator; import edu.cornell.mannlib.vitro.webapp.dao.jena.event.EditEvent; import edu.cornell.mannlib.vitro.webapp.modules.searchIndexer.SearchIndexer; import edu.cornell.mannlib.vitro.webapp.modules.searchIndexer.SearchIndexer.Event; +import edu.cornell.mannlib.vitro.webapp.modules.searchIndexer.SearchIndexer.Event.Type; import edu.cornell.mannlib.vitro.webapp.rdfservice.ChangeListener; import edu.cornell.mannlib.vitro.webapp.utils.threads.VitroBackgroundThread; @@ -34,6 +36,9 @@ import edu.cornell.mannlib.vitro.webapp.utils.threads.VitroBackgroundThread; * * When the SearchIndexer pauses, stop sending changes until the SearchIndexer * unpauses. + * + * If the SearchIndexer begins a rebuild, discard any changes that we had + * accumulated. They will be accomplished by the rebuild. */ public class IndexingChangeListener implements ChangeListener, SearchIndexer.Listener { @@ -51,7 +56,7 @@ public class IndexingChangeListener implements ChangeListener, this.searchIndexer = searchIndexer; this.ticker = new Ticker(); this.changes = new ArrayList<>(); - + searchIndexer.addListener(this); } @@ -68,7 +73,9 @@ public class IndexingChangeListener implements ChangeListener, paused = true; } else if (event.getType() == UNPAUSE) { paused = false; - respondToTicker(); + ticker.start(); + } else if (event.getType() == START_REBUILD) { + discardChanges(); } } @@ -78,6 +85,10 @@ public class IndexingChangeListener implements ChangeListener, changes.clear(); } } + + private synchronized void discardChanges() { + changes.clear(); + } public void shutdown() { ticker.shutdown();