Author: degenaro Date: Tue Sep 11 18:00:52 2018 New Revision: 1840596 URL: http://svn.apache.org/viewvc?rev=1840596&view=rev Log: UIMA-5851 DUCC Web Server (WS) displays ever increasing Processing Time on Work Items tab
Modified: uima/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/ProcessAccounting.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/DuccProcessWorkItems.java uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/DuccProcessWorkItemsV1.java uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/IDuccProcess.java uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/IDuccProcessWorkItems.java uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandler.java uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/Helper.java Modified: uima/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/ProcessAccounting.java URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/ProcessAccounting.java?rev=1840596&r1=1840595&r2=1840596&view=diff ============================================================================== --- uima/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/ProcessAccounting.java (original) +++ uima/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/ProcessAccounting.java Tue Sep 11 18:00:52 2018 @@ -564,107 +564,6 @@ public class ProcessAccounting { logger.trace(methodName, job.getDuccId(), messages.fetch("exit")); } - private ITimeWindow makeTimeWindow(String ts) { - ITimeWindow tw = new TimeWindow(); - tw.setStart(ts); - tw.setEnd(ts); - return tw; - } - - private void initStop(IDuccWorkJob job, IDuccProcess process) { - String ts = TimeStamp.getCurrentMillis(); - ITimeWindow twi = process.getTimeWindowInit(); - if(twi == null) { - twi = makeTimeWindow(ts); - process.setTimeWindowInit(twi); - } - else { - long i0 = twi.getStartLong(); - long i1 = twi.getEndLong(); - if(i0 != i1) { - if(i1 < i0) { - twi.setEnd(ts); - } - } - } - } - - private void runStart(IDuccWorkJob job, IDuccProcess process) { - ITimeWindow twi = process.getTimeWindowInit(); - ITimeWindow twr = makeTimeWindow(twi.getEnd()); - process.setTimeWindowRun(twr); - } - - private void runStop(IDuccWorkJob job, IDuccProcess process) { - String ts = TimeStamp.getCurrentMillis(); - ITimeWindow twi = process.getTimeWindowInit(); - if(twi == null) { - twi = makeTimeWindow(ts); - process.setTimeWindowRun(twi); - } - ITimeWindow twr = process.getTimeWindowRun(); - if(twr == null) { - twr = makeTimeWindow(twi.getEnd()); - process.setTimeWindowRun(twr); - } - else { - long r0 = twr.getStartLong(); - long r1 = twr.getEndLong(); - if(r0 != r1) { - if(r1 < r0) { - twr.setEnd(ts); - } - } - } - adjustWindows(job, process); - adjustRunTime(job, process); - } - - // <uima-3351> - private void adjustRunTime(IDuccWorkJob job, IDuccProcess process) { - switch(job.getDuccType()) { - case Job: - if(!process.isAssignedWork()) { - ITimeWindow twr = process.getTimeWindowRun(); - if(twr == null) { - twr = new TimeWindow(); - process.setTimeWindowRun(twr); - } - long time = 0; - twr.setStartLong(time); - twr.setEndLong(time); - } - break; - default: - break; - } - } - // </uima-3351> - - private void adjustWindows(IDuccWorkJob job, IDuccProcess process) { - String methodName = "adjustWindows"; - ITimeWindow twi = process.getTimeWindowInit(); - long i0 = twi.getStartLong(); - long i1 = twi.getEndLong(); - ITimeWindow twr = process.getTimeWindowRun(); - long r0 = twr.getStartLong(); - long r1 = twr.getEndLong(); - if(i0 != i1) { - if(r0 != r1) { - if(r0 < i1) { - logger.warn(methodName, job.getDuccId(), process.getDuccId(), "run-start: "+r0+" -> "+i1); - r0 = i1; - twr.setStartLong(r0); - if(r1 < r0) { - logger.warn(methodName, job.getDuccId(), process.getDuccId(), "run-end: "+r1+" -> "+r0); - r1 = r0; - twr.setEndLong(r1); - } - } - } - } - } - private void updateProcessInitilization(IDuccWorkJob job, IDuccProcess inventoryProcess, IDuccProcess process) { switch(inventoryProcess.getProcessState()) { case Started: @@ -689,10 +588,127 @@ public class ProcessAccounting { break; } } - + + private boolean isInitializing(ProcessState ps) { + boolean retVal = false; + if(ps != null) { + switch(ps) { + case Starting: // Process Manager sent request to start the Process + case Started: // Process PID is available + case Initializing: // Process Agent is initializing process + retVal = true; + break; + default: + break; + } + } + return retVal; + } + + private boolean isRunning(ProcessState ps) { + boolean retVal = false; + if(ps != null) { + switch(ps) { + case Running: // Process Agent is processing work items + retVal = true; + break; + default: + break; + } + } + return retVal; + } + + + private boolean isCompleted(ProcessState ps) { + boolean retVal = false; + if(ps != null) { + switch(ps) { + case LaunchFailed: // Process Agent reports process launch failed + case Stopped: // Process Agent reports process stopped + case Failed: // Process Agent reports process failed + case FailedInitialization: // Process Agent reports process failed initialization + case InitializationTimeout: // Process Agent reports process initialization timeout + case Killed: + retVal = true; + break; + default: + break; + } + } + return retVal; + } + + /* + * Agent reports initialization time, but not run time so make adjustment accordingly + */ + private void adjustProcessTime(IDuccWorkJob job, IDuccProcess inventoryProcess, IDuccProcess process) { + String methodName = "adjustProcessTime"; + logger.trace(methodName, job.getDuccId(), messages.fetch("enter")); + long ts = System.currentTimeMillis(); + DuccId jobId = job.getDuccId(); + DuccId prcId = process.getDuccId(); + // orchestrator process state + ProcessState ops = process.getProcessState(); + if(ops == null) { + ops = ProcessState.Undefined; + process.setProcessState(ops); + } + // inventory process state + ProcessState ips = inventoryProcess.getProcessState(); + if(ips == null) { + ips = ProcessState.Undefined; + inventoryProcess.setProcessState(ips); + } + ITimeWindow twi = inventoryProcess.getTimeWindowInit(); + if(twi == null) { + twi = new TimeWindow(); + inventoryProcess.setTimeWindowInit(twi); + } + long twis = twi.getStartLong(); + long twie = twi.getEndLong(); + ITimeWindow twr = inventoryProcess.getTimeWindowRun(); + if(twr == null) { + twr = new TimeWindow(); + inventoryProcess.setTimeWindowRun(twr); + } + long twrs = twr.getStartLong(); + long twre = twr.getEndLong(); + logger.debug(methodName, jobId, prcId, "raw", ips, ops, twis, twie, twrs, twre); + if(isInitializing(ips)) { + // no adjustment + } + else if(isRunning(ips)) { + if(twrs < 0) { + twr.setStartLong(twie); + twrs = twr.getStartLong(); + } + } + else if(isCompleted(ips)) { + if(twrs < 0) { + twr.setStartLong(twie); + twrs = twr.getStartLong(); + } + if(isCompleted(ops)) { + ITimeWindow tw = process.getTimeWindowRun(); + twre = tw.getEndLong(); + twr.setEndLong(twre); + } + else { + if(twre < 0) { + twr.setEndLong(ts); + twre = twr.getEndLong(); + } + } + } + logger.debug(methodName, jobId, prcId, "adj", ips, ops, twis, twie, twrs, twre); + logger.trace(methodName, job.getDuccId(), messages.fetch("exit")); + } + private void updateProcessTime(IDuccWorkJob job, IDuccProcess inventoryProcess, IDuccProcess process) { String methodName = "updateProcessTime"; logger.trace(methodName, job.getDuccId(), messages.fetch("enter")); + adjustProcessTime(job,inventoryProcess,process); switch(inventoryProcess.getProcessState()) { case Starting: // Process Manager sent request to start the Process case Started: // Process PID is available @@ -701,8 +717,6 @@ public class ProcessAccounting { break; case Running: // Process Agent is processing work items copyTimeInit(inventoryProcess, process); - initStop(job, process); - runStart(job, process); copyTimeRun(inventoryProcess, process); break; case LaunchFailed: // Process Agent reports process launch failed @@ -713,8 +727,6 @@ public class ProcessAccounting { case Killed: // Agent forcefully killed the process copyTimeInit(inventoryProcess, process); copyTimeRun(inventoryProcess, process); - initStop(job, process); - runStop(job, process); break; case Undefined: break; @@ -779,6 +791,8 @@ public class ProcessAccounting { } else { logger.trace(methodName, jobId, process.getDuccId(), "active"); + // Process Init & Run times (first, with respect to previous process state if any) + updateProcessTime(job, inventoryProcess, process); // PID copyInventoryPID(job, inventoryProcess, process); // Scheduler State @@ -789,8 +803,6 @@ public class ProcessAccounting { copyReasonForStoppingProcess(job, inventoryProcess, process); // Process Exit code copyProcessExitCode(job, inventoryProcess, process); - // Process Init & Run times - updateProcessTime(job, inventoryProcess, process); // Process Initialization State updateProcessInitilization(job, inventoryProcess, process); // Process Pipeline Components State 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=1840596&r1=1840595&r2=1840596&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 Tue Sep 11 18:00:52 2018 @@ -337,6 +337,18 @@ public class DuccProcess implements IDuc } + public boolean isActiveWork() { + boolean retVal = true; + IDuccProcessWorkItems pwi = getProcessWorkItems(); + if(pwi == null) { + retVal = false; + } + else { + retVal = pwi.isActiveWork(); + } + return retVal; + } + public boolean isActive() { boolean retVal = false; switch(processState) { Modified: uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/DuccProcessWorkItems.java URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/DuccProcessWorkItems.java?rev=1840596&r1=1840595&r2=1840596&view=diff ============================================================================== --- uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/DuccProcessWorkItems.java (original) +++ uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/DuccProcessWorkItems.java Tue Sep 11 18:00:52 2018 @@ -50,6 +50,7 @@ public class DuccProcessWorkItems implem doneMillisMin.set(pi.getMin()); } + @Override public boolean isAssignedWork() { boolean retVal = true; if((getCountDispatch() == 0) @@ -62,7 +63,17 @@ public class DuccProcessWorkItems implem } return retVal; } - + + @Override + public boolean isActiveWork() { + boolean retVal = true; + if((getCountDispatch() == 0) + ) { + retVal = false; + } + return retVal; + } + @Override public void setCountDispatch(long value) { dispatch.set(value); Modified: uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/DuccProcessWorkItemsV1.java URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/DuccProcessWorkItemsV1.java?rev=1840596&r1=1840595&r2=1840596&view=diff ============================================================================== --- uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/DuccProcessWorkItemsV1.java (original) +++ uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/DuccProcessWorkItemsV1.java Tue Sep 11 18:00:52 2018 @@ -312,5 +312,15 @@ public class DuccProcessWorkItemsV1 impl //V2 return 0; } + + @Override + public boolean isActiveWork() { + boolean retVal = true; + if((getCountDispatch() == 0) + ) { + retVal = false; + } + return retVal; + } } 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=1840596&r1=1840595&r2=1840596&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 Tue Sep 11 18:00:52 2018 @@ -77,6 +77,7 @@ public interface IDuccProcess extends Se public boolean isVolunteered(); public boolean isComplete(); + public boolean isActiveWork(); public boolean isAssignedWork(); public boolean isDeallocated(); Modified: uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/IDuccProcessWorkItems.java URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/IDuccProcessWorkItems.java?rev=1840596&r1=1840595&r2=1840596&view=diff ============================================================================== --- uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/IDuccProcessWorkItems.java (original) +++ uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/IDuccProcessWorkItems.java Tue Sep 11 18:00:52 2018 @@ -22,6 +22,7 @@ import java.io.Serializable; public interface IDuccProcessWorkItems extends Serializable { + public boolean isActiveWork(); public boolean isAssignedWork(); public void setCountDispatch(long value); Modified: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandler.java URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandler.java?rev=1840596&r1=1840595&r2=1840596&view=diff ============================================================================== --- uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandler.java (original) +++ uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandler.java Tue Sep 11 18:00:52 2018 @@ -442,6 +442,11 @@ public class DuccHandler extends DuccAbs return Helper.getSchedulerReason(job, process); } + + private boolean isIdleJobProcess(IDuccWorkJob job, IDuccProcess process, AllocationType type) { + return Helper.isIdleJobProcess(job, process, type); + } + private String getStateAgent(IDuccWorkJob job, IDuccProcess process) { return Helper.getAgentState(job, process); } @@ -806,6 +811,9 @@ public class DuccHandler extends DuccAbs index++; // jp.08 cbList[index].append("<td>"); String stateAgent = getStateAgent(job,process); + if(isIdleJobProcess(job,process,sType)) { + stateAgent = process.getProcessState()+":Idle"; + } cbList[index].append(stateAgent); logAppend(index,"stateAgent",stateAgent); cbList[index].append("</td>"); Modified: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/Helper.java URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/Helper.java?rev=1840596&r1=1840595&r2=1840596&view=diff ============================================================================== --- uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/Helper.java (original) +++ uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/Helper.java Tue Sep 11 18:00:52 2018 @@ -48,10 +48,10 @@ import org.apache.uima.ducc.ws.DuccMachi import org.apache.uima.ducc.ws.MachineInfo; import org.apache.uima.ducc.ws.types.NodeId; import org.apache.uima.ducc.ws.utils.FormatHelper; -import org.apache.uima.ducc.ws.utils.UrlHelper; import org.apache.uima.ducc.ws.utils.FormatHelper.Precision; import org.apache.uima.ducc.ws.utils.LinuxSignals; import org.apache.uima.ducc.ws.utils.LinuxSignals.Signal; +import org.apache.uima.ducc.ws.utils.UrlHelper; import org.apache.uima.ducc.ws.utils.alien.EffectiveUser; import org.apache.uima.ducc.ws.utils.alien.FileInfo; import org.apache.uima.ducc.ws.utils.alien.OsProxy; @@ -470,56 +470,30 @@ public class Helper { public static String getTimeRun(IDuccWorkJob job, IDuccProcess process, AllocationType type) { String location = "getTimeRun"; StringBuffer sb = new StringBuffer(); - if(process != null) { - String runTime = "00"; - // <UIMA-3351> - boolean useTimeRun = true; - switch(type) { - case SPC: - break; - case SPU: - break; - case MR: - break; - case JD: - break; - case UIMA: - if(!process.isAssignedWork()) { - useTimeRun = false; - } - break; - default: - break; - } - // </UIMA-3351> - if(useTimeRun) { - try { - TimeWindow t = (TimeWindow) process.getTimeWindowRun(); - if(t != null) { - long now = System.currentTimeMillis(); - String tS = t.getStart(""+now); - String tE = t.getEnd(""+now); - runTime = Helper.getDuration(jobid,tE,tS,Precision.Whole); - } - } - catch(Exception e) { - duccLogger.trace(location, jobid, "no worries", e); - } - catch(Throwable t) { - duccLogger.trace(location, jobid, "no worries", t); + String runTime = "00"; + try { + if(process != null) { + long now = System.currentTimeMillis(); + TimeWindow t = (TimeWindow) process.getTimeWindowRun(); + String tS = t.getStart(""+now); + String tE = t.getEnd(""+now); + if(isTimeRunEstimated(job,process,type)) { + tE = ""+now; } + runTime = Helper.getDuration(jobid,tE,tS,Precision.Whole); } - sb.append(runTime); } + catch(Exception e) { + duccLogger.trace(location, jobid, "no worries", e); + } + sb.append(runTime); return sb.toString(); } - public static boolean isTimeRunEstimated(IDuccWorkJob job, IDuccProcess process, AllocationType type) { - String location = "isTimeRunEstimated"; + public static boolean isIdleJobProcess(IDuccWorkJob job, IDuccProcess process, AllocationType type) { + String location = "isIdleJobProcess"; boolean retVal = false; if(process != null) { - // <UIMA-3351> - boolean useTimeRun = true; switch(type) { case SPC: break; @@ -530,30 +504,29 @@ public class Helper { case JD: break; case UIMA: - if(!process.isAssignedWork()) { - useTimeRun = false; + switch(process.getProcessState()) { + case Running: + boolean busy = process.isActiveWork(); + duccLogger.debug(location, job.getDuccId(), process.getDuccId(), process.getProcessState(), !busy); + if(!busy) { + retVal = true; + } + break; + default: + break; } break; default: break; } - // </UIMA-3351> - if(useTimeRun) { - try { - TimeWindow t = (TimeWindow) process.getTimeWindowRun(); - if(t != null) { - if(t.isEstimated()) { - retVal = true; - } - } - } - catch(Exception e) { - duccLogger.trace(location, jobid, "no worries", e); - } - catch(Throwable t) { - duccLogger.trace(location, jobid, "no worries", t); - } - } + } + return retVal; + } + + public static boolean isTimeRunEstimated(IDuccWorkJob job, IDuccProcess process, AllocationType type) { + boolean retVal = true; + if(process.isComplete()) { + retVal = false; } return retVal; }