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/03/26 20:33:15 UTC

svn commit: r1669416 - in /uima/sandbox/uima-ducc/trunk: uima-ducc-cli/src/test/java/org/apache/uima/ducc/cli/test/ uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/sm/

Author: challngr
Date: Thu Mar 26 19:33:15 2015
New Revision: 1669416

URL: http://svn.apache.org/r1669416
Log:
UIMA-4309 Track last valid ping and instance running time.  Also clean up API to use primitive types
          instead of ADuccID.

Modified:
    uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/test/java/org/apache/uima/ducc/cli/test/ServiceTester.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceManagerComponent.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceSet.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/sm/IServiceDescription.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/sm/ServiceDescription.java

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/test/java/org/apache/uima/ducc/cli/test/ServiceTester.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/test/java/org/apache/uima/ducc/cli/test/ServiceTester.java?rev=1669416&r1=1669415&r2=1669416&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/test/java/org/apache/uima/ducc/cli/test/ServiceTester.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/test/java/org/apache/uima/ducc/cli/test/ServiceTester.java Thu Mar 26 19:33:15 2015
@@ -34,7 +34,6 @@ import org.apache.uima.ducc.cli.DuccServ
 import org.apache.uima.ducc.cli.IDuccCallback;
 import org.apache.uima.ducc.common.IServiceStatistics;
 import org.apache.uima.ducc.common.utils.DuccProperties;
-import org.apache.uima.ducc.common.utils.id.ADuccId;
 import org.apache.uima.ducc.transport.event.sm.IServiceDescription;
 import org.apache.uima.ducc.transport.event.sm.IServiceReply;
 
@@ -138,10 +137,10 @@ public class ServiceTester
         sb.append("\n");
 
         sb.append("   Implementors      : ");
-        List<ADuccId> implementors = desc.getImplementors();
-        if ( implementors.size() > 0 ) {
-            for (ADuccId id : implementors) {
-                sb.append(id.getFriendly());
+        Long[] implementors = desc.getImplementors();
+        if ( implementors.length > 0 ) {
+            for (Long id : implementors) {
+                sb.append(id);
                 sb.append(" ");
             }
         } else {
@@ -150,10 +149,10 @@ public class ServiceTester
         sb.append("\n");
          
         sb.append("   References        : ");
-        List<ADuccId> references = desc.getReferences();
-        if ( references.size() > 0 ) {
-            for ( ADuccId id : references ) {
-                sb.append(id.getFriendly());
+        Long[] references = desc.getReferences();
+        if ( references.length > 0 ) {
+            for ( Long id : references ) {
+                sb.append(id);
                 sb.append(" ");
             }
         } else {
@@ -191,7 +190,7 @@ public class ServiceTester
         if ( autostart )            { sb.append("autostart"); }
         else if ( reference_start ) { sb.append("reference"); }
         else {
-            if ( implementors.size() > 0 ) { 
+            if ( implementors.length > 0 ) { 
                 sb.append("manual"); 
             } else {
                 sb.append("stopped");
@@ -336,21 +335,21 @@ public class ServiceTester
 
             do {
                 IServiceDescription desc = getServiceDescription(id);
-                List<ADuccId> implementors = desc.getImplementors();
+                Long[] implementors = desc.getImplementors();
 
                 if ( desc.isAutostart()      && desired_state.equals("autostart") ) return true;
                 if ( desc.isReferenceStart() && desired_state.equals("reference") ) return true;
 
                 if ( !desc.isAutostart() && (!desc.isReferenceStart()) ) {
-                    if ( implementors.size() >  0 && desired_state.equals("manual") ) return true;
-                    if ( implementors.size() == 0 && desired_state.equals("stopped") ) return true;
+                    if ( implementors.length >  0 && desired_state.equals("manual") ) return true;
+                    if ( implementors.length == 0 && desired_state.equals("stopped") ) return true;
                 }
                 
                 if ( ++count > default_timeout ) {
                     System.out.println("Query times out after " + count + " tries.");
                     return false;                    
                 }
-                System.out.println(" ... autostart " + desc.isAutostart() + " reference " + desc.isReferenceStart() + " n_implementors " + implementors.size());
+                System.out.println(" ... autostart " + desc.isAutostart() + " reference " + desc.isReferenceStart() + " n_implementors " + implementors.length);
 			    Thread.sleep(5000);
 			} while ( true );
 		} catch (Exception e) {

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceManagerComponent.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceManagerComponent.java?rev=1669416&r1=1669415&r2=1669416&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceManagerComponent.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceManagerComponent.java Thu Mar 26 19:33:15 2015
@@ -125,7 +125,8 @@ public class ServiceManagerComponent
     //    1.1.3 - added shutdown hook, pinger last-use, pinger disable autostart
     //    1.1.4 - dynamic mod of all registration parms.  Add debug and max-init-time parms.
     //    1.1.0 - resync with release, sigh.
-    String version = "1.1.0";
+    //    2.0.0 - Update for new release.
+    String version = "2.0.0";
 
 	public ServiceManagerComponent(CamelContext context) 
     {

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=1669416&r1=1669415&r2=1669416&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 Thu Mar 26 19:33:15 2015
@@ -43,7 +43,6 @@ import org.apache.uima.ducc.common.IServ
 import org.apache.uima.ducc.common.TcpStreamHandler;
 import org.apache.uima.ducc.common.utils.DuccLogger;
 import org.apache.uima.ducc.common.utils.DuccProperties;
-import org.apache.uima.ducc.common.utils.id.ADuccId;
 import org.apache.uima.ducc.common.utils.id.DuccId;
 import org.apache.uima.ducc.transport.event.common.DuccWorkJob;
 import org.apache.uima.ducc.transport.event.common.IDuccCompletionType.JobCompletionType;
@@ -124,6 +123,12 @@ public class ServiceSet
     // Date of last known use of the service.  0 means "I don't know"
     long last_use = 0;
 
+    // Date of last known succesful ping of the service.  0 means never.  UIMA-4309
+    long last_ping = 0;
+
+    // Date of last known time any instance made it to Running state.  0 means never. UIMA-4309
+    long last_runnable = 0;
+
     // The number of instances to maintain live.
     int instances = 1;
     int registered_instances;
@@ -232,11 +237,9 @@ public class ServiceSet
         meta_props.put("service-statistics", "N/A");
         setReferenced(this.reference_start);
 
-        last_use = meta_props.getLongProperty("last-use", 0L);
-        if ( last_use == 0 ) {
-            meta_props.put("last-use", "0");
-            meta_props.put("last-use-readable", "Unknown");
-        }
+        setLastUse(meta_props.getLongProperty("last-use", 0L));
+        setLastPing(meta_props.getLongProperty("last-ping", 0L));
+        setLastRunnable(meta_props.getLongProperty("last-runnable", 0L));
 
         if ( (!job_props.containsKey(UiOption.ProcessExecutable.pname())) && (service_type != ServiceType.UimaAs) ) {
             meta_props.put("ping-only", "true");
@@ -610,15 +613,53 @@ public class ServiceSet
         return last_use;
     }
 
+    // UIMA-4309
+    long getLastPing()
+    {
+        return last_ping;
+    }
+
+    // UIMA-4309
+    long getLastRunnable()
+    {
+        return last_runnable;
+    }
+
     synchronized void setLastUse(long lu)
     {
         this.last_use = lu;
         meta_props.put("last-use", Long.toString(lu));
-        if ( last_use != 0 ) {
+        if ( last_use == 0 ) {
+            meta_props.put("last-use-readable", "Unknown");
+        } else {
             meta_props.put("last-use-readable", (new Date(lu)).toString());
         }
     }
 
+    // UIMA-4309
+    synchronized void setLastPing(long lp)
+    {
+        this.last_ping = lp;
+        meta_props.put("last-ping", Long.toString(lp));
+        if ( last_ping == 0 ) {
+            meta_props.put("last-ping-readable", "Unknown");
+        } else {
+            meta_props.put("last-ping-readable", (new Date(lp)).toString());
+        }
+    }
+
+    // UIMA-4309
+    synchronized void setLastRunnable(long lr)
+    {
+        this.last_runnable = lr;
+        meta_props.put("last-runnable", Long.toString(lr));
+        if ( last_runnable == 0 ) {
+            meta_props.put("last-runnable-readable", "Unknown");
+        } else {
+            meta_props.put("last-runnable-readable", (new Date(lr)).toString());
+        }
+    }
+
     synchronized void resetRuntimeErrors()
     {
         run_failures = 0;
@@ -887,6 +928,10 @@ public class ServiceSet
                 meta_props.put("service-alive",      "" + ss.isAlive());
                 meta_props.put("service-healthy",    "" + ss.isHealthy());
                 meta_props.put("service-statistics", "" + ss.getInfo());
+
+                if ( ss.isAlive() ) {                    // UIMA-4309
+                    setLastPing(System.currentTimeMillis());
+                }
             }
         }
 
@@ -1412,6 +1457,7 @@ public class ServiceSet
         // These are all idempotent actions, call them as often as you want and no harm.
         switch(new_state) {            
             case Available: 
+                setLastRunnable(System.currentTimeMillis());
                 startPingThread();
                 break;
             case Initializing:
@@ -1419,6 +1465,7 @@ public class ServiceSet
             case Starting:
                 break;
             case Waiting:
+                setLastRunnable(System.currentTimeMillis());
                 startPingThread();
                 break;
             case Stopping:
@@ -2055,18 +2102,20 @@ public class ServiceSet
     {
         IServiceDescription sd = new ServiceDescription();
         
-        ArrayList<ADuccId> imp = new ArrayList<ADuccId>();
+        ArrayList<Long> impls = new ArrayList<Long>();
+        ArrayList<Integer> instids = new ArrayList<Integer>();
         for ( Long id : implementors.keySet() ) {
-            // Note: For compatibility with earliver version, we'll send these out as DuccIds, not Longs
-            DuccId di = new DuccId(id); 
-            imp.add(di);
+            // UIMA-4258 Add instance id to ducc id when saving
+            ServiceInstance inst = implementors.get(id);            
+            impls.add(id);
+            instids.add(inst.getInstanceId());
         }
-        sd.setImplementors(imp);
+        sd.setImplementors(impls, instids);
 
-        ArrayList<ADuccId> ref = new ArrayList<ADuccId>();
+        ArrayList<Long> ref = new ArrayList<Long>();
         ref.clear();
         for ( DuccId id : references.keySet() ) {
-            ref.add(id);
+            ref.add(id.getFriendly());
         }
         sd.setReferences(ref);
 
@@ -2081,10 +2130,12 @@ public class ServiceSet
         sd.setEnabled(enabled());
         sd.setAutostart(isAutostart());
         sd.setLinger(linger_time);
-        sd.setId(id);
+        sd.setId(id.getFriendly());
         sd.setUser(user);
         sd.setDisableReason(meta_props.getStringProperty("disable-reason", null));
         sd.setLastUse(last_use);
+        sd.setLastPing(last_ping);            // UIMA-4309
+        sd.setLastRunnable(last_runnable);    // UIMA-4309
         sd.setRegistrationDate(meta_props.getStringProperty("registration-date", ""));
         sd.setReferenceStart(reference_start);
         sd.setErrorString(meta_props.getStringProperty("submit-error", null));

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/sm/IServiceDescription.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/sm/IServiceDescription.java?rev=1669416&r1=1669415&r2=1669416&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/sm/IServiceDescription.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/sm/IServiceDescription.java Thu Mar 26 19:33:15 2015
@@ -22,7 +22,6 @@ import java.util.ArrayList;
 import java.util.Map;
 
 import org.apache.uima.ducc.common.IServiceStatistics;
-import org.apache.uima.ducc.common.utils.id.ADuccId;
 import org.apache.uima.ducc.transport.event.common.IDuccState.JobState;
 
 /**
@@ -40,11 +39,11 @@ public interface IServiceDescription
     /**
      * This returns the Unique ID of the service as assigned by DUCC.
      */
-	public ADuccId getId();
+	public Long getId();
     /**
      * Internal to DUCC.
      */
-	public void setId(ADuccId id);
+	public void setId(Long id);
 
     /**
      * Get the owner of the service
@@ -60,19 +59,27 @@ public interface IServiceDescription
      * implement this service.  If the list is empty, no known implementors of the service
      * are being managed by DUCC.
      *
-     * @return List of DUCC Ids of service implementors.
+     * @return List of DUCC Ids of service implementors.  Parallel array with getInstanceIds().
      */
-	public ArrayList<ADuccId> getImplementors();
+	public Long[] getImplementors();
+
+    /**
+     * This returns the list of contant instance ids for multi-instance services.
+     *
+     * @return List of service instance ids.  Parallel array with getImplementors().
+     */
+	public Integer[] getInstanceIds();
+
     /**
      * Internal to DUCC.
      */
-	public void setImplementors(ArrayList<ADuccId> implementors);
+	public void setImplementors(ArrayList<Long> implementors, ArrayList<Integer> instancids);
 
-	public ArrayList<ADuccId> getReferences();
+	public Long[] getReferences();
     /**
      * Internal to DUCC.
      */
-	public void setReferences(ArrayList<ADuccId> references);
+	public void setReferences(ArrayList<Long> references);
 
 	public ServiceType getType();
     /**
@@ -140,6 +147,16 @@ public interface IServiceDescription
     public long getLastUse();
     public String getLastUseString();
 
+    // UIMA-4309
+    public void setLastPing(long last_ping);
+    public long getLastPing();
+    public String getLastPingString();
+
+    // UIMA-4309
+    public void setLastRunnable(long last_runnable);
+    public long getLastRunnable();
+    public String getLastRunnableString();
+
     public void setRegistrationDate(String d);
     public String getRegistrationDate();
 

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/sm/ServiceDescription.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/sm/ServiceDescription.java?rev=1669416&r1=1669415&r2=1669416&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/sm/ServiceDescription.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/sm/ServiceDescription.java Thu Mar 26 19:33:15 2015
@@ -24,7 +24,6 @@ import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.uima.ducc.common.IServiceStatistics;
-import org.apache.uima.ducc.common.utils.id.ADuccId;
 import org.apache.uima.ducc.transport.event.common.IDuccState.JobState;
 
 
@@ -38,10 +37,11 @@ public class ServiceDescription
 	private static final long serialVersionUID = 1L;
 
 	// For submitted and registered services
-    private ArrayList<ADuccId> implementors;
+    private Long[] implementors;
+    private Integer[] instance_ids;
 
     // key is job/service id, value is same.  it's a map for fast existence check
-    private ArrayList<ADuccId> references;
+    private Long[] references;
 
     // UIMA-AS or CUSTOM
     private ServiceType type;
@@ -70,7 +70,7 @@ public class ServiceDescription
     private String  disable_reason = null;
 
     // for submitted service, the registered service id
-    private ADuccId id;
+    private Long id;
     private String  user;                 // the owner of the service
     private boolean deregistered;         // still known but trying to shutdown
 
@@ -84,15 +84,17 @@ public class ServiceDescription
 
     private String error_string = null;
     private long last_use = 0;
+    private long last_ping = 0;                // UIMA-4309
+    private long last_runnable = 0;            // UIMA-4309
 
     private String registration_date = null;
     private boolean reference_start = true;
 
-	public ADuccId getId() {
+	public Long getId() {
 		return id;
 	}
 
-	public void setId(ADuccId id) {
+	public void setId(Long id) {
 		this.id = id;
 	}
 
@@ -106,20 +108,25 @@ public class ServiceDescription
         this.user = user;
     }
 
-	public ArrayList<ADuccId> getImplementors() {
+	public Long[] getImplementors() {
 		return implementors;
 	}
 
-	public void setImplementors(ArrayList<ADuccId> implementors) {
-		this.implementors = implementors;
+	public Integer[] getInstanceIds() {
+		return instance_ids;
 	}
 
-	public ArrayList<ADuccId> getReferences() {
+	public void setImplementors(ArrayList<Long> implementors, ArrayList<Integer> instance_ids) {
+		this.implementors = implementors.toArray(new Long[implementors.size()]);
+        this.instance_ids = instance_ids.toArray(new Integer[instance_ids.size()]);
+	}
+
+	public Long[] getReferences() {
 		return references;
 	}
 
-	public void setReferences(ArrayList<ADuccId> references) {
-		this.references = references;
+	public void setReferences(ArrayList<Long> references) {
+		this.references = references.toArray(new Long[references.size()]);
 	}
 
 	public ServiceType getType() {
@@ -249,6 +256,50 @@ public class ServiceDescription
         }
     }
 
+    // UIMA-4309
+    public void setLastPing(long l)
+    {
+        this.last_ping = l;
+    }
+
+    // UIMA-4309
+    public long getLastPing()
+    {
+        return this.last_ping;
+    }
+
+    // UIMA-4309
+    public String getLastPingString()
+    {
+        if ( last_ping == 0) {
+            return "N/A";
+        }  else {
+            return (new Date(last_ping)).toString();
+        }
+    }
+
+    // UIMA-4309
+    public void setLastRunnable(long l)
+    {
+        this.last_runnable = l;
+    }
+
+    // UIMA-4309
+    public long getLastRunnable()
+    {
+        return this.last_runnable;
+    }
+
+    // UIMA-4309
+    public String getLastRunnableString()
+    {
+        if ( last_runnable == 0) {
+            return "N/A";
+        }  else {
+            return (new Date(last_runnable)).toString();
+        }
+    }
+
     public void setRegistrationDate(String s)
     {
         this.registration_date = s;
@@ -349,9 +400,11 @@ public class ServiceDescription
         sb.append("\n");
 
         sb.append("   Implementors      : ");
-        if ( implementors.size() > 0 ) {
-            for (ADuccId id : implementors) {
-                sb.append(id);
+        if ( implementors.length > 0 ) {
+            for ( int i = 0; i < implementors.length; i++ ) {
+                sb.append(implementors[i]);
+                sb.append(".");
+                sb.append(instance_ids[i]);
                 sb.append(" ");
             }
         } else {
@@ -360,8 +413,8 @@ public class ServiceDescription
         sb.append("\n");
 
         sb.append("   References        : ");
-        if ( references.size() > 0 ) {
-            for ( ADuccId id : references ) {
+        if ( references.length > 0 ) {
+            for ( Long id : references ) {
                 sb.append(id);
                 sb.append(" ");
             }
@@ -396,7 +449,7 @@ public class ServiceDescription
         if ( autostart )            { sb.append("autostart"); }
         else if ( reference_start ) { sb.append("reference"); }
         else {
-            if ( implementors.size() > 0 ) {
+            if ( implementors.length > 0 ) {
                 sb.append("manual"); 
             } else {
                 sb.append("stopped");
@@ -415,6 +468,16 @@ public class ServiceDescription
         sb.append(getLastUseString());
         sb.append("\n");
 
+        // UIMA-4309
+        sb.append("   Last Ping         : ");
+        sb.append(getLastPingString());
+        sb.append("\n");
+
+        // UIMA-4309
+        sb.append("   Last Runnable     : ");
+        sb.append(getLastRunnableString());
+        sb.append("\n");
+
         sb.append("   Registration Date : ");
         sb.append(registration_date);
         sb.append("\n");