From: Jim Procter Date: Wed, 28 Oct 2015 11:37:15 +0000 (+0000) Subject: JAL-715 tidy up the job poll loop ready to adapt for other poll patterns X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=4d6eba3bcdaafa4cb3bebed6aea917af9e52d431;p=jalview.git JAL-715 tidy up the job poll loop ready to adapt for other poll patterns --- diff --git a/src/jalview/ws/rest/RestJobThread.java b/src/jalview/ws/rest/RestJobThread.java index 75d2cd4..629a3ff 100644 --- a/src/jalview/ws/rest/RestJobThread.java +++ b/src/jalview/ws/rest/RestJobThread.java @@ -59,8 +59,6 @@ import org.apache.http.client.methods.HttpRequestBase; import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntity; import org.apache.http.impl.client.DefaultHttpClient; -import org.apache.http.protocol.BasicHttpContext; -import org.apache.http.protocol.HttpContext; import org.apache.http.util.EntityUtils; public class RestJobThread extends AWSThread @@ -173,9 +171,13 @@ public class RestJobThread extends AWSThread private String getStage(Stage stg) { if (stg == Stage.SUBMIT) + { return "submitting "; + } if (stg == Stage.POLL) + { return "checking status of "; + } return (" being confused about "); } @@ -212,9 +214,6 @@ public class RestJobThread extends AWSThread protected void doHttpReq(Stage stg, RestJob rj, String postUrl) throws Exception { - StringBuffer respText = new StringBuffer(); - // con.setContentHandlerFactory(new - // jalview.ws.io.mime.HttpContentHandler()); HttpRequestBase request = null; String messages = ""; if (stg == Stage.SUBMIT) @@ -249,7 +248,6 @@ public class RestJobThread extends AWSThread { DefaultHttpClient httpclient = new DefaultHttpClient(); - HttpContext localContext = new BasicHttpContext(); HttpResponse response = null; try { @@ -283,44 +281,19 @@ public class RestJobThread extends AWSThread Cache.log.debug("Processing result set."); processResultSet(rj, response, request); break; + case 202: - rj.statMessage = "
Job submitted successfully. Results available at this URL:\n" - + "" - + rj.getJobId() - + "
"; - rj.running = true; + markJobAsRunning(rj); break; case 302: - Header[] loc; - if (!rj.isSubmitted() - && (loc = response - .getHeaders(HTTPConstants.HEADER_LOCATION)) != null - && loc.length > 0) - { - if (loc.length > 1) - { - Cache.log - .warn("Ignoring additional " - + (loc.length - 1) - + " location(s) provided in response header ( next one is '" - + loc[1].getValue() + "' )"); - } - rj.setJobId(loc[0].getValue()); - rj.setSubmitted(true); - } + extractJobId(rj, response); completeStatus(rj, response); break; case 500: - // Failed. - rj.setSubmitted(true); - rj.setAllowedServerExceptions(0); - rj.setSubjobComplete(true); - rj.error = true; - rj.running = false; + markAsFailed(rj, response); completeStatus(rj, response, "" + getStage(stg) + "failed. Reason below:\n"); + break; default: // Some other response. Probably need to pop up the content in a window. @@ -353,6 +326,64 @@ public class RestJobThread extends AWSThread } } + private void markAsFailed(RestJob rj, HttpResponse response) + { + // Failed. + rj.setSubmitted(true); + rj.setAllowedServerExceptions(0); + rj.setSubjobComplete(true); + rj.error = true; + rj.running = false; + } + + /** + * set the jobRunning flag and post a link to the physical result page encoded + * in rj.getJobId() + * + * @param rj + */ + private void markJobAsRunning(RestJob rj) + { + rj.statMessage = "
Job submitted successfully. Results available at this URL:\n" + + "" + + rj.getJobId() + + "
"; + rj.running = true; + } + + /** + * extract the job ID URL from the redirect page. Does nothing if job is + * already running. + * + * @param rj + * @param response + */ + private void extractJobId(RestJob rj, HttpResponse response) + { + Header[] loc; + if (!rj.isSubmitted()) + { + + // redirect URL - typical for IBIVU type jobs. + if ((loc = response.getHeaders(HTTPConstants.HEADER_LOCATION)) != null + && loc.length > 0) + { + if (loc.length > 1) + { + Cache.log + .warn("Ignoring additional " + + (loc.length - 1) + + " location(s) provided in response header ( next one is '" + + loc[1].getValue() + "' )"); + } + rj.setJobId(loc[0].getValue()); + rj.setSubmitted(true); + } + } + } + /** * job has completed. Something valid should be available from con *