updateJobProgress(j);
}
- protected void updateJobProgress(MsaWSJob j) throws Exception
+ /**
+ *
+ * @param j
+ * @return true if more job progress data was available
+ * @throws Exception
+ */
+ protected boolean updateJobProgress(MsaWSJob j) throws Exception
{
StringBuffer response = j.jobProgress;
long lastchunk = j.getLastChunk();
+ boolean changed=false;
do
{
j.setLastChunk(lastchunk);
.pullExecStatistics(j.getJobId(), lastchunk);
if (chunk != null)
{
+ changed=chunk.getChunk().length()>0;
response.append(chunk.getChunk());
lastchunk = chunk.getNextPosition();
}
;
} while (lastchunk >= 0 && j.getLastChunk() != lastchunk);
+ return changed;
}
public void StartJob(AWsJob job)
MsaWSJob msjob = ((MsaWSJob) jobs[j]);
if (jobs[j].isFinished() && msjob.alignment == null)
{
- try
- {
- updateJobProgress(msjob);
- } catch (Exception e)
- {
- Cache.log
- .warn("Exception when retrieving remaining Job progress data for job "
- + msjob.getJobId() + " on server " + WsUrl);
- e.printStackTrace();
- }
+ boolean jpchanged=false,jpex=false;
+ do {
+ try
+ {
+ jpchanged = updateJobProgress(msjob);
+ jpex=false;
+ } catch (Exception e)
+ {
+
+ Cache.log
+ .warn("Exception when retrieving remaining Job progress data for job "
+ + msjob.getJobId() + " on server " + WsUrl);
+ e.printStackTrace();
+ if (jpex) {
+ // give up polling after two consecutive exceptions
+ jpchanged=false;
+ } else {
+ jpchanged=true;
+ }
+ // set flag remember that we've had an exception.
+ jpex=true;
+ }
+ if (jpchanged)
+ {
+ try
+ {
+ Thread.sleep(jpex ? 400 : 200); // wait a bit longer if we experienced an exception.
+ } catch (Exception ex)
+ {
+ }
+ ;
+ }
+ } while (jpchanged);
+
if (Cache.log.isDebugEnabled())
{
System.out.println("Job Execution file for job: "