You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by cw...@apache.org on 2012/04/12 21:31:08 UTC

svn commit: r1325457 - in /uima/uima-as/trunk/uimaj-as-core/src/main: java/org/apache/uima/aae/controller/BaseAnalysisEngineController.java resources/uimaee_messages.properties

Author: cwiklik
Date: Thu Apr 12 19:31:07 2012
New Revision: 1325457

URL: http://svn.apache.org/viewvc?rev=1325457&view=rev
Log:
UIMA-2388 support self-destruct (System.exit()) when error threshold is exceeded and action=terminate

Modified:
    uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/BaseAnalysisEngineController.java
    uima/uima-as/trunk/uimaj-as-core/src/main/resources/uimaee_messages.properties

Modified: uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/BaseAnalysisEngineController.java
URL: http://svn.apache.org/viewvc/uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/BaseAnalysisEngineController.java?rev=1325457&r1=1325456&r2=1325457&view=diff
==============================================================================
--- uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/BaseAnalysisEngineController.java (original)
+++ uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/BaseAnalysisEngineController.java Thu Apr 12 19:31:07 2012
@@ -1135,7 +1135,7 @@ public abstract class BaseAnalysisEngine
     return replyTime;
   }
 
-  protected void handleAction(String anAction, String anEndpoint, ErrorContext anErrorContext)
+  protected void handleAction(String anAction, String anEndpoint, final ErrorContext anErrorContext)
           throws Exception {
 
     String casReferenceId = null;
@@ -1144,6 +1144,67 @@ public abstract class BaseAnalysisEngine
     }
 
     if (ErrorHandler.TERMINATE.equalsIgnoreCase(anAction)) {
+      if ( casReferenceId != null ) {
+        CasStateEntry stateEntry = null;
+        String parentCasReferenceId = null;
+        try {
+          stateEntry = getLocalCache().lookupEntry(casReferenceId);
+          if (stateEntry != null && stateEntry.isSubordinate()) {
+            CasStateEntry topParentEntry = getLocalCache().getTopCasAncestor(casReferenceId);
+            parentCasReferenceId = topParentEntry.getCasReferenceId();
+          }
+          if (!isStopped()) {
+            Endpoint endpoint = (Endpoint) anErrorContext.get(AsynchAEMessage.Endpoint);
+            if ( endpoint != null ) {
+              getOutputChannel().sendReply((Throwable) anErrorContext.get(ErrorContext.THROWABLE_ERROR), 
+                      casReferenceId, parentCasReferenceId,
+                      endpoint, AsynchAEMessage.Process);
+            }
+          }
+        } catch (Exception e) {
+        }
+
+      }
+      //  Extended tests cant be killed, so skip this if dontKill is defined
+      //  in System properties.
+      if ( System.getProperty("dontKill") == null) {
+        // The UIMA AS service error handling says to terminate. Try to terminate
+        // cleanly. If the process is not down after 40 secs, take it down via
+        // System.exit.  
+        Thread reaperThread = new Thread( new Runnable() {
+          public void run() {
+            System.out.println("++++++++++++++++++++++++ Starting Reaper thread");
+            Object sleepLock = new Object();
+            try {
+              synchronized( sleepLock ) {
+                sleepLock.wait(40000); // allow up to 40 sec minute for a clean shutdown.
+              }
+            } catch( Exception exx) {
+              exx.printStackTrace();
+            }
+             
+            // **********************************************************************
+            // **********************************************************************
+            // **********************************************************************
+            // **********************************************************************
+            // **********************************************************************
+            // Per discussion with Eddie on 4/11/12, exit process via System.exit() 
+            UIMAFramework.getLogger(CLASS_NAME).logrb(Level.SEVERE, CLASS_NAME.getName(),
+                    "handleAction", UIMAEE_Constants.JMS_LOG_RESOURCE_BUNDLE,
+                    "UIMAEE_killing_process__SEVERE", new Object[] { getComponentName() });
+            System.exit(1);
+            // **********************************************************************
+            // **********************************************************************
+            // **********************************************************************
+            // **********************************************************************
+            // **********************************************************************
+          }
+        }
+        );
+        reaperThread.start();        
+        
+      }
+
       // Propagate terminate event to the top controller and begin shutdown of this service along
       // with all collocated delegates (if any)
       if (anErrorContext != null && anErrorContext.containsKey(ErrorContext.THROWABLE_ERROR)
@@ -1153,6 +1214,7 @@ public abstract class BaseAnalysisEngine
       } else {
         terminate();
       }
+
     } else if (ErrorHandler.DISABLE.equalsIgnoreCase(anAction)) {
 
       if (anEndpoint != null) {

Modified: uima/uima-as/trunk/uimaj-as-core/src/main/resources/uimaee_messages.properties
URL: http://svn.apache.org/viewvc/uima/uima-as/trunk/uimaj-as-core/src/main/resources/uimaee_messages.properties?rev=1325457&r1=1325456&r2=1325457&view=diff
==============================================================================
--- uima/uima-as/trunk/uimaj-as-core/src/main/resources/uimaee_messages.properties (original)
+++ uima/uima-as/trunk/uimaj-as-core/src/main/resources/uimaee_messages.properties Thu Apr 12 19:31:07 2012
@@ -55,7 +55,7 @@ UIMAEE_terminating_service__INFO = Servi
 UIMAEE_primitive_ctrl_init_info__CONFIG - Initializing Async Primitive Service. Number of Worker Threads: {0}
 UIMAEE_terminating_thread__INFO = Terminatig Worker Thread in Async Primitive Service: {0}
 UIMAEE_worker_threads_done__INFO = All Worker Threads Terminated in Async Primitive Service: {0}
-UIMAEE_killing_process__SEVERE = Service {0} Killed With System.exit(0)
+UIMAEE_killing_process__SEVERE = !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\t<<<<<<<<<<<<<< Service {0} Killed With System.exit(0) >>>>>>>>>>>>>>>>>>>>>>>>>\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 UIMAEE_rceived_work__FINE = Worker Thread: {0} Received Work. Cas ReferenceId: {1}
 UIMAEE_cas_notin_cache__WARNING = Worker Thread: {0} Cas ReferenceId: {1} Not In Cache.
 UIMAEE_produced_new_cas__FINE = Worker Thread: {0} Controller: {1} Produced New Cas: {2} From Input Cas: {3}