VIVO-870 Issue a commit() on each PROGRESS event.
This commit is contained in:
parent
27d3141bb6
commit
8d37fc0d18
2 changed files with 44 additions and 11 deletions
|
@ -2,6 +2,9 @@
|
||||||
|
|
||||||
package edu.cornell.mannlib.vitro.webapp.searchindex;
|
package edu.cornell.mannlib.vitro.webapp.searchindex;
|
||||||
|
|
||||||
|
import static edu.cornell.mannlib.vitro.webapp.modules.searchIndexer.SearchIndexer.Event.Type.PROGRESS;
|
||||||
|
import static edu.cornell.mannlib.vitro.webapp.modules.searchIndexer.SearchIndexer.Event.Type.STOP_PROCESSING_URIS;
|
||||||
|
|
||||||
import javax.servlet.ServletContext;
|
import javax.servlet.ServletContext;
|
||||||
import javax.servlet.ServletContextEvent;
|
import javax.servlet.ServletContextEvent;
|
||||||
import javax.servlet.ServletContextListener;
|
import javax.servlet.ServletContextListener;
|
||||||
|
@ -11,7 +14,11 @@ import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.application.ApplicationUtils;
|
import edu.cornell.mannlib.vitro.webapp.application.ApplicationUtils;
|
||||||
import edu.cornell.mannlib.vitro.webapp.modules.Application;
|
import edu.cornell.mannlib.vitro.webapp.modules.Application;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.modules.searchEngine.SearchEngine;
|
||||||
import edu.cornell.mannlib.vitro.webapp.modules.searchIndexer.SearchIndexer;
|
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.modules.searchIndexer.SearchIndexer.Listener;
|
||||||
import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFServiceException;
|
import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFServiceException;
|
||||||
import edu.cornell.mannlib.vitro.webapp.rdfservice.impl.RDFServiceUtils;
|
import edu.cornell.mannlib.vitro.webapp.rdfservice.impl.RDFServiceUtils;
|
||||||
import edu.cornell.mannlib.vitro.webapp.search.controller.IndexController;
|
import edu.cornell.mannlib.vitro.webapp.search.controller.IndexController;
|
||||||
|
@ -23,8 +30,13 @@ import edu.cornell.mannlib.vitro.webapp.utils.developer.listeners.DeveloperDisab
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Start the SearchIndexer. Create a listener on the RDFService and link it to
|
* Start the SearchIndexer. Create a listener on the RDFService and link it to
|
||||||
* the indexer. Create a history object as a listener and make it avaiable to
|
* the indexer.
|
||||||
* the IndexController.
|
*
|
||||||
|
* Create a history object as a listener and make it avaiable to the
|
||||||
|
* IndexController.
|
||||||
|
*
|
||||||
|
* Create a listener that will call commit() on the SearchEngine every time it
|
||||||
|
* hears a progress or completion event.
|
||||||
*/
|
*/
|
||||||
public class SearchIndexerSetup implements ServletContextListener {
|
public class SearchIndexerSetup implements ServletContextListener {
|
||||||
private static final Log log = LogFactory.getLog(SearchIndexerSetup.class);
|
private static final Log log = LogFactory.getLog(SearchIndexerSetup.class);
|
||||||
|
@ -35,6 +47,7 @@ public class SearchIndexerSetup implements ServletContextListener {
|
||||||
private IndexingChangeListener listener;
|
private IndexingChangeListener listener;
|
||||||
private DeveloperDisabledChangeListener listenerWrapper;
|
private DeveloperDisabledChangeListener listenerWrapper;
|
||||||
private IndexHistory history;
|
private IndexHistory history;
|
||||||
|
private Committer committer;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void contextInitialized(ServletContextEvent sce) {
|
public void contextInitialized(ServletContextEvent sce) {
|
||||||
|
@ -57,6 +70,9 @@ public class SearchIndexerSetup implements ServletContextListener {
|
||||||
searchIndexer.addListener(this.history);
|
searchIndexer.addListener(this.history);
|
||||||
IndexController.setHistory(this.history);
|
IndexController.setHistory(this.history);
|
||||||
|
|
||||||
|
this.committer = new Committer();
|
||||||
|
searchIndexer.addListener(this.committer);
|
||||||
|
|
||||||
searchIndexer
|
searchIndexer
|
||||||
.startup(app, new ComponentStartupStatusImpl(this, ss));
|
.startup(app, new ComponentStartupStatusImpl(this, ss));
|
||||||
|
|
||||||
|
@ -70,6 +86,7 @@ public class SearchIndexerSetup implements ServletContextListener {
|
||||||
public void contextDestroyed(ServletContextEvent sce) {
|
public void contextDestroyed(ServletContextEvent sce) {
|
||||||
searchIndexer.shutdown(app);
|
searchIndexer.shutdown(app);
|
||||||
|
|
||||||
|
searchIndexer.removeListener(this.committer);
|
||||||
searchIndexer.removeListener(this.history);
|
searchIndexer.removeListener(this.history);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -80,4 +97,29 @@ public class SearchIndexerSetup implements ServletContextListener {
|
||||||
}
|
}
|
||||||
listener.shutdown();
|
listener.shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// Helper classes
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
private static class Committer implements Listener {
|
||||||
|
private final SearchEngine searchEngine = ApplicationUtils.instance()
|
||||||
|
.getSearchEngine();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void receiveSearchIndexerEvent(Event event) {
|
||||||
|
Type type = event.getType();
|
||||||
|
if (type == PROGRESS || type == STOP_PROCESSING_URIS) {
|
||||||
|
commitChanges();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void commitChanges() {
|
||||||
|
try {
|
||||||
|
searchEngine.commit();
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("Failed to commit the changes.", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,7 +94,6 @@ public class UpdateUrisTask implements Task {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pool.waitUntilIdle();
|
pool.waitUntilIdle();
|
||||||
commitChanges();
|
|
||||||
|
|
||||||
excluders.stopIndexing();
|
excluders.stopIndexing();
|
||||||
modifiers.stopIndexing();
|
modifiers.stopIndexing();
|
||||||
|
@ -102,14 +101,6 @@ public class UpdateUrisTask implements Task {
|
||||||
.getSearchIndexerStatus()));
|
.getSearchIndexerStatus()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void commitChanges() {
|
|
||||||
try {
|
|
||||||
searchEngine.commit();
|
|
||||||
} catch (Exception e) {
|
|
||||||
log.error("Failed to commit the changes.", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isInterrupted() {
|
private boolean isInterrupted() {
|
||||||
if (Thread.interrupted()) {
|
if (Thread.interrupted()) {
|
||||||
Thread.currentThread().interrupt();
|
Thread.currentThread().interrupt();
|
||||||
|
|
Loading…
Add table
Reference in a new issue