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 2015/05/15 14:43:58 UTC

svn commit: r1679555 - in /uima/sandbox/uima-ducc/trunk: uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/ uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/

Author: challngr
Date: Fri May 15 12:43:58 2015
New Revision: 1679555

URL: http://svn.apache.org/r1679555
Log:
UIMA-4358 Serialize service start; don't start until previous instance is scheduled.
          Remove debugging code from CLI.
          Set default CAS small in pinger.

Modified:
    uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccServiceApi.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/UimaAsPing.java
    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-cli/src/main/java/org/apache/uima/ducc/cli/DuccServiceApi.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccServiceApi.java?rev=1679555&r1=1679554&r2=1679555&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccServiceApi.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccServiceApi.java Fri May 15 12:43:58 2015
@@ -996,10 +996,6 @@ public class DuccServiceApi
      */
 	public static void main(String[] args) 
     {        
-        System.out.println(System.getProperty("java.vendor"));
-        System.out.println(System.getProperty("java.version"));
-        System.out.println(System.getProperty("java.home"));
-
         boolean rc = false;
         try {
             switch ( getVerb(args) ) {

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/UimaAsPing.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/UimaAsPing.java?rev=1679555&r1=1679554&r2=1679555&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/UimaAsPing.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/UimaAsPing.java Fri May 15 12:43:58 2015
@@ -179,6 +179,7 @@ public class UimaAsPing
         appCtx.put(UimaAsynchronousEngine.ServerUri, broker);
         appCtx.put(UimaAsynchronousEngine.ENDPOINT, endpoint);
         appCtx.put(UimaAsynchronousEngine.GetMetaTimeout, meta_timeout);
+        appCtx.put(UIMAFramework.CAS_INITIAL_HEAP_SIZE, 1000);
 
         ResourceInitializationException excp = null;
         gmfail = false;

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=1679555&r1=1679554&r2=1679555&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 Fri May 15 12:43:58 2015
@@ -134,6 +134,9 @@ public class ServiceHandler
         List<ServiceSet> services = serviceStateHandler.getServices();
         for ( ServiceSet sset : services ) {
             sset.bootComplete();
+            if ( sset.countImplementors() > 0 ) {            // if something was running, let's make sure all the starts are done
+                sset.start();
+            }
         }
     }
 

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=1679555&r1=1679554&r2=1679555&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 Fri May 15 12:43:58 2015
@@ -480,7 +480,7 @@ public class ServiceSet
         si.setInstanceId(pending_instances.get(id.getFriendly())); // UIMA-4258
 
         handler.addInstance(this, si);
-        pendingImplementors.put(id.getFriendly(), si);
+        pendingImplementors.put(id.getFriendly(), si);        // remember which instances we hear about in current OR publication
     }
 
     /**
@@ -488,13 +488,14 @@ public class ServiceSet
      */
     void bootComplete()
     {
+        String methodName = "bootComplete";
         //
         // During boot, inactive implementors are removed.  Here we cull the implementors list to
         // remove stuff that didn't come in.
         //
 
         if ( isPingOnly() && enabled() ) {
-            start(1);   // nothing to recover but we need the pseudo service to run
+            start();   // nothing to recover but we need the pseudo service to run
             return;   
         }
         implementors = pendingImplementors;   // only the ones that check in.  others are toast
@@ -503,7 +504,7 @@ public class ServiceSet
         // must update history against stuff we used to have and don't any more
         //
         String old_impls = meta_props.getProperty(implementors_key);
-        logger.info("bootComplete", id, "IMPLS :", old_impls);
+        logger.info(methodName, id, "Old implementors :", old_impls);
         if ( old_impls != null ) {
             Map<String, String> ip = new HashMap<String, String>();
             String[]   keys = old_impls.split("\\s+");
@@ -578,7 +579,7 @@ public class ServiceSet
         int needed = Math.max(0, instances - countImplementors());
         if ( needed > 0 ) {
             logger.info(methodName, id, "Autostarting", needed, "instance" + ((needed > 1) ? "s" : ""), "already have", countImplementors());
-            start(needed);
+            start();
         }
     }
     
@@ -1008,7 +1009,7 @@ public class ServiceSet
             int diff       = n - running;
                 
             if ( diff > 0 ) {
-                start(diff);
+                start();
             } else if ( diff < 0 ) {
                 stop(-diff); // TODO: no good, fix when changeTo is ready
             }
@@ -1192,7 +1193,7 @@ public class ServiceSet
             init_failures = 0;
             resetRuntimeErrors();
             setReferenced(true);
-            start(registered_instances);
+            start();
         } 
 
         persistReferences();
@@ -1257,7 +1258,7 @@ public class ServiceSet
         // to 'reboot' an instance by killing a specific one and also starting up a new one.
         
         if ( nadditions > 0) {
-            start(nadditions);
+            start();
         }
         
         for ( int i = 0; i < ndeletions; i++ ) {
@@ -1294,6 +1295,31 @@ public class ServiceSet
         }
     }
 
+    /**
+     * We want to be sure the most-recently started instance get resources before 
+     * allowing a new start.
+     */
+    boolean needNextStart(JobState old, JobState current)
+    {
+        switch ( old ) {
+            case Received:
+            case WaitingForDriver:
+            case WaitingForServices:
+            case WaitingForResources:
+                switch (current) {
+                    case Assigned:
+                    case Initializing:
+                    case Running:
+                        return true;
+                    default:
+                        break;
+                }
+            default:
+                break;
+        }
+        return false;
+    }
+
     void removeImplementor(ServiceInstance si)
     {
     	String methodName = "removeImplementor";
@@ -1329,6 +1355,12 @@ public class ServiceSet
         }
 
         boolean save_meta = false;
+
+        if ( needNextStart(old_state, state) ) {
+            // sequnced startup
+            start();
+        }
+
         if ( canDeleteInstance(dwj) ) {
             // State Completed or Completing
             JobCompletionType jct = dwj.getCompletionType();
@@ -1352,7 +1384,7 @@ public class ServiceSet
                 
                 // You can stop an instance with the ducc_services CLI, in which case this counts as a manual stop and not
                 // an error.  Or the thing can go away for no clear reason, in which case it does as an error, even if somebody
-                // use the DuccServiceCancel API to stop it.
+                 // use the DuccServiceCancel API to stop it.
                 //
                 // TODO: Update the ducc_services CLI to allow stop and restart of specific instances without counting failure.
                 if ( stoppedInstance.isStopped() ) {
@@ -1393,7 +1425,7 @@ public class ServiceSet
                         save_meta = true;
                     } else {
                         logger.warn(methodName, id, "Instance", inst_id + ": Uunsolicited termination, not yet excessive.  Restarting instance.");
-                        start(1);
+                        start();
                         return;         // don't use termination to set state - start will signal the state machine
                     }
                 }
@@ -1981,10 +2013,14 @@ public class ServiceSet
         stash_instance_id(instid);        
     }
 
-    synchronized void start(int ninstances)
+    synchronized void start()
     {
     	String methodName = "start";
 
+        if ( countImplementors() >= instances ) {
+            return;
+        }
+
         if ( isPingOnly() ) {
             if ( implementors.containsKey(-1l) ) {
                 logger.info(methodName, id, "PING_ONLY: already started.");
@@ -2005,30 +2041,22 @@ public class ServiceSet
                     logger.warn(methodName, id, "Ignoring start of additional instances because process_debug is set.");
                     return;         // only one, in debug
                 }
-
-                if ( ninstances > 1 ) {
-                    ninstances = 1;                                  // and alter the number here.
-                    logger.warn(methodName, id, "Adjusting instances to one(1) because process_debug is set.");
-                }
             }
 
-            for ( int i = 0; i < ninstances; i++ ) {
-                ServiceInstance si = new ServiceInstance(this);
-                si.setInstanceId(find_next_instance());
-                long instid = -1L;
-                logger.info(methodName, id, "Starting instance", i);
-                if ( (instid = si.start(props_filename, meta_props)) >= 0 ) {
-                    logger.info(methodName, id, "Instance[", i, "] id ", instid);
-                    implementors.put(instid, si);
-                    handler.addInstance(this, si);
-                    signal(si);
-                } else {
-                    logger.info(methodName, id, "Instance[", i, "] id ", instid, "Failed to start.");
-                    disable("Cannot submit service process");
-                    signal(si);
-                    break;
-                }
-            }        
+            ServiceInstance si = new ServiceInstance(this);
+            si.setInstanceId(find_next_instance());
+            long inst_ducc_id = -1L;
+            logger.info(methodName, id, "Starting instance. Current count", countImplementors(), "needed", instances);
+            if ( (inst_ducc_id = si.start(props_filename, meta_props)) >= 0 ) {
+                implementors.put(inst_ducc_id, si);
+                handler.addInstance(this, si);
+                signal(si);
+                logger.info(methodName, id, "Instance[", countImplementors(), "] ducc_id ", inst_ducc_id);
+            } else {
+                logger.info(methodName, id, "Instance[", countImplementors(), "] ducc_id ", inst_ducc_id, "Failed to start.");
+                disable("Cannot submit service process");
+                signal(si);
+            }
         }    
 
         saveMetaProperties();