You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by ch...@apache.org on 2014/03/29 14:21:58 UTC

svn commit: r1583001 - in /uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm: ServiceHandler.java ServiceSet.java

Author: challngr
Date: Sat Mar 29 13:21:57 2014
New Revision: 1583001

URL: http://svn.apache.org/r1583001
Log:
UIMA-3707 Add shutdown hook to stop pingers.

Modified:
    uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceHandler.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceSet.java

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceHandler.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceHandler.java?rev=1583001&r1=1583000&r2=1583001&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceHandler.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceHandler.java Sat Mar 29 13:21:57 2014
@@ -73,6 +73,7 @@ public class ServiceHandler
     public ServiceHandler(IServiceManager serviceManager)
     {
         this.serviceManager = serviceManager;        
+        Runtime.getRuntime().addShutdownHook(new ServiceShutdown());
     }
 
     public synchronized void run()
@@ -1119,6 +1120,27 @@ public class ServiceHandler
 //         }
 //     }
 
+    /**
+     * This is the shutdown hook that stops all the pingers.
+     */
+    class ServiceShutdown
+        extends Thread
+    {
+        ServiceShutdown() 
+        {
+        }
+
+        public void run()
+        {
+            String methodName = "ServiceShutdown.run";
+            List<ServiceSet> allServices = serviceStateHandler.getServices();
+            for (ServiceSet sset : allServices) {
+                sset.stopMonitor();
+            }            
+        }
+
+    }
+
      class ServiceStateHandler
      {
 

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceSet.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceSet.java?rev=1583001&r1=1583000&r2=1583001&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceSet.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceSet.java Sat Mar 29 13:21:57 2014
@@ -147,6 +147,8 @@ public class ServiceSet
     int run_failures = 0;
     boolean excessiveRunFailures = false;       // signalled by monitor / pinger if we have too many
 
+    boolean inShutdown = false;
+
     //
     // Constructor for a registered service
     //
@@ -1397,6 +1399,7 @@ public class ServiceSet
     {
     	String methodName = "startPingThread";
         if ( serviceMeta != null ) return;         // don't start multiple times.
+        if ( inShutdown ) return;              // in shutdown, don't restart
 
         try {
             logger.info(methodName, id, "Starting service monitor.");
@@ -1431,6 +1434,14 @@ public class ServiceSet
         }
     }
 
+    synchronized void stopMonitor()
+    {
+        String methodName = "stopMonitor";
+        logger.info(methodName, id, "Stopping pinger due to shutdown");
+        inShutdown = true;
+        stopPingThread();
+    }
+
     public synchronized void stopPingThread()
     {
         String methodName = "stopPingThread";
@@ -1441,7 +1452,10 @@ public class ServiceSet
             serviceMeta = null;
         }
 
-        saveMetaProperties();
+        if ( ! inShutdown ) {
+            saveMetaProperties();         // no i/o during shutdown, it has to be fast and clean
+                                          // things will be cleaned up and resynced on restart
+        }
     }
 
     void log_text(String logdir, String text)