Don't queue indexing tasks for the ABoxRecomputer

This commit is contained in:
Graham Triggs 2015-02-13 12:10:41 +00:00
parent 45b753119d
commit 999fb5e1f9
4 changed files with 49 additions and 6 deletions

View file

@ -43,6 +43,14 @@ public interface SearchIndexer extends Application.Module {
*/
void pause();
/**
* Stop processing new tasks. Requests will be ignored and the index rebuilt when unpaused.
* Fires a PAUSED event to listeners.
*
* This call has no effect if already paused, or if called after shutdown.
*/
void pauseWithoutDeferring();
/**
* Resume processing new tasks. Any requests that were received since the
* call to pause() will now be scheduled for processing. Fires an UNPAUSED

View file

@ -104,7 +104,7 @@ public class ABoxRecomputer {
}
try {
if (searchIndexer != null) {
searchIndexer.pause();
searchIndexer.pauseWithoutDeferring();
}
recomputeABox();
} finally {

View file

@ -98,6 +98,9 @@ public class SearchIndexerImpl implements SearchIndexer {
private Set<IndexingUriFinder> uriFinders;
private WebappDaoFactory wadf;
private boolean ignoreTasksWhilePaused = false;
private boolean rebuildOnUnpause = false;
// ----------------------------------------------------------------------
// ConfigurationBeanLoader methods.
// ----------------------------------------------------------------------
@ -198,6 +201,18 @@ public class SearchIndexerImpl implements SearchIndexer {
@Override
public void pause() {
if (!isPaused() && !isShutdown()) {
ignoreTasksWhilePaused = false;
rebuildOnUnpause = false;
scheduler.pause();
fireEvent(PAUSE);
}
}
@Override
public void pauseWithoutDeferring() {
if (!isPaused() && !isShutdown()) {
ignoreTasksWhilePaused = true;
rebuildOnUnpause = false;
scheduler.pause();
fireEvent(PAUSE);
}
@ -208,6 +223,10 @@ public class SearchIndexerImpl implements SearchIndexer {
if (isPaused() && !isShutdown()) {
scheduler.unpause();
fireEvent(UNPAUSE);
if (rebuildOnUnpause) {
rebuildOnUnpause = false;
rebuildIndex();
}
}
}
@ -245,6 +264,10 @@ public class SearchIndexerImpl implements SearchIndexer {
if (changes == null || changes.isEmpty()) {
return;
}
if (ignoreTasksWhilePaused && isPaused()) {
rebuildOnUnpause = true;
return;
}
scheduler.scheduleTask(new UpdateStatementsTask.Deferrable(changes));
log.debug("Scheduled updates for " + changes.size() + " statements.");
@ -259,6 +282,10 @@ public class SearchIndexerImpl implements SearchIndexer {
if (uris == null || uris.isEmpty()) {
return;
}
if (ignoreTasksWhilePaused && isPaused()) {
rebuildOnUnpause = true;
return;
}
scheduler.scheduleTask(new UpdateUrisTask.Deferrable(uris));
log.debug("Scheduled updates for " + uris.size() + " uris.");
@ -269,6 +296,10 @@ public class SearchIndexerImpl implements SearchIndexer {
if (isShutdown()) {
log.warn("Call to rebuildIndex after shutdown.");
}
if (ignoreTasksWhilePaused && isPaused()) {
rebuildOnUnpause = true;
return;
}
scheduler.scheduleTask(new RebuildIndexTask.Deferrable());
log.debug("Scheduled a full rebuild.");
@ -423,8 +454,7 @@ public class SearchIndexerImpl implements SearchIndexer {
private void processDeferredTasks() {
for (DeferrableTask task : deferredQueue) {
taskQueue.scheduleTask(task.makeRunnable(indexer.createFindersList(), indexer.createExcludersList(), indexer.createModifiersList(), indexer.wadf.getIndividualDao(), indexer.listeners, indexer.pool));
log.debug("moved task from deferred queue to task queue: "
+ task);
log.debug("moved task from deferred queue to task queue: " + task);
}
// Empty out the deferred queue as we've now processed it

View file

@ -31,6 +31,11 @@ public class SearchIndexerStub implements SearchIndexer {
paused = true;
}
@Override
public void pauseWithoutDeferring() {
paused = true;
}
@Override
public void unpause() {
paused = false;