ARC SDK
Basic Job Submission

C++

#include <arc/Logger.h>
#include <arc/UserConfig.h>
#include <arc/compute/Endpoint.h>
#include <arc/compute/Job.h>
#include <arc/compute/JobDescription.h>
#include <arc/compute/Submitter.h>
#include <arc/compute/JobInformationStorageXML.h>
int main() {
// Set up logging to stderr with level VERBOSE (a lot of output will be shown)
Arc::LogStream logcerr(std::cerr);
logcerr.setFormat(Arc::ShortFormat);
Arc::Logger logger(Arc::Logger::getRootLogger(), "jobsubmit");
// UserConfig contains information on credentials and default services to use.
// This form of the constructor is necessary to initialise the local job list.
Arc::UserConfig usercfg("", "");
// Simple job description which outputs hostname to stdout
std::string jobdesc("&(executable=/bin/hostname)(stdout=stdout)");
// Parse job description
std::list<Arc::JobDescription> jobdescs;
if (!Arc::JobDescription::Parse(jobdesc, jobdescs)) {
logger.msg(Arc::ERROR, "Invalid job description");
return 1;
}
// Use top-level NorduGrid information index to find resources
Arc::Endpoint index("ldap://index1.nordugrid.org:2135/Mds-Vo-name=NorduGrid,o=grid",
"org.nordugrid.ldapegiis");
std::list<Arc::Endpoint> services(1, index);
// Do the submission
std::list<Arc::Job> jobs;
Arc::Submitter submitter(usercfg);
if (submitter.BrokeredSubmit(services, jobdescs, jobs) != Arc::SubmissionStatus::NONE) {
logger.msg(Arc::ERROR, "Failed to submit job");
return 1;
}
// Write information on submitted job to local job list (~/.arc/jobs.xml)
Arc::JobInformationStorageXML jobList(usercfg.JobListFile());
if (!jobList.Write(jobs)) {
logger.msg(Arc::WARNING, "Failed to write to local job list %s", usercfg.JobListFile());
}
// Job submitted ok
std::cout << "Job submitted with job id " << jobs.front().JobID << std::endl;
return 0;
}

Python

1 import arc
2 import sys
3 
4 # Set up logging to stderr with level VERBOSE (a lot of output will be shown)
5 logstdout = arc.LogStream(sys.stdout)
6 logstdout.setFormat(arc.ShortFormat)
7 arc.Logger_getRootLogger().addDestination(logstdout)
8 arc.Logger_getRootLogger().setThreshold(arc.VERBOSE)
9 logger = arc.Logger(arc.Logger_getRootLogger(), "jobsubmit")
10 
11 # UserConfig contains information on credentials and default services to use.
12 # This form of the constructor is necessary to initialise the local job list.
13 usercfg = arc.UserConfig("", "")
14 
15 # Simple job description which outputs hostname to stdout
16 jobdescstring = "&(executable=/bin/hostname)(stdout=stdout)"
17 
18 # Parse job description
19 jobdescs = arc.JobDescriptionList()
20 if not arc.JobDescription_Parse(jobdescstring, jobdescs):
21  logger.msg(arc.ERROR, "Invalid job description")
22  sys.exit(1);
23 
24 # Use top-level NorduGrid information index to find resources
25 index = arc.Endpoint("ldap://index1.nordugrid.org:2135/Mds-Vo-name=NorduGrid,o=grid",
26  arc.Endpoint.REGISTRY,
27  "org.nordugrid.ldapegiis")
28 services = arc.EndpointList(1, index)
29 
30 # Do the submission
31 jobs = arc.JobList()
32 submitter = arc.Submitter(usercfg)
33 if submitter.BrokeredSubmit(services, jobdescs, jobs) != arc.SubmissionStatus.NONE:
34  logger.msg(arc.ERROR, "Failed to submit job")
35  sys.exit(1)
36 
37 # Write information on submitted job to local job list (~/.arc/jobs.xml)
38 jobList = arc.JobInformationStorageXML(usercfg.JobListFile())
39 if not jobList.Write(jobs):
40  logger.msg(arc.WARNING, "Failed to write to local job list %s", usercfg.JobListFile())
41 
42 # Job submitted ok
43 print "Job submitted with job id %s" % jobs.front().JobID

Java

import nordugrid.arc.Logger;
import nordugrid.arc.LogStream_ostream;
import nordugrid.arc.UserConfig;
import nordugrid.arc.Endpoint;
import nordugrid.arc.EndpointList;
import nordugrid.arc.Job;
import nordugrid.arc.JobList;
import nordugrid.arc.JobDescription;
import nordugrid.arc.JobDescriptionList;
import nordugrid.arc.Submitter;
import nordugrid.arc.JobInformationStorageXML;
public class BasicJobSubmission
{
public static void main(String argv[])
{
// Set up logging to stderr with level VERBOSE (a lot of output will be shown)
LogStream_ostream logstdout = new LogStream_ostream(nordugrid.arc.arc.getStdout());
logstdout.setFormat(nordugrid.arc.LogFormat.ShortFormat);
Logger.getRootLogger().addDestination(logstdout);
Logger.getRootLogger().setThreshold(nordugrid.arc.LogLevel.VERBOSE);
Logger logger = new Logger(Logger.getRootLogger(), "jobsubmit");
// UserConfig contains information on credentials and default services to use.
// This form of the constructor is necessary to initialise the local job list.
UserConfig usercfg = new UserConfig("", "");
// Simple job description which outputs hostname to stdout
String jobdesc = "&(executable=/bin/hostname)(stdout=stdout)";
// Parse job description
JobDescriptionList jobdescs = new JobDescriptionList();
if (!JobDescription.Parse(jobdesc, jobdescs).toBool()) {
logger.msg(nordugrid.arc.LogLevel.ERROR, "Invalid job description");
System.exit(1);
}
// Use top-level NorduGrid information index to find resources
Endpoint index = new Endpoint("ldap://index1.nordugrid.org:2135/Mds-Vo-name=NorduGrid,o=grid",
Endpoint.CapabilityEnum.REGISTRY,
"org.nordugrid.ldapegiis");
EndpointList services = new EndpointList();
services.add(index);
// Do the submission
JobList jobs = new JobList();
Submitter submitter = new Submitter(usercfg);
if (!submitter.BrokeredSubmit(services, jobdescs, jobs).equals(nordugrid.arc.SubmissionStatus.SubmissionStatusType.NONE)) {
logger.msg(nordugrid.arc.LogLevel.ERROR, "Failed to submit job");
System.exit(1);
}
// Write information on submitted job to local job list (~/.arc/jobs.xml)
JobInformationStorageXML jobList = new JobInformationStorageXML(usercfg.JobListFile());
if (!jobList.Write(jobs)) {
logger.msg(nordugrid.arc.LogLevel.WARNING, "Failed to write to local job list " + usercfg.JobListFile());
}
// Job submitted ok
System.out.println("Job submitted with job id " + jobs.begin().next().getJobID());
return;
}
}