Author: challngr
Date: Sat May 18 13:54:32 2013
New Revision: 1484119

URL: http://svn.apache.org/r1484119
Log:
UIMA-2919 Service Manager tweaks
1. Use same ping interval logic for external and internal pingers
   (Was different for a while to bypass AMQ OOM issues)
2. Set ping-active and ping-only status in the meta file for use by web server
3. Take ping-only status into account for autotstarted services

Modified:
    
uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/IServiceMeta.java
    
uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/PingDriver.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/IServiceMeta.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/IServiceMeta.java?rev=1484119&r1=1484118&r2=1484119&view=diff
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/IServiceMeta.java
 (original)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/IServiceMeta.java
 Sat May 18 13:54:32 2013
@@ -27,5 +27,4 @@ interface IServiceMeta
     ServiceStatistics getServiceStatistics();
     public void run();
     public void stop();
-    public void reference();
 }

Modified: 
uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/PingDriver.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/PingDriver.java?rev=1484119&r1=1484118&r2=1484119&view=diff
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/PingDriver.java
 (original)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/PingDriver.java
 Sat May 18 13:54:32 2013
@@ -49,7 +49,7 @@ import org.apache.uima.ducc.common.utils
  */
 
 class PingDriver
-    implements IServiceMeta,
+    implements IServiceMeta,          // (extends runnable )
                SmConstants
 {
     /**
@@ -78,14 +78,13 @@ class PingDriver
     StdioListener ser_listener = null;
     PingThread pinger = null;
 
-    int META_PING_MAX = 32*60*1000;   // 32 minutes ( a shade over 30 ...)
-    int meta_ping_rate;
-    Object ping_rate_sync = new Object();
-
-    int meta_ping_stability;
-    String meta_ping_timeout;
-    Thread ping_thread;
-    boolean internal_ping = true;
+    int meta_ping_rate;              // ducc.properties configured ping rate
+    int meta_ping_stability;         // ducc.properties number of missed pings 
before setting service unresponive
+    String meta_ping_timeout;        // job.properties configured time to wait 
for ping to return in ms
+    Thread ping_thread;              // thread to manage external process 
pingers
+    boolean internal_ping = true;    // if true, use default UIMA-AS pinger in 
thread inside SM propert
+    AServicePing internal_pinger = null; // pinger used if internal_ping is 
true
+
     ServiceStatistics service_statistics = null;
 
     String user;
@@ -95,7 +94,6 @@ class PingDriver
 
     boolean shutdown = false;
     
-    AServicePing internal_pinger = null;
     
     PingDriver(ServiceSet sset)
     {        
@@ -107,9 +105,7 @@ class PingDriver
         this.user              = meta_props.getStringProperty("user");
         String jvm_args_str    = 
job_props.getStringProperty("service_ping_jvm_args", "");
         this.ping_class        = 
job_props.getStringProperty("service_ping_class", null);
-
         
-
         if ( (ping_class == null) || 
ping_class.equals(UimaAsPing.class.getName()) ) {
             internal_ping = true;
         } else {
@@ -154,18 +150,6 @@ class PingDriver
     {
         return service_statistics;
     }
-
-    public void reference()
-    {
-        if ( internal_ping ) return;   // internal ping, doesn't need this 
kludge
-
-        synchronized(ping_rate_sync) {
-            meta_ping_rate = 500;
-        }
-        if ( ping_thread != null ) {
-            ping_thread.interrupt();
-        }
-    }
         
     synchronized int getMetaPingRate()
     {
@@ -422,22 +406,10 @@ class PingDriver
                     // Try to read the response
                     handleStatistics((ServiceStatistics) ois.readObject());
 
-                    // This kliudge is required because we have to insure that 
pings aren't too frequent or ActiveMQ will get OutOfMemory errors.
-                    // So we do exponential backoff.  If a new job references 
the service we set the ping rate to something frequent for a while
-                    // to insure waiting jobs don't have to wait too long ( 
done in PingDriver object ).
-                    int my_ping_rate;
-                    synchronized(ping_rate_sync) {
-                        my_ping_rate = meta_ping_rate;
-                        if ( (meta_ping_rate < META_PING_MAX) && ( 
missed_pings == 0) ) {
-                            // double, if not at max rate, and pinging is 
working 
-                            meta_ping_rate = Math.min(META_PING_MAX, 
meta_ping_rate * 2);
-                        }
-                    }
-
                     // Wait a bit for the next one
                     try {
                         // logger.info(methodName, sset.getId(), "SLEEPING", 
my_ping_rate, "ms", sset.toString());
-                        Thread.sleep(my_ping_rate);
+                        Thread.sleep(meta_ping_rate);
                         // logger.info(methodName, sset.getId(), "SLEEP 
returns", sset.toString());
                     } catch (InterruptedException e) {
                         // nothing

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=1484119&r1=1484118&r2=1484119&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 May 18 13:54:32 2013
@@ -174,6 +174,8 @@ public class ServiceSet
         meta_props.put("service-alive",      "false");
         meta_props.put("service-healthy",    "false");
         meta_props.put("service-statistics", "N/A");
+        meta_props.put("ping-only", "true");
+
         meta_filename = state_dir + "/services/" + id.toString() + ".meta";
         saveMetaProperties();
     }
@@ -216,6 +218,8 @@ public class ServiceSet
         meta_props.put("service-healthy",    "false");
         meta_props.put("service-statistics", "N/A");
         meta_props.put("implementors", ""+id.getFriendly());
+        meta_props.put("ping-only", "false");
+
         meta_filename = state_dir + "/services/" + id.toString() + ".meta";
         saveMetaProperties();
     }
@@ -273,7 +277,14 @@ public class ServiceSet
         meta_props.put("service-alive",      "false");
         meta_props.put("service-healthy",    "false");
         meta_props.put("service-statistics", "N/A");
-        
+
+        if ( isStartable() ) {
+            meta_props.put("ping-only", "true");
+        } else {
+            meta_props.put("ping-only", "false");
+        }
+        saveMetaProperties();
+
         
//UIMAFramework.getLogger(BaseUIMAAsynchronousEngineCommon_impl.class).setLevel(Level.OFF);
         
//UIMAFramework.getLogger(BaseUIMAAsynchronousEngine_impl.class).setLevel(Level.OFF);
         // there are a couple junky messages that slip by the above 
configurations.  turn the whole danged thing off.
@@ -464,6 +475,11 @@ public class ServiceSet
         if ( stopped     ) return;                   // doing auto, but we've 
been manually stopped
         if ( failure_run >= failure_max ) return;    // too  many failures, no 
more enforcement
 
+        if ( (!isStartable()) && (serviceMeta == null) ) {    // ping-only and 
pinger not alive
+            start();                                          // ... then it 
needs to be started
+            return;
+        }
+
         // could have more implementors than instances if some were started 
dynamically but the count not persisted
         int needed = Math.max(0, instances - countImplementors());
 
@@ -758,6 +774,7 @@ public class ServiceSet
                      "ping_class", 
job_props.getStringProperty("service_ping_class", UimaAsPing.class.getName())
                      );
 
+        // This block is to clear the service queue from ActiveMq if it's no 
longer being used.
         if ( implementors.size() == 0 ) {     // Went to 0 and there was a 
pinger?
             if ( ( (service_class == ServiceClass.Registered) && 
isStartable()) || isSubmitted() ) {   // Is one of our happy cases (not 
ping-only, we don't know much about it.)
                 if ( service_type == ServiceType.UimaAs ) {
@@ -803,9 +820,7 @@ public class ServiceSet
             linger = null;
         }
         references.put(id, id);
-        if ( serviceMeta != null ) {
-            serviceMeta.reference();
-        }
+
         persistReferences();
         return references.size();
     }


Reply via email to