Repository: airavata Updated Branches: refs/heads/master 592f10276 -> 4d6dbbeec
Fixing issue with multiple calls in airavata-server Project: http://git-wip-us.apache.org/repos/asf/airavata/repo Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/e0eb89a0 Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/e0eb89a0 Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/e0eb89a0 Branch: refs/heads/master Commit: e0eb89a074ecca6e7e4ff641509875877a926343 Parents: 5b62ef6 Author: lahiru <[email protected]> Authored: Tue Mar 4 17:00:50 2014 -0500 Committer: lahiru <[email protected]> Committed: Tue Mar 4 17:00:50 2014 -0500 ---------------------------------------------------------------------- .../server/handler/AiravataServerHandler.java | 50 ++++++++----- .../client/samples/CreateLaunchExperiment.java | 5 ++ .../job/monitor/AiravataJobStatusUpdator.java | 74 ++++++++++---------- 3 files changed, 76 insertions(+), 53 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/airavata/blob/e0eb89a0/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java ---------------------------------------------------------------------- diff --git a/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java b/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java index 72446e3..03a47a4 100644 --- a/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java +++ b/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java @@ -50,6 +50,7 @@ public class AiravataServerHandler implements Airavata.Iface { private static final Logger logger = LoggerFactory.getLogger(AiravataServerHandler.class); public static final String ORCHESTRATOR_SERVER_HOST = "localhost"; public static final int ORCHESTRATOR_SERVER_PORT = 8940; + private OrchestratorService.Client orchestratorClient; /** * Query Airavata to fetch the API version */ @@ -269,26 +270,41 @@ public class AiravataServerHandler implements Airavata.Iface { * if more security credentials are enables, then the structure ExecutionSecurityParameters should be used. * Note: This parameter is not persisted within Airavata Registry for security reasons. * @return This method call does not have a return value. - * @throws org.apache.airavata.api.error.InvalidRequestException For any incorrect forming of the request itself. - * @throws org.apache.airavata.api.error.ExperimentNotFoundException If the specified experiment is not previously created, then an Experiment Not Found Exception is thrown. - * @throws org.apache.airavata.api.error.AiravataClientException The following list of exceptions are thrown which Airavata Client can take corrective actions to resolve: - * <p/> - * UNKNOWN_GATEWAY_ID - If a Gateway is not registered with Airavata as a one time administrative - * step, then Airavata Registry will not have a provenance area setup. The client has to follow - * gateway registration steps and retry this request. - * <p/> - * AUTHENTICATION_FAILURE - How Authentication will be implemented is yet to be determined. - * For now this is a place holder. - * <p/> - * INVALID_AUTHORIZATION - This will throw an authorization exception. When a more robust security hand-shake - * is implemented, the authorization will be more substantial. - * @throws org.apache.airavata.api.error.AiravataSystemException This exception will be thrown for any Airavata Server side issues and if the problem cannot be corrected by the client - * rather an Airavata Administrator will be notified to take corrective action. + * @throws org.apache.airavata.api.error.InvalidRequestException + * For any incorrect forming of the request itself. + * @throws org.apache.airavata.api.error.ExperimentNotFoundException + * If the specified experiment is not previously created, then an Experiment Not Found Exception is thrown. + * @throws org.apache.airavata.api.error.AiravataClientException + * The following list of exceptions are thrown which Airavata Client can take corrective actions to resolve: + * <p/> + * UNKNOWN_GATEWAY_ID - If a Gateway is not registered with Airavata as a one time administrative + * step, then Airavata Registry will not have a provenance area setup. The client has to follow + * gateway registration steps and retry this request. + * <p/> + * AUTHENTICATION_FAILURE - How Authentication will be implemented is yet to be determined. + * For now this is a place holder. + * <p/> + * INVALID_AUTHORIZATION - This will throw an authorization exception. When a more robust security hand-shake + * is implemented, the authorization will be more substantial. + * @throws org.apache.airavata.api.error.AiravataSystemException + * This exception will be thrown for any Airavata Server side issues and if the problem cannot be corrected by the client + * rather an Airavata Administrator will be notified to take corrective action. */ @Override public void launchExperiment(String airavataExperimentId, String airavataCredStoreToken) throws InvalidRequestException, ExperimentNotFoundException, AiravataClientException, AiravataSystemException, TException { - OrchestratorService.Client orchestratorClient = OrchestratorClientFactory.createOrchestratorClient(ORCHESTRATOR_SERVER_HOST, ORCHESTRATOR_SERVER_PORT); - orchestratorClient.launchExperiment(airavataExperimentId); + if(orchestratorClient == null){ + orchestratorClient = OrchestratorClientFactory.createOrchestratorClient(ORCHESTRATOR_SERVER_HOST, ORCHESTRATOR_SERVER_PORT); + } + final String expID = airavataExperimentId; + (new Thread(){ + public void run(){ + try { + orchestratorClient.launchExperiment(expID); + } catch (TException e) { + e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. + } + } + }).start(); } /** http://git-wip-us.apache.org/repos/asf/airavata/blob/e0eb89a0/airavata-api/airavata-client-sdks/java-client-samples/src/main/java/org/apache/airavata/client/samples/CreateLaunchExperiment.java ---------------------------------------------------------------------- diff --git a/airavata-api/airavata-client-sdks/java-client-samples/src/main/java/org/apache/airavata/client/samples/CreateLaunchExperiment.java b/airavata-api/airavata-client-sdks/java-client-samples/src/main/java/org/apache/airavata/client/samples/CreateLaunchExperiment.java index 6bf809f..0c5e351 100644 --- a/airavata-api/airavata-client-sdks/java-client-samples/src/main/java/org/apache/airavata/client/samples/CreateLaunchExperiment.java +++ b/airavata-api/airavata-client-sdks/java-client-samples/src/main/java/org/apache/airavata/client/samples/CreateLaunchExperiment.java @@ -65,6 +65,11 @@ public class CreateLaunchExperiment { System.out.println("Experiment ID : " + expId); launchExperiment(airavata, expId); System.out.println("Launched successfully"); + try { + Thread.sleep(20000); + } catch (InterruptedException e) { + e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. + } Thread monitor = (new Thread(){ public void run() { Map<String, JobStatus> jobStatuses = null; http://git-wip-us.apache.org/repos/asf/airavata/blob/e0eb89a0/modules/airavata-job-monitor/src/main/java/org/apache/airavata/job/monitor/AiravataJobStatusUpdator.java ---------------------------------------------------------------------- diff --git a/modules/airavata-job-monitor/src/main/java/org/apache/airavata/job/monitor/AiravataJobStatusUpdator.java b/modules/airavata-job-monitor/src/main/java/org/apache/airavata/job/monitor/AiravataJobStatusUpdator.java index a6d6c31..78f0621 100644 --- a/modules/airavata-job-monitor/src/main/java/org/apache/airavata/job/monitor/AiravataJobStatusUpdator.java +++ b/modules/airavata-job-monitor/src/main/java/org/apache/airavata/job/monitor/AiravataJobStatusUpdator.java @@ -68,42 +68,44 @@ public class AiravataJobStatusUpdator{ the registry accordingly, for now we are just printing to standard Out */ JobState state = jobStatus.getState(); - try { - updateJobStatus(jobStatus.getMonitorID().getJobID(),state); - } catch (Exception e) { - logger.error("Error persisting data" + e.getLocalizedMessage(),e); - } - switch (state) { - case COMPLETE: - logger.info("Job ID:" + jobStatus.getMonitorID().getJobID() + " is DONE"); - jobsToMonitor.remove(jobStatus.getMonitorID()); - break; - case UNKNOWN: - logger.info("Job ID:" + jobStatus.getMonitorID().getJobID() + " is UNKNOWN"); - logger.info("Unknown job status came, if the old job status is RUNNING or something active, we have to make it complete"); - //todo implement this logic - break; - case QUEUED: - logger.info("Job ID:" + jobStatus.getMonitorID().getJobID() + " is QUEUED"); - break; - case SUBMITTED: - logger.info("Job ID:" + jobStatus.getMonitorID().getJobID() + " is SUBMITTED"); - break; - case ACTIVE: - logger.info("Job ID:" + jobStatus.getMonitorID().getJobID() + " is ACTIVE"); - break; - case CANCELED: - logger.info("Job ID:" + jobStatus.getMonitorID().getJobID() + " is CANCELED"); - break; - case FAILED: - logger.info("Job ID:" + jobStatus.getMonitorID().getJobID() + " is FAILED"); - break; - case HELD: - logger.info("Job ID:" + jobStatus.getMonitorID().getJobID() + " is HELD"); - break; - case SUSPENDED: - logger.info("Job ID:" + jobStatus.getMonitorID().getJobID() + " is SUSPENDED"); - break; + if (state != null) { + try { + updateJobStatus(jobStatus.getMonitorID().getJobID(), state); + } catch (Exception e) { + logger.error("Error persisting data" + e.getLocalizedMessage(), e); + } + switch (state) { + case COMPLETE: + logger.info("Job ID:" + jobStatus.getMonitorID().getJobID() + " is DONE"); + jobsToMonitor.remove(jobStatus.getMonitorID()); + break; + case UNKNOWN: + logger.info("Job ID:" + jobStatus.getMonitorID().getJobID() + " is UNKNOWN"); + logger.info("Unknown job status came, if the old job status is RUNNING or something active, we have to make it complete"); + //todo implement this logic + break; + case QUEUED: + logger.info("Job ID:" + jobStatus.getMonitorID().getJobID() + " is QUEUED"); + break; + case SUBMITTED: + logger.info("Job ID:" + jobStatus.getMonitorID().getJobID() + " is SUBMITTED"); + break; + case ACTIVE: + logger.info("Job ID:" + jobStatus.getMonitorID().getJobID() + " is ACTIVE"); + break; + case CANCELED: + logger.info("Job ID:" + jobStatus.getMonitorID().getJobID() + " is CANCELED"); + break; + case FAILED: + logger.info("Job ID:" + jobStatus.getMonitorID().getJobID() + " is FAILED"); + break; + case HELD: + logger.info("Job ID:" + jobStatus.getMonitorID().getJobID() + " is HELD"); + break; + case SUSPENDED: + logger.info("Job ID:" + jobStatus.getMonitorID().getJobID() + " is SUSPENDED"); + break; + } } } public static void updateJobStatus(String jobID, JobState state) throws Exception {
