浏览代码

Fixed CommEngine and Broadcast status data.

tags/Production_4_29_2012
ymlam 13 年前
父节点
当前提交
3abe9c6365
共有 2 个文件被更改,包括 80 次插入18 次删除
  1. +29
    -7
      src/altk/comm/engine/Broadcast.java
  2. +51
    -11
      src/altk/comm/engine/CommEngine.java

+ 29
- 7
src/altk/comm/engine/Broadcast.java 查看文件

@@ -197,6 +197,7 @@ public abstract class Broadcast
String haltReason; String haltReason;
String stateErrorText; String stateErrorText;
public long changeStateTime; public long changeStateTime;
private int completedJobCount = 0;
protected class Service extends Thread protected class Service extends Thread
{ {
@@ -578,10 +579,10 @@ public abstract class Broadcast
+ "</error_text>"); + "</error_text>");
} }
} }
statusBf.append("<remaining_jobs total='" + remainingJobs + "'");
int activeCount = getActiveCount();
if (activeCount > -1) statusBf.append(" active='" + activeCount + "'");
statusBf.append("></remaining_jobs></" + topLevelTag + ">\r\n");
statusBf.append("<job_summary completed='" + getCompletedJobCount() +
"' ready='" + getReadyJobCount() + "'");
statusBf.append(" active='" + getActiveJobCount() + "'");
statusBf.append("></job_summary></" + topLevelTag + ">\r\n");
String statusReport = statusBf.toString(); String statusReport = statusBf.toString();
return statusReport; return statusReport;
} }
@@ -604,7 +605,7 @@ public abstract class Broadcast
* *
* @return number of active jobs. -1 if there is no concept of being active. * @return number of active jobs. -1 if there is no concept of being active.
*/ */
private int getActiveCount()
protected int getActiveJobCount()
{ {
return remainingJobs - readyQueue.size(); return remainingJobs - readyQueue.size();
} }
@@ -677,7 +678,7 @@ public abstract class Broadcast
*/ */
protected void cancel() protected void cancel()
{ {
if (this.getActiveCount() == 0) setState(BroadcastState.CANCELED);
if (this.getActiveJobCount() == 0) setState(BroadcastState.CANCELED);
// Sets state to CANCELING, which is monitored by its Broadcast.Service threads. // Sets state to CANCELING, which is monitored by its Broadcast.Service threads.
else setState(BroadcastState.CANCELING); else setState(BroadcastState.CANCELING);
synchronized(resumeFlag) synchronized(resumeFlag)
@@ -849,7 +850,7 @@ public abstract class Broadcast
{ {
terminate(BroadcastState.COMPLETED); terminate(BroadcastState.COMPLETED);
} }
else if (getActiveCount() == 0)
else if (getActiveJobCount() == 0)
{ {
if (state == BroadcastState.CANCELING) setState(BroadcastState.CANCELED); if (state == BroadcastState.CANCELING) setState(BroadcastState.CANCELED);
else if (state == BroadcastState.HALTING) setState(BroadcastState.HALTED); else if (state == BroadcastState.HALTING) setState(BroadcastState.HALTED);
@@ -868,6 +869,10 @@ public abstract class Broadcast
protected void postJobStatus(Job job, long rescheduleTimeMS) protected void postJobStatus(Job job, long rescheduleTimeMS)
{ {
postJobStatus(job); postJobStatus(job);
if (rescheduleTimeMS < 0)
{
completedJobCount ++;
}
if (rescheduleTimeMS == 0) if (rescheduleTimeMS == 0)
{ {
addJob(job); addJob(job);
@@ -889,5 +894,22 @@ public abstract class Broadcast
return state; return state;
} }


public int getReadyJobCount()
{
switch (state)
{
case RUNNING:
case HALTING:
case HALTED:
return readyQueue.size();
default:
return 0;
}
}


public int getCompletedJobCount()
{
return completedJobCount;
}
} }

+ 51
- 11
src/altk/comm/engine/CommEngine.java 查看文件

@@ -71,6 +71,8 @@ public abstract class CommEngine extends HttpServlet


private long deadBroadcastViewingMinutes; private long deadBroadcastViewingMinutes;


private int completedJobCount = 0;

abstract protected Broadcast mkBroadcast(); abstract protected Broadcast mkBroadcast();
public CommEngine(String engineName) public CommEngine(String engineName)
@@ -130,14 +132,18 @@ public abstract class CommEngine extends HttpServlet
protected void purgeStaleBroadcasts() protected void purgeStaleBroadcasts()
{ {
long now = System.currentTimeMillis(); long now = System.currentTimeMillis();
for (String id : broadcasts.keySet())
synchronized (broadcasts)
{ {
if (broadcasts.get(id).changeStateTime - now > deadBroadcastViewingMinutes * 60 * 1000)
for (String id : broadcasts.keySet())
{ {
broadcasts.remove(id);
if (broadcasts.get(id).changeStateTime - now > deadBroadcastViewingMinutes * 60 * 1000)
{
Broadcast broadcast = broadcasts.get(id);
completedJobCount += broadcast.getCompletedJobCount();
broadcasts.remove(id);
}
} }
} }
} }
/** /**
@@ -387,24 +393,58 @@ public abstract class CommEngine extends HttpServlet
{ {
out.write(broadcast.mkStatusReport()); out.write(broadcast.mkStatusReport());
} }
out.write("<job_summary completed='" + getCompletedJobCount() + "' active='" + getActiveJobCount() + "' ready='" + getReadyJobCount() + "'/>");
out.write("</" + tag + ">"); out.write("</" + tag + ">");
} }
} }


public void removeBroadcast(String broadcastId)
public int getReadyJobCount()
{ {
CommonLogger.activity.info("Removing broadcast " + broadcastId);
int readyCount = 0;
synchronized(broadcasts) synchronized(broadcasts)
{ {
broadcasts.remove(broadcastId);
for (Broadcast broadcast : broadcasts.values())
{
readyCount += broadcast.getReadyJobCount();
}
} }
return readyCount;
} }


protected int getRemainingJobCount()
public int getActiveJobCount()
{ {
// TODO
return 0;
int activeCount = 0;
synchronized(broadcasts)
{
for (Broadcast broadcast : broadcasts.values())
{
activeCount += broadcast.getActiveJobCount();
}
}
return activeCount;
}

public int getCompletedJobCount()
{
int additionalCompletedJobCount = 0;
synchronized(broadcasts)
{
for (Broadcast broadcast : broadcasts.values())
{
additionalCompletedJobCount += broadcast.getCompletedJobCount();
}
}
return completedJobCount + additionalCompletedJobCount;
}

public void removeBroadcast(String broadcastId)
{
CommonLogger.activity.info("Removing broadcast " + broadcastId);
synchronized(broadcasts)
{
broadcasts.remove(broadcastId);
}
} }


public boolean notInService() public boolean notInService()


正在加载...
取消
保存