X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fws%2Fjws2%2FMsaWSThread.java;h=4c75756cd37a92b3490f1984940dda2c39a6048a;hb=e3947854073b52cf92a3f924deed0fda77dc88e6;hp=bd86bf0f39c158d88f888b9f6f9a1504629920cd;hpb=db8def9453327847a8a9e7efc27ee288c7c7088d;p=jalview.git diff --git a/src/jalview/ws/jws2/MsaWSThread.java b/src/jalview/ws/jws2/MsaWSThread.java index bd86bf0..4c75756 100644 --- a/src/jalview/ws/jws2/MsaWSThread.java +++ b/src/jalview/ws/jws2/MsaWSThread.java @@ -596,10 +596,17 @@ class MsaWSThread extends AWS2Thread implements WSClientI 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); @@ -607,11 +614,13 @@ class MsaWSThread extends AWS2Thread implements WSClientI .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) @@ -746,16 +755,40 @@ class MsaWSThread extends AWS2Thread implements WSClientI 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: "