Don't queue indexing tasks for the ABoxRecomputer
This commit is contained in:
parent
45b753119d
commit
999fb5e1f9
4 changed files with 49 additions and 6 deletions
|
@ -40,10 +40,18 @@ public interface SearchIndexer extends Application.Module {
|
|||
* unpause(). Fires a PAUSED event to listeners.
|
||||
*
|
||||
* This call has no effect if already paused, or if called after shutdown.
|
||||
*/
|
||||
*/
|
||||
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
|
||||
* event to listeners.
|
||||
|
|
|
@ -104,7 +104,7 @@ public class ABoxRecomputer {
|
|||
}
|
||||
try {
|
||||
if (searchIndexer != null) {
|
||||
searchIndexer.pause();
|
||||
searchIndexer.pauseWithoutDeferring();
|
||||
}
|
||||
recomputeABox();
|
||||
} finally {
|
||||
|
|
|
@ -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,16 +201,32 @@ 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);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unpause() {
|
||||
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
|
||||
|
|
|
@ -31,7 +31,12 @@ public class SearchIndexerStub implements SearchIndexer {
|
|||
paused = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Override
|
||||
public void pauseWithoutDeferring() {
|
||||
paused = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unpause() {
|
||||
paused = false;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue