Author: degenaro
Date: Fri Nov  1 14:03:25 2019
New Revision: 1869261

URL: http://svn.apache.org/viewvc?rev=1869261&view=rev
Log:
UIMA-6142 DUCC Orchestrator (OR) not killing Job when first JP fails to 
initialize

Modified:
    
uima/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/StateManager.java
    
uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/DuccProcess.java
    
uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/IDuccProcess.java

Modified: 
uima/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/StateManager.java
URL: 
http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/StateManager.java?rev=1869261&r1=1869260&r2=1869261&view=diff
==============================================================================
--- 
uima/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/StateManager.java
 (original)
+++ 
uima/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/StateManager.java
 Fri Nov  1 14:03:25 2019
@@ -18,6 +18,7 @@
 */
 package org.apache.uima.ducc.orchestrator;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -1538,6 +1539,26 @@ public class StateManager {
                logger.trace(methodName, null, messages.fetch("exit"));
        }
 
+       private DuccId getFirstFailedInitialization(DuccWorkJob job) {
+               String methodName = "getFirstFailedInitialization";
+               DuccId retVal = null;
+               try {
+                       IDuccProcessMap processMap = job.getProcessMap();
+                       ArrayList<DuccId> list = 
processMap.getFailedInitialization();
+                       for(DuccId duccId : list) {
+                               IDuccProcess process = 
processMap.getProcess(duccId);
+                               if(process.getSeqNo() == 0) {
+                                       retVal = duccId;
+                                       break;
+                               }
+                       }
+               }
+               catch(Throwable t) {
+                       logger.error(methodName, null, t);
+               }
+               return retVal;
+       }
+       
        private void inventoryJob(IDuccWork duccWork, IDuccProcess 
inventoryProcess) {
                String methodName = "inventoryJob";
                DuccWorkJob job = (DuccWorkJob) duccWork;
@@ -1600,7 +1621,16 @@ public class StateManager {
                                        }
                                        long initFailureCount = 
job.getProcessInitFailureCount();
                                        long startup_initialization_error_limit 
= 
DuccPropertiesResolver.get(DuccPropertiesResolver.ducc_jd_startup_initialization_error_limit,
 1);
-                                       if(initFailureCount >= 
startup_initialization_error_limit) {
+                                       DuccId pid = 
getFirstFailedInitialization(job);
+                                       if(pid != null) {
+                                               String reason = "process 
inititialization failure on first job process";
+                                               logger.warn(methodName, 
job.getDuccId(), pid, reason);
+                                               JobCompletionType 
jobCompletionType = JobCompletionType.CanceledBySystem;
+                                               Rationale rationale = new 
Rationale(reason);
+                                               ProcessDeallocationType 
processDeallocationType = ProcessDeallocationType.JobCanceled;
+                                               stateManager.jobTerminate(job, 
jobCompletionType, rationale, processDeallocationType);
+                                       }
+                                       else if(initFailureCount >= 
startup_initialization_error_limit) {
                                                String reason = "process 
inititialization failure count["+initFailureCount+"] meets startup 
initialization error limit["+startup_initialization_error_limit+"]";
                                                logger.warn(methodName, 
job.getDuccId(), reason);
                                                JobCompletionType 
jobCompletionType = JobCompletionType.CanceledBySystem;

Modified: 
uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/DuccProcess.java
URL: 
http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/DuccProcess.java?rev=1869261&r1=1869260&r2=1869261&view=diff
==============================================================================
--- 
uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/DuccProcess.java
 (original)
+++ 
uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/DuccProcess.java
 Fri Nov  1 14:03:25 2019
@@ -20,6 +20,7 @@ package org.apache.uima.ducc.transport.e
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.concurrent.atomic.AtomicLong;
 
 import org.apache.uima.ducc.common.Node;
 import org.apache.uima.ducc.common.NodeIdentity;
@@ -52,6 +53,7 @@ public class DuccProcess implements IDuc
         */
        private static final long serialVersionUID = 1L;
        private long dataVersion=1;
+       private long seqNo = 0; // each JP for a job gets a seqNo; first one is 
0 and is special with respect to Initialization Failure
        private DuccId duccId = null;
        private Node  node = null;
        private NodeIdentity  nodeIdentity = null;
@@ -81,12 +83,16 @@ public class DuccProcess implements IDuc
        private long wiMillisInvestment;
        private long currentCPU;
        
+       private AtomicLong sequencer = new AtomicLong(0);
+       
        public DuccProcess(DuccId duccId, NodeIdentity nodeIdentity) {
+               seqNo = sequencer.getAndIncrement();
                setDuccId(duccId);
                setNodeIdentity(nodeIdentity);
        }
        
        public DuccProcess(DuccId duccId, Node node) {
+               seqNo = sequencer.getAndIncrement();
                setDuccId(duccId);
                setNode(node);
                NodeIdentity nodeIdentity = node.getNodeIdentity();
@@ -94,12 +100,14 @@ public class DuccProcess implements IDuc
        }
        
        public DuccProcess(DuccId duccId, NodeIdentity nodeIdentity, 
ProcessType processType) {
+               seqNo = sequencer.getAndIncrement();
                setDuccId(duccId);
                setNodeIdentity(nodeIdentity);
                setProcessType(processType);
        }
        
        public DuccProcess(DuccId duccId, Node node, ProcessType processType) {
+               seqNo = sequencer.getAndIncrement();
                setDuccId(duccId);
                setNode(node);
                NodeIdentity nodeIdentity = node.getNodeIdentity();
@@ -107,6 +115,10 @@ public class DuccProcess implements IDuc
                setProcessType(processType);
        }
        
+       public long getSeqNo() {
+               return seqNo;
+       }
+       
        public long getDataVersion() {
                long retVal = 0;
                try {

Modified: 
uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/IDuccProcess.java
URL: 
http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/IDuccProcess.java?rev=1869261&r1=1869260&r2=1869261&view=diff
==============================================================================
--- 
uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/IDuccProcess.java
 (original)
+++ 
uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/IDuccProcess.java
 Fri Nov  1 14:03:25 2019
@@ -36,6 +36,8 @@ public interface IDuccProcess extends Se
        
        public long getDataVersion();
        
+       public long getSeqNo();
+       
        public DuccId getDuccId();
        public void setDuccId(DuccId duccId);
        


Reply via email to