job = new GramJob(rsl);
job.setCredentials(gssCred);
log.info("RSL = " + rsl);
NotificationService notifier = context.getNotificationService();
DurationObj compObj = notifier.computationStarted();
StringBuffer buf = new StringBuffer();
JobSubmissionListener listener = new JobSubmissionListener(job, context);
job.addListener(listener);
log.info("Request to contact:" + contact);
// The first boolean is to specify the job is a batch job - use true
// for interactive and false for batch.
// the second boolean is to specify to use the full proxy and not
// delegate a limited proxy.
job.request(contact, false, false);
log.info("JobID = " + job.getIDAsString());
// Gram.request(contact, job, false, false);
buf.append("Finished launching job, Host = ").append(context.getExecutionModel().getHost()).append(" RSL = ").append(job.getRSL()).append("working directory =").append(context.getExecutionModel().getWorkingDir()).append("tempDirectory =").append(context.getExecutionModel().getTmpDir())
.append("Globus GateKeeper cantact = ").append(contact);
context.getNotificationService().info(buf.toString());
String gramJobid = job.getIDAsString();
context.getNotificationService().info("JobID=" + gramJobid);
log.info(buf.toString());
// Send Audit Notifications
notifier.appAudit(invocationContext.getServiceName(), new URI(job.getIDAsString()), contact, null, null, gssCred.getName().toString(), null, job.getRSL());
listener.waitFor();
job.removeListener(listener);
int jobStatus = listener.getStatus();
if (jobStatus == GramJob.STATUS_FAILED) {
errCode = listener.getError();
// Adding retry for error code to properties files as
// gfac.retryonJobErrorCodes with comma separated
if (context.getServiceContext().getGlobalConfiguration().getRetryonErrorCodes().contains(Integer.toString(errCode))) {
try {
log.info("Job Failed with Error code " + errCode + " and job id: " + gramJobid);
log.info("Retry job sumttion one more time for error code" + errCode);
job = new GramJob(rsl);
job.setCredentials(gssCred);
listener = new JobSubmissionListener(job, context);
job.addListener(listener);
job.request(contact, false, false);
String newGramJobid = job.getIDAsString();
String jobStatusMessage = GfacUtils.formatJobStatus(newGramJobid, "RETRY");
context.getNotificationService().info(jobStatusMessage);
context.getNotificationService().info("JobID=" + newGramJobid);
notifier.appAudit(context.getServiceContext().getService().getService().getServiceName().getStringValue(), new URI(job.getIDAsString()), contact, null, null, gssCred.getName().toString(), null, job.getRSL());
listener.waitFor();
job.removeListener(listener);
int jobStatus1 = listener.getStatus();
if (jobStatus1 == GramJob.STATUS_FAILED) {
int errCode1 = listener.getError();
String errorMsg = "Job " + job.getID() + " on host " + context.getExecutionModel().getHost() + " Error Code = " + errCode1;
String localHost = context.getServiceContext().getGlobalConfiguration().getLocalHost();
throw new JobSubmissionFault(new Exception(errorMsg), localHost, "", "", CurrentProviders.Gram);
}
} catch (Exception e) {
String localHost = context.getServiceContext().getGlobalConfiguration().getLocalHost();
throw new JobSubmissionFault(e, localHost, "", "", CurrentProviders.Gram);
}
} else {
String errorMsg = "Job " + job.getID() + " on host " + context.getExecutionModel().getHost() + " Error Code = " + errCode;
String localHost = context.getServiceContext().getGlobalConfiguration().getLocalHost();
GfacException error = new JobSubmissionFault(new Exception(errorMsg), localHost, contact, rsl, CurrentProviders.Gram);
if (errCode == 8) {
error.setFaultCode(ErrorCodes.JOB_CANCELED);
} else {
error.setFaultCode(ErrorCodes.JOB_FAILED);
}
// error.addProperty(ErrorCodes.JOB_TYPE,
// ErrorCodes.JobType.Gram.toString());
// error.addProperty(ErrorCodes.CONTACT, contact);
throw error;
}
}
notifier.computationFinished(compObj);
/*
* Stdout and Stderror
*/
GridFtp ftp = new GridFtp();