You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by cw...@apache.org on 2015/04/06 21:17:41 UTC

svn commit: r1671660 - in /uima/sandbox/uima-ducc/trunk: uima-ducc-common/src/main/java/org/apache/uima/ducc/common/config/ uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/configuration/jp/

Author: cwiklik
Date: Mon Apr  6 19:17:41 2015
New Revision: 1671660

URL: http://svn.apache.org/r1671660
Log:
UIMA-4321 The JP exits when configured framework error count reaches a limit. Added support for new property ducc.process.framework.error.limit to set error threshold

Modified:
    uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/config/CommonConfiguration.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/configuration/jp/HttpWorkerThread.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/configuration/jp/JobProcessComponent.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/configuration/jp/JobProcessConfiguration.java

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/config/CommonConfiguration.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/config/CommonConfiguration.java?rev=1671660&r1=1671659&r2=1671660&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/config/CommonConfiguration.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/config/CommonConfiguration.java Mon Apr  6 19:17:41 2015
@@ -204,6 +204,10 @@ public class CommonConfiguration {
 	@Value("#{ systemProperties['ducc.process.uima.container.class'] }")
 	public String uimaProcessContainerClass;
 
+	// Fetch the JP framework error threshold
+	@Value("#{ systemProperties['ducc.process.framework.error.limit'] }")
+	public String jpFrameworkErrorLimit;
+
 	// Fetch the container class
 	@Value("#{ systemProperties['ducc.process.thread.sleep.time'] }")
 	public String processThreadSleepTime;

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/configuration/jp/HttpWorkerThread.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/configuration/jp/HttpWorkerThread.java?rev=1671660&r1=1671659&r2=1671660&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/configuration/jp/HttpWorkerThread.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/configuration/jp/HttpWorkerThread.java Mon Apr  6 19:17:41 2015
@@ -55,16 +55,18 @@ public class HttpWorkerThread implements
     		new AtomicInteger();
     private Map<String, IMetaCasTransaction> transactionMap =
     		new ConcurrentHashMap<String, IMetaCasTransaction>();
-
+    static AtomicInteger maxFrameworkFailures;
 	public HttpWorkerThread(JobProcessComponent component, DuccHttpClient httpClient,
 			Object processorInstance, CountDownLatch workerThreadCount,
-			CountDownLatch threadReadyCount, Map<String, IMetaCasTransaction> transactionMap) {
+			CountDownLatch threadReadyCount, Map<String, IMetaCasTransaction> transactionMap,
+			AtomicInteger maxFrameworkFailures ) {
 		this.duccComponent = component;
 		this.httpClient = httpClient;
 		this.processorInstance = processorInstance;
 		this.workerThreadCount = workerThreadCount;
 		this.threadReadyCount = threadReadyCount;
 		this.transactionMap = transactionMap;
+		this.maxFrameworkFailures = maxFrameworkFailures;
 	}
 	@SuppressWarnings("unchecked")
 	public void run() {
@@ -309,9 +311,13 @@ public class HttpWorkerThread implements
 				}
 				catch (Exception e ) {
 					logger.error("run", null, e);
-					logger.error("run", null, "Caught Unexpected Exception - Exiting Thread "+Thread.currentThread().getId() );
+					logger.error("run", null, "The Job Process Terminating Due To Framework Error");
 					e.printStackTrace();
-					break; 
+					// If max framework error count has been reached 
+					// just exit the process
+					if ( maxFrameworkFailures.decrementAndGet() <= 0 ) {
+						Runtime.getRuntime().halt(-1);
+					}
 				} finally {
 
 				}

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/configuration/jp/JobProcessComponent.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/configuration/jp/JobProcessComponent.java?rev=1671660&r1=1671659&r2=1671660&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/configuration/jp/JobProcessComponent.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/configuration/jp/JobProcessComponent.java Mon Apr  6 19:17:41 2015
@@ -30,6 +30,7 @@ import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
 import java.util.concurrent.ScheduledThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.camel.CamelContext;
 import org.apache.commons.httpclient.methods.PostMethod;
@@ -57,6 +58,7 @@ implements IJobProcessor{
 	private int threadSleepTime = 5000; // time to sleep between GET requests if JD sends null CAS
 	private CountDownLatch workerThreadCount = null;
 	private CountDownLatch threadReadyCount=null;
+	private AtomicInteger maxFrameworkFailures = null;
 	ScheduledThreadPoolExecutor executor = null;
 	ExecutorService tpe = null;
     private volatile boolean uimaASJob=false;
@@ -88,6 +90,9 @@ implements IJobProcessor{
     public void setThreadSleepTime(int sleepTime) {
     	threadSleepTime = sleepTime;
     }
+    public void setMaxFrameworkFailures(int limit) throws Exception {
+    	maxFrameworkFailures = new AtomicInteger(limit);
+    }
     public int getThreadSleepTime() {
     	return threadSleepTime;
     }
@@ -251,7 +256,7 @@ implements IJobProcessor{
 		    	// Create and start worker threads that pull Work Items from the JD
 		    	Future<?>[] threadHandles = new Future<?>[scaleout];
 				for (int j = 0; j < scaleout; j++) {
-					threadHandles[j] = tpe.submit(new HttpWorkerThread(this, httpClient, processorInstance, workerThreadCount, threadReadyCount, transactionMap));
+					threadHandles[j] = tpe.submit(new HttpWorkerThread(this, httpClient, processorInstance, workerThreadCount, threadReadyCount, transactionMap, maxFrameworkFailures));
 				}
 				// wait until all process threads initialize
 				threadReadyCount.await();

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/configuration/jp/JobProcessConfiguration.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/configuration/jp/JobProcessConfiguration.java?rev=1671660&r1=1671659&r2=1671660&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/configuration/jp/JobProcessConfiguration.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/configuration/jp/JobProcessConfiguration.java Mon Apr  6 19:17:41 2015
@@ -226,7 +226,12 @@ public class JobProcessConfiguration {
 				common.managedServiceEndpoint = AGENT_ENDPOINT
 						+ serviceSocketPort + jpSocketParams;
 			}
-
+			if ( common.jpFrameworkErrorLimit != null ) {
+				int limit = Integer.parseInt(common.jpFrameworkErrorLimit);
+				duccComponent.setMaxFrameworkFailures(limit);
+			} else {
+				duccComponent.setMaxFrameworkFailures(2);
+			}
 			DuccEventDispatcher eventDispatcher = transport
 					.duccEventDispatcher(
 							common.managedProcessStateUpdateEndpoint,