fixes JAL-849 - double check after waiting a bit that there is no more
authorjprocter <jprocter@compbio.dundee.ac.uk>
Tue, 28 Jun 2011 16:40:45 +0000 (17:40 +0100)
committerjprocter <jprocter@compbio.dundee.ac.uk>
Tue, 28 Jun 2011 16:40:45 +0000 (17:40 +0100)
job output to retrieve from server.

src/jalview/ws/jws2/MsaWSThread.java

index bd86bf0..4c75756 100644 (file)
@@ -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: "