From 999fb5e1f9028c84e19dfa918efdef78d5913eb4 Mon Sep 17 00:00:00 2001 From: Graham Triggs Date: Fri, 13 Feb 2015 12:10:41 +0000 Subject: [PATCH] Don't queue indexing tasks for the ABoxRecomputer --- .../modules/searchIndexer/SearchIndexer.java | 12 +++++-- .../vitro/webapp/reasoner/ABoxRecomputer.java | 2 +- .../webapp/searchindex/SearchIndexerImpl.java | 34 +++++++++++++++++-- .../searchIndexer/SearchIndexerStub.java | 7 +++- 4 files changed, 49 insertions(+), 6 deletions(-) diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/modules/searchIndexer/SearchIndexer.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/modules/searchIndexer/SearchIndexer.java index 21753ada5..fc3b3667c 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/modules/searchIndexer/SearchIndexer.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/modules/searchIndexer/SearchIndexer.java @@ -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. diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/reasoner/ABoxRecomputer.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/reasoner/ABoxRecomputer.java index 38af537d8..2dcd771d4 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/reasoner/ABoxRecomputer.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/reasoner/ABoxRecomputer.java @@ -104,7 +104,7 @@ public class ABoxRecomputer { } try { if (searchIndexer != null) { - searchIndexer.pause(); + searchIndexer.pauseWithoutDeferring(); } recomputeABox(); } finally { diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/searchindex/SearchIndexerImpl.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/searchindex/SearchIndexerImpl.java index 38c50af59..b41a43054 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/searchindex/SearchIndexerImpl.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/searchindex/SearchIndexerImpl.java @@ -98,6 +98,9 @@ public class SearchIndexerImpl implements SearchIndexer { private Set 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 diff --git a/webapp/test/stubs/edu/cornell/mannlib/vitro/webapp/modules/searchIndexer/SearchIndexerStub.java b/webapp/test/stubs/edu/cornell/mannlib/vitro/webapp/modules/searchIndexer/SearchIndexerStub.java index e2b8670b6..bd902cb58 100644 --- a/webapp/test/stubs/edu/cornell/mannlib/vitro/webapp/modules/searchIndexer/SearchIndexerStub.java +++ b/webapp/test/stubs/edu/cornell/mannlib/vitro/webapp/modules/searchIndexer/SearchIndexerStub.java @@ -31,7 +31,12 @@ public class SearchIndexerStub implements SearchIndexer { paused = true; } - @Override + @Override + public void pauseWithoutDeferring() { + paused = true; + } + + @Override public void unpause() { paused = false; }