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");