You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@marmotta.apache.org by ss...@apache.org on 2013/09/13 12:36:35 UTC

git commit: better shutdown handling for reasoner thread (fixes MARMOTTA-307)

Updated Branches:
  refs/heads/develop c7563c0d7 -> 6e97cc082


better shutdown handling for reasoner thread (fixes MARMOTTA-307)


Project: http://git-wip-us.apache.org/repos/asf/incubator-marmotta/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-marmotta/commit/6e97cc08
Tree: http://git-wip-us.apache.org/repos/asf/incubator-marmotta/tree/6e97cc08
Diff: http://git-wip-us.apache.org/repos/asf/incubator-marmotta/diff/6e97cc08

Branch: refs/heads/develop
Commit: 6e97cc082354952466325b4efda949674ef6f2ec
Parents: c7563c0
Author: Sebastian Schaffert <ss...@apache.org>
Authored: Fri Sep 13 12:36:31 2013 +0200
Committer: Sebastian Schaffert <ss...@apache.org>
Committed: Fri Sep 13 12:36:31 2013 +0200

----------------------------------------------------------------------
 .../marmotta/kiwi/reasoner/engine/ReasoningEngine.java | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/6e97cc08/libraries/kiwi/kiwi-reasoner/src/main/java/org/apache/marmotta/kiwi/reasoner/engine/ReasoningEngine.java
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-reasoner/src/main/java/org/apache/marmotta/kiwi/reasoner/engine/ReasoningEngine.java b/libraries/kiwi/kiwi-reasoner/src/main/java/org/apache/marmotta/kiwi/reasoner/engine/ReasoningEngine.java
index 47891c6..1b189d8 100644
--- a/libraries/kiwi/kiwi-reasoner/src/main/java/org/apache/marmotta/kiwi/reasoner/engine/ReasoningEngine.java
+++ b/libraries/kiwi/kiwi-reasoner/src/main/java/org/apache/marmotta/kiwi/reasoner/engine/ReasoningEngine.java
@@ -905,7 +905,7 @@ public class ReasoningEngine implements TransactionListener {
         if(force) {
             log.warn("forced shutdown of reasoning service initiated, state will be inconsistent ...");
 
-            reasonerThread.shutdown();
+            reasonerThread.shutdown(true);
 
             for(int i = 0; i<3 && isRunning(); i++) {
                 log.warn("reasoner not yet finished, waiting for 1 seconds (try={})", i+1);
@@ -929,7 +929,7 @@ public class ReasoningEngine implements TransactionListener {
                 }
             }
 
-            reasonerThread.shutdown();
+            reasonerThread.shutdown(false);
         }
 
         isshutdown = true;
@@ -957,6 +957,7 @@ public class ReasoningEngine implements TransactionListener {
     private class SKWRLReasoner extends Thread {
         private boolean shutdown = false;
         private boolean running  = false;
+        private boolean forceshutdown = false;
 
         private SKWRLReasoner() {
             super("SKWRL Reasoner " + ++indexerCounter);
@@ -964,9 +965,10 @@ public class ReasoningEngine implements TransactionListener {
             start();
         }
 
-        public void shutdown() {
+        public void shutdown(boolean force) {
             log.info("REASONER: signalling shutdown to reasoner thread");
             shutdown = true;
+            forceshutdown = force;
             this.interrupt();
         }
 
@@ -980,7 +982,7 @@ public class ReasoningEngine implements TransactionListener {
 
             startTask(getName(), TASK_GROUP);
 
-            while (!shutdown || reasoningQueue.size() > 0) {
+            while (!forceshutdown && (!shutdown || reasoningQueue.size() > 0)) {
                 running = false;
                 try {
                     updateTaskStatus("idle");
@@ -993,10 +995,13 @@ public class ReasoningEngine implements TransactionListener {
                     executeReasoner(data);
                 } catch (InterruptedException ex) {
 
+                } catch (RuntimeException ex) {
+                    // can happen on forced shutdown
                 } catch (Exception ex) {
                     log.warn("reasoning task threw an exception",ex);
                 }
             }
+            running = false;
             try {
                 endTask();
             } catch (Exception ex) {