Просмотр исходного кода

Fixed CommEngine and Broadcast status data.

tags/Production_4_29_2012
ymlam 13 лет назад
Родитель
Сommit
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 stateErrorText;
public long changeStateTime;
private int completedJobCount = 0;
protected class Service extends Thread
{
@@ -578,10 +579,10 @@ public abstract class Broadcast
+ "</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();
return statusReport;
}
@@ -604,7 +605,7 @@ public abstract class Broadcast
*
* @return number of active jobs. -1 if there is no concept of being active.
*/
private int getActiveCount()
protected int getActiveJobCount()
{
return remainingJobs - readyQueue.size();
}
@@ -677,7 +678,7 @@ public abstract class Broadcast
*/
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.
else setState(BroadcastState.CANCELING);
synchronized(resumeFlag)
@@ -849,7 +850,7 @@ public abstract class Broadcast
{
terminate(BroadcastState.COMPLETED);
}
else if (getActiveCount() == 0)
else if (getActiveJobCount() == 0)
{
if (state == BroadcastState.CANCELING) setState(BroadcastState.CANCELED);
else if (state == BroadcastState.HALTING) setState(BroadcastState.HALTED);
@@ -868,6 +869,10 @@ public abstract class Broadcast
protected void postJobStatus(Job job, long rescheduleTimeMS)
{
postJobStatus(job);
if (rescheduleTimeMS < 0)
{
completedJobCount ++;
}
if (rescheduleTimeMS == 0)
{
addJob(job);
@@ -889,5 +894,22 @@ public abstract class Broadcast
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 int completedJobCount = 0;

abstract protected Broadcast mkBroadcast();
public CommEngine(String engineName)
@@ -130,14 +132,18 @@ public abstract class CommEngine extends HttpServlet
protected void purgeStaleBroadcasts()
{
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("<job_summary completed='" + getCompletedJobCount() + "' active='" + getActiveJobCount() + "' ready='" + getReadyJobCount() + "'/>");
out.write("</" + tag + ">");
}
}

public void removeBroadcast(String broadcastId)
public int getReadyJobCount()
{
CommonLogger.activity.info("Removing broadcast " + broadcastId);
int readyCount = 0;
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()


Загрузка…
Отмена
Сохранить