Add a developer setting that will suppress automated search index updates.

This commit is contained in:
Jim Blake 2014-10-02 16:22:02 -04:00
parent 39e7a818c2
commit 573a5e6cc6
5 changed files with 151 additions and 22 deletions

View file

@ -42,6 +42,8 @@ import edu.cornell.mannlib.vitro.webapp.search.indexing.AdditionalUriFinders;
import edu.cornell.mannlib.vitro.webapp.search.indexing.IndexBuilder; import edu.cornell.mannlib.vitro.webapp.search.indexing.IndexBuilder;
import edu.cornell.mannlib.vitro.webapp.search.indexing.SearchReindexingListener; import edu.cornell.mannlib.vitro.webapp.search.indexing.SearchReindexingListener;
import edu.cornell.mannlib.vitro.webapp.startup.StartupStatus; import edu.cornell.mannlib.vitro.webapp.startup.StartupStatus;
import edu.cornell.mannlib.vitro.webapp.utils.developer.Key;
import edu.cornell.mannlib.vitro.webapp.utils.developer.listeners.DeveloperDisabledModelChangeListener;
/** /**
* TODO * TODO
@ -129,11 +131,12 @@ public class SearchIndexerSetup implements ServletContextListener {
// webapp. // webapp.
context.setAttribute(IndexBuilder.class.getName(), builder); context.setAttribute(IndexBuilder.class.getName(), builder);
// set up listeners so search index builder is notified of changes // Create listener to notify index builder of changes to model
// to model // (can be disabled by developer setting.)
ServletContext ctx = sce.getServletContext(); ModelContext.registerListenerForChanges(context,
SearchReindexingListener srl = new SearchReindexingListener(builder); new DeveloperDisabledModelChangeListener(
ModelContext.registerListenerForChanges(ctx, srl); new SearchReindexingListener(builder),
Key.SEARCH_INDEX_SUPPRESS_MODEL_CHANGE_LISTENER));
ss.info(this, "Setup of search indexer completed."); ss.info(this, "Setup of search indexer completed.");
} catch (Throwable e) { } catch (Throwable e) {

View file

@ -110,6 +110,12 @@ public enum Key {
SEARCH_INDEX_DOCUMENT_RESTRICTION( SEARCH_INDEX_DOCUMENT_RESTRICTION(
"developer.searchIndex.documentRestriction", false), "developer.searchIndex.documentRestriction", false),
/**
* If set, don't pass model change events to the search indexer.
*/
SEARCH_INDEX_SUPPRESS_MODEL_CHANGE_LISTENER(
"developer.searchIndex.suppressModelChangeListener", true),
/** /**
* Tell the SearchEngineLogger to log all index deletions. * Tell the SearchEngineLogger to log all index deletions.
*/ */
@ -185,6 +191,7 @@ public enum Key {
private final String propertyName; private final String propertyName;
private final boolean bool; private final boolean bool;
// TODO create a private enum for KeyType to clarify these constructors.
private Key(String propertyName, boolean bool) { private Key(String propertyName, boolean bool) {
this.propertyName = propertyName; this.propertyName = propertyName;
this.bool = bool; this.bool = bool;

View file

@ -0,0 +1,116 @@
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
package edu.cornell.mannlib.vitro.webapp.utils.developer.listeners;
import java.util.List;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelChangedListener;
import com.hp.hpl.jena.rdf.model.Statement;
import com.hp.hpl.jena.rdf.model.StmtIterator;
import edu.cornell.mannlib.vitro.webapp.utils.developer.DeveloperSettings;
import edu.cornell.mannlib.vitro.webapp.utils.developer.Key;
/**
* If a particular developer flag is NOT set to true, this is transparent.
*
* Set the flag and this becomes opaque, passing no events through.
*/
public class DeveloperDisabledModelChangeListener implements
ModelChangedListener {
private final ModelChangedListener inner;
private final Key disablingKey;
public DeveloperDisabledModelChangeListener(ModelChangedListener inner,
Key disablingKey) {
this.inner = inner;
this.disablingKey = disablingKey;
}
private boolean isEnabled() {
return !DeveloperSettings.getInstance().getBoolean(disablingKey);
}
// ----------------------------------------------------------------------
// Delegated methods.
// ----------------------------------------------------------------------
@Override
public void addedStatement(Statement s) {
if (isEnabled()) {
inner.addedStatement(s);
}
}
@Override
public void addedStatements(Statement[] statements) {
if (isEnabled()) {
inner.addedStatements(statements);
}
}
@Override
public void addedStatements(List<Statement> statements) {
if (isEnabled()) {
inner.addedStatements(statements);
}
}
@Override
public void addedStatements(StmtIterator statements) {
if (isEnabled()) {
inner.addedStatements(statements);
}
}
@Override
public void addedStatements(Model m) {
if (isEnabled()) {
inner.addedStatements(m);
}
}
@Override
public void removedStatement(Statement s) {
if (isEnabled()) {
inner.removedStatement(s);
}
}
@Override
public void removedStatements(Statement[] statements) {
if (isEnabled()) {
inner.removedStatements(statements);
}
}
@Override
public void removedStatements(List<Statement> statements) {
if (isEnabled()) {
inner.removedStatements(statements);
}
}
@Override
public void removedStatements(StmtIterator statements) {
if (isEnabled()) {
inner.removedStatements(statements);
}
}
@Override
public void removedStatements(Model m) {
if (isEnabled()) {
inner.removedStatements(m);
}
}
@Override
public void notifyEvent(Model m, Object event) {
if (isEnabled()) {
inner.notifyEvent(m, event);
}
}
}

View file

@ -54,6 +54,7 @@ function DeveloperPanel(developerAjaxUrl) {
document.getElementById("developer_i18n_logStringRequests").disabled = !developerEnabled; document.getElementById("developer_i18n_logStringRequests").disabled = !developerEnabled;
document.getElementById("developer_loggingRDFService_enable").disabled = !developerEnabled; document.getElementById("developer_loggingRDFService_enable").disabled = !developerEnabled;
document.getElementById("developer_searchIndex_enable").disabled = !developerEnabled; document.getElementById("developer_searchIndex_enable").disabled = !developerEnabled;
document.getElementById("developer_searchIndex_suppressModelChangeListener").disabled = !developerEnabled;
document.getElementById("developer_searchDeletions_enable").disabled = !developerEnabled; document.getElementById("developer_searchDeletions_enable").disabled = !developerEnabled;
document.getElementById("developer_searchEngine_enable").disabled = !developerEnabled; document.getElementById("developer_searchEngine_enable").disabled = !developerEnabled;
document.getElementById("developer_authorization_logDecisions_enable").disabled = !developerEnabled; document.getElementById("developer_authorization_logDecisions_enable").disabled = !developerEnabled;

View file

@ -96,17 +96,16 @@
<div id="developerTabSearch"> <div id="developerTabSearch">
<div class="devright"> <div class="devright">
<div class="container"> <div class="container">
Indexing Searching
<@showCheckbox "developer_searchIndex_enable", "Log indexing." /> <@showCheckbox "developer_searchEngine_enable", "Log searches" />
<div class="within"> <div class="within">
<@showCheckbox "developer_searchIndex_showDocuments", <@showCheckbox "developer_searchEngine_addStackTrace", "Show stack trace" />
"Show document contents" /> <@showCheckbox "developer_searchEngine_addResults", "Show search results" />
<@showTextbox "developer_searchIndex_uriOrNameRestriction", <@showTextbox "developer_searchEngine_queryRestriction",
"Restrict by URI or name" /> "Restrict by query string" />
<@showTextbox "developer_searchIndex_documentRestriction", <@showTextbox "developer_searchEngine_stackRestriction",
"Restrict by document contents" /> "Restrict by calling stack" />
</div> </div>
<@showCheckbox "developer_searchDeletions_enable", "Log deletions." />
</div> </div>
<div class="container"> <div class="container">
@ -118,16 +117,19 @@
<div class="devleft"> <div class="devleft">
<div class="container"> <div class="container">
Searching Indexing
<@showCheckbox "developer_searchEngine_enable", "Log searches" /> <@showCheckbox "developer_searchIndex_enable", "Log indexing." />
<div class="within"> <div class="within">
<@showCheckbox "developer_searchEngine_addStackTrace", "Show stack trace" /> <@showCheckbox "developer_searchIndex_showDocuments",
<@showCheckbox "developer_searchEngine_addResults", "Show search results" /> "Show document contents" />
<@showTextbox "developer_searchEngine_queryRestriction", <@showTextbox "developer_searchIndex_uriOrNameRestriction",
"Restrict by query string" /> "Restrict by URI or name" />
<@showTextbox "developer_searchEngine_stackRestriction", <@showTextbox "developer_searchIndex_documentRestriction",
"Restrict by calling stack" /> "Restrict by document contents" />
</div> </div>
<@showCheckbox "developer_searchDeletions_enable", "Log deletions." />
<@showCheckbox "developer_searchIndex_suppressModelChangeListener",
"Suppress the automatic indexing of changed triples." />
</div> </div>
</div> </div>
</div> </div>