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.
|
* unpause(). Fires a PAUSED event to listeners.
|
||||||
*
|
*
|
||||||
* This call has no effect if already paused, or if called after shutdown.
|
* This call has no effect if already paused, or if called after shutdown.
|
||||||
*/
|
*/
|
||||||
void pause();
|
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
|
* Resume processing new tasks. Any requests that were received since the
|
||||||
* call to pause() will now be scheduled for processing. Fires an UNPAUSED
|
* call to pause() will now be scheduled for processing. Fires an UNPAUSED
|
||||||
* event to listeners.
|
* event to listeners.
|
||||||
|
|
|
@ -104,7 +104,7 @@ public class ABoxRecomputer {
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
if (searchIndexer != null) {
|
if (searchIndexer != null) {
|
||||||
searchIndexer.pause();
|
searchIndexer.pauseWithoutDeferring();
|
||||||
}
|
}
|
||||||
recomputeABox();
|
recomputeABox();
|
||||||
} finally {
|
} finally {
|
||||||
|
|
|
@ -98,6 +98,9 @@ public class SearchIndexerImpl implements SearchIndexer {
|
||||||
private Set<IndexingUriFinder> uriFinders;
|
private Set<IndexingUriFinder> uriFinders;
|
||||||
private WebappDaoFactory wadf;
|
private WebappDaoFactory wadf;
|
||||||
|
|
||||||
|
private boolean ignoreTasksWhilePaused = false;
|
||||||
|
private boolean rebuildOnUnpause = false;
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
// ConfigurationBeanLoader methods.
|
// ConfigurationBeanLoader methods.
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
|
@ -198,16 +201,32 @@ public class SearchIndexerImpl implements SearchIndexer {
|
||||||
@Override
|
@Override
|
||||||
public void pause() {
|
public void pause() {
|
||||||
if (!isPaused() && !isShutdown()) {
|
if (!isPaused() && !isShutdown()) {
|
||||||
|
ignoreTasksWhilePaused = false;
|
||||||
|
rebuildOnUnpause = false;
|
||||||
scheduler.pause();
|
scheduler.pause();
|
||||||
fireEvent(PAUSE);
|
fireEvent(PAUSE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void pauseWithoutDeferring() {
|
||||||
|
if (!isPaused() && !isShutdown()) {
|
||||||
|
ignoreTasksWhilePaused = true;
|
||||||
|
rebuildOnUnpause = false;
|
||||||
|
scheduler.pause();
|
||||||
|
fireEvent(PAUSE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void unpause() {
|
public void unpause() {
|
||||||
if (isPaused() && !isShutdown()) {
|
if (isPaused() && !isShutdown()) {
|
||||||
scheduler.unpause();
|
scheduler.unpause();
|
||||||
fireEvent(UNPAUSE);
|
fireEvent(UNPAUSE);
|
||||||
|
if (rebuildOnUnpause) {
|
||||||
|
rebuildOnUnpause = false;
|
||||||
|
rebuildIndex();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -245,6 +264,10 @@ public class SearchIndexerImpl implements SearchIndexer {
|
||||||
if (changes == null || changes.isEmpty()) {
|
if (changes == null || changes.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (ignoreTasksWhilePaused && isPaused()) {
|
||||||
|
rebuildOnUnpause = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
scheduler.scheduleTask(new UpdateStatementsTask.Deferrable(changes));
|
scheduler.scheduleTask(new UpdateStatementsTask.Deferrable(changes));
|
||||||
log.debug("Scheduled updates for " + changes.size() + " statements.");
|
log.debug("Scheduled updates for " + changes.size() + " statements.");
|
||||||
|
@ -259,6 +282,10 @@ public class SearchIndexerImpl implements SearchIndexer {
|
||||||
if (uris == null || uris.isEmpty()) {
|
if (uris == null || uris.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (ignoreTasksWhilePaused && isPaused()) {
|
||||||
|
rebuildOnUnpause = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
scheduler.scheduleTask(new UpdateUrisTask.Deferrable(uris));
|
scheduler.scheduleTask(new UpdateUrisTask.Deferrable(uris));
|
||||||
log.debug("Scheduled updates for " + uris.size() + " uris.");
|
log.debug("Scheduled updates for " + uris.size() + " uris.");
|
||||||
|
@ -269,6 +296,10 @@ public class SearchIndexerImpl implements SearchIndexer {
|
||||||
if (isShutdown()) {
|
if (isShutdown()) {
|
||||||
log.warn("Call to rebuildIndex after shutdown.");
|
log.warn("Call to rebuildIndex after shutdown.");
|
||||||
}
|
}
|
||||||
|
if (ignoreTasksWhilePaused && isPaused()) {
|
||||||
|
rebuildOnUnpause = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
scheduler.scheduleTask(new RebuildIndexTask.Deferrable());
|
scheduler.scheduleTask(new RebuildIndexTask.Deferrable());
|
||||||
log.debug("Scheduled a full rebuild.");
|
log.debug("Scheduled a full rebuild.");
|
||||||
|
@ -423,8 +454,7 @@ public class SearchIndexerImpl implements SearchIndexer {
|
||||||
private void processDeferredTasks() {
|
private void processDeferredTasks() {
|
||||||
for (DeferrableTask task : deferredQueue) {
|
for (DeferrableTask task : deferredQueue) {
|
||||||
taskQueue.scheduleTask(task.makeRunnable(indexer.createFindersList(), indexer.createExcludersList(), indexer.createModifiersList(), indexer.wadf.getIndividualDao(), indexer.listeners, indexer.pool));
|
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: "
|
log.debug("moved task from deferred queue to task queue: " + task);
|
||||||
+ task);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Empty out the deferred queue as we've now processed it
|
// Empty out the deferred queue as we've now processed it
|
||||||
|
|
|
@ -31,7 +31,12 @@ public class SearchIndexerStub implements SearchIndexer {
|
||||||
paused = true;
|
paused = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
public void pauseWithoutDeferring() {
|
||||||
|
paused = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void unpause() {
|
public void unpause() {
|
||||||
paused = false;
|
paused = false;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue