Author: degenaro Date: Sat Mar 16 10:56:41 2013 New Revision: 1457235 URL: http://svn.apache.org/r1457235 Log: UIMA-2734 DUCC webserver (WS) refactor DuccWebMonitor in anticipation of support for monitoring of Managed Reservations
Added: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/IWebMonitor.java Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccAbstractHandler.java uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerProxy.java uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccWebMonitor.java uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccWebServer.java Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccAbstractHandler.java URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccAbstractHandler.java?rev=1457235&r1=1457234&r2=1457235&view=diff ============================================================================== --- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccAbstractHandler.java (original) +++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccAbstractHandler.java Sat Mar 16 10:56:41 2013 @@ -42,6 +42,7 @@ import org.apache.uima.ducc.transport.ev import org.apache.uima.ducc.transport.event.common.IDuccProcess; import org.apache.uima.ducc.transport.event.common.IDuccProcessMap; import org.apache.uima.ducc.transport.event.common.IDuccSchedulingInfo; +import org.apache.uima.ducc.transport.event.common.IDuccTypes.DuccType; import org.apache.uima.ducc.transport.event.common.IDuccUnits.MemoryUnits; import org.apache.uima.ducc.transport.event.common.IDuccWork; import org.apache.uima.ducc.transport.event.common.IDuccWorkJob; @@ -898,8 +899,8 @@ public abstract class DuccAbstractHandle protected String getMonitor(DuccId duccId, boolean multi) { StringBuffer sb = new StringBuffer(); DuccWebMonitor duccWebMonitor = DuccWebMonitor.getInstance(); - Long expiry = duccWebMonitor.getExpiry(duccId); - if(!duccWebMonitor.isCanceler()) { + Long expiry = duccWebMonitor.getExpiry(DuccType.Job, duccId); + if(!duccWebMonitor.isAutoCancelEnabled()) { if(expiry != null) { String text = "webserver not primary"; sb.append("<span class=\"health_neutral\" title=\""+text+"\">"); @@ -945,7 +946,7 @@ public abstract class DuccAbstractHandle } sb.append("</span>"); } - else if(duccWebMonitor.isCancelPending(duccId)) { + else if(duccWebMonitor.isCanceled(DuccType.Job, duccId)) { sb.append("<span class=\"health_red\" >"); sb.append("CancelPending..."); sb.append("</span>"); Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerProxy.java URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerProxy.java?rev=1457235&r1=1457234&r2=1457235&view=diff ============================================================================== --- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerProxy.java (original) +++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerProxy.java Sat Mar 16 10:56:41 2013 @@ -29,6 +29,7 @@ import org.apache.uima.ducc.common.json. import org.apache.uima.ducc.common.utils.DuccLogger; import org.apache.uima.ducc.common.utils.DuccLoggerComponents; import org.apache.uima.ducc.common.utils.id.DuccId; +import org.apache.uima.ducc.transport.event.common.IDuccTypes.DuccType; import org.eclipse.jetty.server.Request; import com.google.gson.Gson; @@ -92,7 +93,7 @@ public class DuccHandlerProxy extends Du response.sendError(HttpServletResponse.SC_BAD_REQUEST, message); } else { - MonitorInfo monitorInfo = duccWebMonitor.renew(jobId); + MonitorInfo monitorInfo = duccWebMonitor.renew(DuccType.Job, jobId); Gson gson = new Gson(); String jSon = gson.toJson(monitorInfo); duccLogger.debug(location, jobid, jSon); @@ -110,7 +111,7 @@ public class DuccHandlerProxy extends Du duccLogger.trace(location, jobid, "enter"); duccLogger.info(location, jobid, request.toString()); - ConcurrentHashMap<DuccId,Long> eMap = duccWebMonitor.getExpiryMap(); + ConcurrentHashMap<DuccId,Long> eMap = duccWebMonitor.getExpiryMap(DuccType.Job); Gson gson = new Gson(); String jSon = gson.toJson(eMap); Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccWebMonitor.java URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccWebMonitor.java?rev=1457235&r1=1457234&r2=1457235&view=diff ============================================================================== --- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccWebMonitor.java (original) +++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccWebMonitor.java Sat Mar 16 10:56:41 2013 @@ -23,6 +23,7 @@ import java.util.Enumeration; import java.util.Iterator; import java.util.Properties; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import org.apache.uima.ducc.cli.DuccUiConstants; @@ -37,34 +38,31 @@ import org.apache.uima.ducc.transport.ev import org.apache.uima.ducc.transport.event.common.DuccWorkMap; import org.apache.uima.ducc.transport.event.common.IDuccSchedulingInfo; import org.apache.uima.ducc.transport.event.common.IDuccState.JobState; +import org.apache.uima.ducc.transport.event.common.IDuccTypes.DuccType; import org.apache.uima.ducc.transport.event.common.IDuccWorkJob; import org.apache.uima.ducc.ws.IListenerOrchestrator; -public class DuccWebMonitor implements IListenerOrchestrator { +public class DuccWebMonitor implements IListenerOrchestrator, IWebMonitor { private static DuccLogger duccLogger = DuccLoggerComponents.getWsLogger(DuccWebMonitor.class.getName()); private static DuccId jobid = null; public static DuccWebMonitor instance = new DuccWebMonitor(); - public static DuccWebMonitor getInstance() { - return instance; - } + public String key_automatic_cancel_minutes = "ducc.ws.automatic.cancel.minutes"; + public String key_node = "ducc.ws.node"; + public String key_head = "ducc.head"; + public String key_port = "ducc.ws.port"; + + private Properties properties = new Properties(); private long millisPerMinute = 60*1000; private long timeoutMinutes = 10; private long timeoutMillis = timeoutMinutes*millisPerMinute; - private boolean disabledMessageAlreadyGiven = false; - - private Properties properties; - - private ConcurrentHashMap<DuccId,MonitorInfo> jMap = new ConcurrentHashMap<DuccId,MonitorInfo>(); - private ConcurrentHashMap<DuccId,TrackingInfo> tMap = new ConcurrentHashMap<DuccId,TrackingInfo>(); - + private AtomicBoolean operational = new AtomicBoolean(true); private AtomicInteger updateCounter = new AtomicInteger(0); - - private ConcurrentHashMap<DuccId,Long> cMap = new ConcurrentHashMap<DuccId,Long>(); + private AtomicBoolean statusMessageIssued = new AtomicBoolean(false); private String monitor_host = null; private String monitor_port = null; @@ -72,6 +70,14 @@ public class DuccWebMonitor implements I private String actual_host = null; private String actual_port = null; + private ConcurrentHashMap<DuccId,MonitorInfo> jmMap = new ConcurrentHashMap<DuccId,MonitorInfo>(); + private ConcurrentHashMap<DuccId,TrackingInfo> jtMap = new ConcurrentHashMap<DuccId,TrackingInfo>(); + private ConcurrentHashMap<DuccId,Long> jcMap = new ConcurrentHashMap<DuccId,Long>(); + + public static DuccWebMonitor getInstance() { + return instance; + } + public DuccWebMonitor() { super(); initialize(); @@ -80,7 +86,7 @@ public class DuccWebMonitor implements I private void initialize() { String location = "initialize"; properties = DuccWebProperties.get(); - String key = "ducc.ws.job.automatic.cancel.minutes"; + String key = key_automatic_cancel_minutes; if(properties.containsKey(key)) { String value = properties.getProperty(key); try { @@ -93,6 +99,7 @@ public class DuccWebMonitor implements I } } else { + duccLogger.warn(location, jobid, "not found: "+key); duccLogger.info(location, jobid, "timeout minutes (default): "+timeoutMinutes); } String me = System.getProperty("user.name"); @@ -101,127 +108,33 @@ public class DuccWebMonitor implements I } DuccListeners.getInstance().register(this); // - monitor_host = properties.getProperty("ducc.ws.node"); + monitor_host = properties.getProperty(key_node); if(monitor_host == null) { - monitor_host = properties.getProperty("ducc.head"); - } - monitor_port = properties.getProperty("ducc.ws.port"); - } - - public void registerHostPort(String host, String port) { - String location = "registerHostPort"; - actual_host = host; - actual_port = port; - if(isCanceler()) { - duccLogger.info(location, jobid, host+":"+port+" is cancel monitor "+monitor_host+":"+monitor_port); - } - else { - duccLogger.warn(location, jobid, host+":"+port+" is *not* cancel monitor "+monitor_host+":"+monitor_port); - } - } - - public boolean isCanceler() { - if(actual_host == null) { - return false; - } - if(monitor_host == null) { - return false; - } - if(!actual_host.equals(monitor_host)) { - String actual_domainless_host = actual_host.split("\\.")[0]; - String monitor_domainless_host = monitor_host.split("\\.")[0]; - if(!actual_domainless_host.equals(monitor_domainless_host)) { - return false; - } - } - if(actual_port == null) { - return false; - } - if(monitor_port == null) { - return false; - } - if(!actual_port.equals(monitor_port)) { - return false; - } - return true; - } - - private void cancel(DuccId duccId) { - String location = "cancel"; - duccLogger.trace(location, jobid, "enter"); - - String userId = System.getProperty("user.name"); - - duccLogger.info(location, duccId, userId); - - String java = "/bin/java"; - String jhome = System.getProperty("java.home"); - String cp = System.getProperty("java.class.path"); - String jclass = "org.apache.uima.ducc.cli.DuccJobCancel"; - String arg1 = "--"+JobRequestProperties.key_id; - String arg2 = ""+duccId; - String arg3 = "--"+SpecificationProperties.key_reason; - String arg4 = "\"submitter terminated, therefore job canceled automatically\""; - String arg5 = "--"+SpecificationProperties.key_role_administrator; - - String[] arglistUser = { "-u", userId, "--", jhome+java, "-cp", cp, jclass, arg1, arg2, arg3, arg4, arg5 }; - String result = DuccAsUser.duckling(userId, arglistUser); - duccLogger.warn(location, duccId, result); - - cMap.put(duccId, new Long(System.currentTimeMillis())); - tMap.remove(duccId); - - duccLogger.trace(location, jobid, "exit"); - } - - private void canceler() { - String location = "canceler"; - duccLogger.trace(location, jobid, "enter"); - - long nowMillis = System.currentTimeMillis(); - - Enumeration<DuccId> keys = tMap.keys(); - while(keys.hasMoreElements()) { - DuccId duccId = keys.nextElement(); - TrackingInfo ti = tMap.get(duccId); - long expiryMillis = ti.time; - if(nowMillis > expiryMillis) { - if(isCancelable(duccId)) { - cancel(duccId); - } - else { - duccLogger.debug(location, duccId, "not cancelable"); - } - } + monitor_host = properties.getProperty(key_head); } - - duccLogger.trace(location, jobid, "exit"); - } - - public boolean isCanceled(DuccId duccId) { - return cMap.containsKey(duccId); + monitor_port = properties.getProperty(key_port); } + @Override public void update(OrchestratorStateDuccEvent duccEvent) { String location = "update"; duccLogger.trace(location, jobid, "enter"); - if(timeoutMillis > 0) { + if(operational.get()) { updateCounter.incrementAndGet(); monitor(duccEvent); } else { - if(!disabledMessageAlreadyGiven) { - duccLogger.info(location, jobid, "Job monitor disabled"); - disabledMessageAlreadyGiven = true; + if(!statusMessageIssued.getAndSet(true)) { + duccLogger.info(location, jobid, "auto-cancel monitor disabled"); } } duccLogger.trace(location, jobid, "exit"); } - private void monitor(OrchestratorStateDuccEvent duccEvent) { - String location = "monitor"; + private void monitorJobs(OrchestratorStateDuccEvent duccEvent) { + String location = "monitorJobs"; duccLogger.trace(location, jobid, "enter"); DuccWorkMap dwm = duccEvent.getWorkMap(); @@ -231,7 +144,7 @@ public class DuccWebMonitor implements I Iterator<DuccId> iterator; ArrayList<DuccId> gone = new ArrayList<DuccId>(); - iterator = jMap.keySet().iterator(); + iterator = jmMap.keySet().iterator(); while( iterator.hasNext() ) { DuccId duccId = iterator.next(); gone.add(duccId); @@ -244,18 +157,18 @@ public class DuccWebMonitor implements I DuccId duccId = iterator.next(); IDuccWorkJob dwj = (IDuccWorkJob)dwm.findDuccWork(duccId); gone.remove(duccId); - if(!jMap.containsKey(duccId)) { + if(!jmMap.containsKey(duccId)) { MonitorInfo monitorInfo = new MonitorInfo(); - jMap.put(duccId, monitorInfo); + jmMap.put(duccId, monitorInfo); duccLogger.info(location, duccId, "Job monitor start"); - if(!tMap.containsKey(duccId)) { + if(!jtMap.containsKey(duccId)) { try { Properties properties = DuccFile.getJobProperties(dwj); if(properties.containsKey(DuccUiConstants.name_monitor_cancel_job_on_interrupt)) { TrackingInfo ti = new TrackingInfo(); ti.time = expiryMillis; ti.user = dwj.getStandardInfo().getUser(); - tMap.put(duccId,ti); + jtMap.put(duccId,ti); duccLogger.info(location, duccId, "Job auto-cancel on"); } else { @@ -267,7 +180,7 @@ public class DuccWebMonitor implements I } } } - MonitorInfo monitorInfo = jMap.get(duccId); + MonitorInfo monitorInfo = jmMap.get(duccId); IDuccSchedulingInfo si = dwj.getSchedulingInfo(); monitorInfo.total = si.getWorkItemsTotal(); monitorInfo.done = si.getWorkItemsCompleted(); @@ -286,24 +199,180 @@ public class DuccWebMonitor implements I iterator = gone.iterator(); while( iterator.hasNext() ) { DuccId duccId = iterator.next(); - jMap.remove(duccId); - tMap.remove(duccId); + jmMap.remove(duccId); + jtMap.remove(duccId); duccLogger.info(location, duccId, "Job monitor stop"); } - if(isCanceler()) { - canceler(); + duccLogger.trace(location, jobid, "exit"); + } + + private void monitorManagedReservations(OrchestratorStateDuccEvent duccEvent) { + String location = "monitorManagedReservations"; + duccLogger.trace(location, jobid, "enter"); + + // TODO + + duccLogger.trace(location, jobid, "exit"); + } + + private void cancelJobs(long nowMillis) { + String location = "cancelJobs"; + duccLogger.trace(location, jobid, "enter"); + + Enumeration<DuccId> keys = jtMap.keys(); + while(keys.hasMoreElements()) { + DuccId duccId = keys.nextElement(); + TrackingInfo ti = jtMap.get(duccId); + long expiryMillis = ti.time; + if(nowMillis > expiryMillis) { + if(isCancelableJob(duccId)) { + cancelJob(duccId); + } + else { + duccLogger.debug(location, duccId, "not cancelable"); + } + } + } + + duccLogger.trace(location, jobid, "exit"); + } + + private boolean isCanceledJob(DuccId duccId) { + return jcMap.containsKey(duccId); + } + + private boolean isCancelableJob(DuccId duccId) { + String location = "isCancelableJob"; + duccLogger.trace(location, duccId, "enter"); + boolean retVal = false; + if(!jcMap.containsKey(duccId)) { + MonitorInfo monitorInfo = jmMap.get(duccId); + if(monitorInfo != null) { + ArrayList<String> stateSequence = monitorInfo.stateSequence; + if(stateSequence != null) { + if(stateSequence.contains(JobState.Completing.toString())) { + duccLogger.debug(location, duccId, "state: <uncancelable> "+stateSequence); + } + else if(stateSequence.contains(JobState.Completed.toString())) { + duccLogger.debug(location, duccId, "state: <uncancelable> "+stateSequence); + } + else { + duccLogger.debug(location, duccId, "state: <cancelable> "+stateSequence); + retVal = true; + } + } + else { + duccLogger.warn(location, duccId, "stateSequence: <null>"); + } + } + else { + duccLogger.warn(location, duccId, "monitorInfo: <null>"); + } } else { - duccLogger.debug(location, jobid, "Canceler disabled"); + duccLogger.debug(location, duccId, "already canceled"); } + duccLogger.trace(location, duccId, "exit"); + return retVal; + } + + private void cancelJob(DuccId duccId) { + String location = "cancelJob"; + duccLogger.trace(location, jobid, "enter"); + + String userId = System.getProperty("user.name"); + duccLogger.info(location, duccId, userId); + + String java = "/bin/java"; + String jhome = System.getProperty("java.home"); + String cp = System.getProperty("java.class.path"); + String jclass = "org.apache.uima.ducc.cli.DuccJobCancel"; + String arg1 = "--"+JobRequestProperties.key_id; + String arg2 = ""+duccId; + String arg3 = "--"+SpecificationProperties.key_reason; + String arg4 = "\"submitter terminated, therefore job canceled automatically\""; + String arg5 = "--"+SpecificationProperties.key_role_administrator; + + String[] arglistUser = { "-u", userId, "--", jhome+java, "-cp", cp, jclass, arg1, arg2, arg3, arg4, arg5 }; + String result = DuccAsUser.duckling(userId, arglistUser); + duccLogger.warn(location, duccId, result); + + jcMap.put(duccId, new Long(System.currentTimeMillis())); + jtMap.remove(duccId); + + duccLogger.trace(location, jobid, "exit"); + } + + private void cancelManagedReservations(long nowMillis) { + String location = "cancelManagedReservations"; + duccLogger.trace(location, jobid, "enter"); + + // TODO + + duccLogger.trace(location, jobid, "exit"); + } + + private void monitor(OrchestratorStateDuccEvent duccEvent) { + String location = "monitor"; + duccLogger.trace(location, jobid, "enter"); + monitorJobs(duccEvent); + monitorManagedReservations(duccEvent); + if(isAutoCancelEnabled()) { + long nowMillis = System.currentTimeMillis(); + cancelJobs(nowMillis); + cancelManagedReservations(nowMillis); + } + else { + duccLogger.debug(location, jobid, "auto-cancel monitor disabled"); + } duccLogger.trace(location, jobid, "exit"); } + @Override + public void register(String host, String port) { + String location = "register"; + actual_host = host; + actual_port = port; + if(isAutoCancelEnabled()) { + duccLogger.info(location, jobid, host+":"+port+" is cancel monitor "+monitor_host+":"+monitor_port); + } + else { + duccLogger.warn(location, jobid, host+":"+port+" is *not* cancel monitor "+monitor_host+":"+monitor_port); + } + } + + @Override + public boolean isAutoCancelEnabled() { + if(actual_host == null) { + return false; + } + if(monitor_host == null) { + return false; + } + if(!actual_host.equals(monitor_host)) { + String actual_domainless_host = actual_host.split("\\.")[0]; + String monitor_domainless_host = monitor_host.split("\\.")[0]; + if(!actual_domainless_host.equals(monitor_domainless_host)) { + return false; + } + } + if(actual_port == null) { + return false; + } + if(monitor_port == null) { + return false; + } + if(!actual_port.equals(monitor_port)) { + return false; + } + return true; + } + private DuccId getKey(String jobId) { DuccId retVal = null; - Enumeration<DuccId> keys = jMap.keys(); + Enumeration<DuccId> keys = jmMap.keys(); while(keys.hasMoreElements()) { DuccId duccId = keys.nextElement(); String mapId = ""+duccId.getFriendly(); @@ -315,8 +384,8 @@ public class DuccWebMonitor implements I return retVal; } - public MonitorInfo renew(String jobId) { - String location = "renew"; + public MonitorInfo renewJob(String jobId) { + String location = "renewJob"; duccLogger.trace(location, jobid, "enter"); MonitorInfo monitorInfo = new MonitorInfo(); @@ -352,10 +421,10 @@ public class DuccWebMonitor implements I } if(duccId != null) { - monitorInfo = jMap.get(duccId); - if(tMap.containsKey(duccId)) { + monitorInfo = jmMap.get(duccId); + if(jtMap.containsKey(duccId)) { long expiryMillis = System.currentTimeMillis()+timeoutMillis+1; - TrackingInfo ti = tMap.get(duccId); + TrackingInfo ti = jtMap.get(duccId); ti.time = expiryMillis; duccLogger.info(location, duccId, "Job auto-cancel expiry extended"); } @@ -376,19 +445,98 @@ public class DuccWebMonitor implements I return monitorInfo; } - public ConcurrentHashMap<DuccId,Long> getExpiryMap() { - String location = "getExpiryMap"; + @Override + public MonitorInfo renew(DuccType duccType, String id) { + MonitorInfo monitorInfo = new MonitorInfo(); + if(duccType != null) { + if(id != null) { + switch(duccType) { + case Job: + monitorInfo = renewJob(id); + break; + case Reservation: + break; + case Service: + break; + default: + break; + } + } + } + return monitorInfo; + } + + private Long getExpiryJob(DuccId duccId) { + String location = "getExpiryJob"; + duccLogger.trace(location, duccId, "enter"); + Long retVal = null; + if(!isCanceledJob(duccId)) { + if(isCancelableJob(duccId)) { + ConcurrentHashMap<DuccId,Long> eMap = getExpiryMapJobs(); + if(eMap.containsKey(duccId)) { + retVal = eMap.get(duccId); + } + } + } + duccLogger.trace(location, duccId, "exit"); + return retVal; + } + + @Override + public Long getExpiry(DuccType duccType, DuccId duccId) { + Long expiry = null; + if(duccType != null) { + if(duccId != null) { + switch(duccType) { + case Job: + expiry = getExpiryJob(duccId); + break; + case Reservation: + break; + case Service: + break; + default: + break; + } + } + } + return expiry; + } + + @Override + public boolean isCanceled(DuccType duccType, DuccId duccId) { + boolean flag = false; + if(duccType != null) { + if(duccId != null) { + switch(duccType) { + case Job: + flag = isCanceledJob(duccId); + break; + case Reservation: + break; + case Service: + break; + default: + break; + } + } + } + return flag; + } + + public ConcurrentHashMap<DuccId,Long> getExpiryMapJobs() { + String location = "getExpiryMapJobs"; duccLogger.trace(location, jobid, "enter"); ConcurrentHashMap<DuccId,Long> eMap = new ConcurrentHashMap<DuccId,Long>(); long nowMillis = System.currentTimeMillis(); - Enumeration<DuccId> keys = tMap.keys(); + Enumeration<DuccId> keys = jtMap.keys(); while(keys.hasMoreElements()) { long minutesLeft = 0; DuccId duccId = keys.nextElement(); - TrackingInfo ti = tMap.get(duccId); + TrackingInfo ti = jtMap.get(duccId); long expiryMillis = ti.time; if(nowMillis < expiryMillis) { minutesLeft = (expiryMillis - nowMillis) / millisPerMinute; @@ -401,59 +549,23 @@ public class DuccWebMonitor implements I return eMap; } - private boolean isCancelable(DuccId duccId) { - String location = "isCancelable"; - duccLogger.trace(location, duccId, "enter"); - boolean retVal = false; - if(!cMap.containsKey(duccId)) { - MonitorInfo monitorInfo = jMap.get(duccId); - if(monitorInfo != null) { - ArrayList<String> stateSequence = monitorInfo.stateSequence; - if(stateSequence != null) { - if(stateSequence.contains(JobState.Completing.toString())) { - duccLogger.debug(location, duccId, "state: <uncancelable> "+stateSequence); - } - else if(stateSequence.contains(JobState.Completed.toString())) { - duccLogger.debug(location, duccId, "state: <uncancelable> "+stateSequence); - } - else { - duccLogger.debug(location, duccId, "state: <cancelable> "+stateSequence); - retVal = true; - } - } - else { - duccLogger.warn(location, duccId, "stateSequence: <null>"); - } - } - else { - duccLogger.warn(location, duccId, "monitorInfo: <null>"); - } - } - else { - duccLogger.debug(location, duccId, "already canceled"); - } - duccLogger.trace(location, duccId, "exit"); - return retVal; - } - - public boolean isCancelPending(DuccId duccId) { - return cMap.containsKey(duccId); - } - - public Long getExpiry(DuccId duccId) { - String location = "getExpiry"; - duccLogger.trace(location, duccId, "enter"); - Long retVal = null; - if(!isCanceled(duccId)) { - if(isCancelable(duccId)) { - ConcurrentHashMap<DuccId,Long> eMap = getExpiryMap(); - if(eMap.containsKey(duccId)) { - retVal = eMap.get(duccId); - } + @Override + public ConcurrentHashMap<DuccId,Long> getExpiryMap(DuccType duccType) { + ConcurrentHashMap<DuccId,Long> eMap = new ConcurrentHashMap<DuccId,Long>(); + if(duccType != null) { + switch(duccType) { + case Job: + eMap = getExpiryMapJobs(); + break; + case Reservation: + break; + case Service: + break; + default: + break; } } - duccLogger.trace(location, duccId, "exit"); - return retVal; + return eMap; } } Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccWebServer.java URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccWebServer.java?rev=1457235&r1=1457234&r2=1457235&view=diff ============================================================================== --- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccWebServer.java (original) +++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccWebServer.java Sat Mar 16 10:56:41 2013 @@ -144,7 +144,7 @@ public class DuccWebServer { try { InetAddress inetAddress = InetAddress.getLocalHost(); String host = inetAddress.getCanonicalHostName(); - DuccWebMonitor.getInstance().registerHostPort(host, ""+port); + DuccWebMonitor.getInstance().register(host, ""+port); } catch(Exception e) { logger.error(methodName, jobid, e); Added: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/IWebMonitor.java URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/IWebMonitor.java?rev=1457235&view=auto ============================================================================== --- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/IWebMonitor.java (added) +++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/IWebMonitor.java Sat Mar 16 10:56:41 2013 @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. +*/ +package org.apache.uima.ducc.ws.server; + +import java.util.concurrent.ConcurrentHashMap; + +import org.apache.uima.ducc.common.json.MonitorInfo; +import org.apache.uima.ducc.common.utils.id.DuccId; +import org.apache.uima.ducc.transport.event.common.IDuccTypes.DuccType; + +public interface IWebMonitor { + public void register(String host, String port); + public boolean isAutoCancelEnabled(); + public MonitorInfo renew(DuccType duccType, String id); + public Long getExpiry(DuccType duccType, DuccId duccId); + public ConcurrentHashMap<DuccId,Long> getExpiryMap(DuccType duccType); + public boolean isCanceled(DuccType duccType, DuccId duccId); +}