Back to index

nordugrid-arc-nox  1.1.0~rc6
Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Static Protected Attributes
Arc::Submitter Class Reference

Base class for the Submitters. More...

#include <Submitter.h>

Inheritance diagram for Arc::Submitter:
Inheritance graph
[legend]
Collaboration diagram for Arc::Submitter:
Collaboration graph
[legend]

List of all members.

Public Member Functions

virtual ~Submitter ()
virtual URL Submit (const JobDescription &jobdesc, const ExecutionTarget &et) const =0
 This virtual method should be overridden by plugins which should be capable of submitting jobs, defined in the JobDescription jobdesc, to the ExecutionTarget et.
virtual URL Migrate (const URL &jobid, const JobDescription &jobdesc, const ExecutionTarget &et, bool forcemigration) const =0
 This virtual method should be overridden by plugins which should be capable of migrating jobs.
virtual bool ModifyJobDescription (JobDescription &jobdesc, const ExecutionTarget &et) const =0
std::string GetCksum (const std::string &file) const

Static Public Member Functions

static std::string GetCksum (const std::string &file, const UserConfig &usercfg)

Protected Member Functions

 Submitter (const UserConfig &usercfg, const std::string &flavour)
bool PutFiles (const JobDescription &jobdesc, const URL &url) const
void AddJob (const JobDescription &job, const URL &jobid, const URL &cluster, const URL &infoendpoint) const
void AddJob (const JobDescription &job, const URL &jobid, const URL &cluster, const URL &infoendpoint, const std::map< std::string, std::string > &additionalInfo) const

Protected Attributes

const std::string flavour
const UserConfigusercfg

Static Protected Attributes

static Logger logger

Detailed Description

Base class for the Submitters.

Submitter is the base class for Grid middleware specialized Submitter objects. The class submits job(s) to the computing resource it represents and uploads (needed by the job) local input files.

Definition at line 29 of file Submitter.h.


Constructor & Destructor Documentation

Arc::Submitter::Submitter ( const UserConfig usercfg,
const std::string &  flavour 
) [protected]

Definition at line 28 of file Submitter.cpp.

Definition at line 33 of file Submitter.cpp.

{}

Member Function Documentation

void Arc::Submitter::AddJob ( const JobDescription job,
const URL jobid,
const URL cluster,
const URL infoendpoint 
) const [inline, protected]

Definition at line 69 of file Submitter.h.

                                               {
      std::map<std::string, std::string> additionalInfo;
      AddJob(job, jobid, cluster, infoendpoint, additionalInfo);
    }

Here is the caller graph for this function:

void Arc::Submitter::AddJob ( const JobDescription job,
const URL jobid,
const URL cluster,
const URL infoendpoint,
const std::map< std::string, std::string > &  additionalInfo 
) const [protected]

Definition at line 72 of file Submitter.cpp.

                                                                                   {
    NS ns;
    XMLNode info(ns, "Job");
    info.NewChild("JobID") = jobid.str();
    if (!job.Identification.JobName.empty())
      info.NewChild("Name") = job.Identification.JobName;
    info.NewChild("Flavour") = flavour;
    info.NewChild("Cluster") = cluster.str();
    info.NewChild("InfoEndpoint") = infoendpoint.str();
    info.NewChild("LocalSubmissionTime") = (std::string)Arc::Time();

    for (std::map<std::string, std::string>::const_iterator it = additionalInfo.begin();
         it != additionalInfo.end(); it++)
      info.NewChild(it->first) = it->second;

    for (std::list<std::string>::const_iterator
           it = job.Identification.ActivityOldId.begin();
         it != job.Identification.ActivityOldId.end(); it++)
      info.NewChild("OldJobID") = *it;

    std::string rep = job.UnParse("arcjsdl");
    info.NewChild("JobDescription") = (std::string)rep;

    for (std::list<FileType>::const_iterator it = job.DataStaging.File.begin();
         it != job.DataStaging.File.end(); it++)
      if (!it->Source.empty())
        if (it->Source.begin()->URI.Protocol() == "file") {
          if (!info["LocalInputFiles"])
            info.NewChild("LocalInputFiles");
          XMLNode File = info["LocalInputFiles"].NewChild("File");
          File.NewChild("Source") = it->Name;
          File.NewChild("CheckSum") = GetCksum(it->Source.begin()->URI.Path());
        }

    FileLock lock(usercfg.JobListFile());
    Config jobstorage;
    jobstorage.ReadFromFile(usercfg.JobListFile());
    jobstorage.NewChild(info);
    jobstorage.SaveToFile(usercfg.JobListFile());
  }

Here is the call graph for this function:

std::string Arc::Submitter::GetCksum ( const std::string &  file) const [inline]

Definition at line 65 of file Submitter.h.

{ return GetCksum(file, usercfg); }

Here is the call graph for this function:

Here is the caller graph for this function:

std::string Arc::Submitter::GetCksum ( const std::string &  file,
const UserConfig usercfg 
) [static]

Definition at line 116 of file Submitter.cpp.

                                                                                {
    DataHandle source(file, usercfg);
    DataBuffer buffer;

    MD5Sum md5sum;
    buffer.set(&md5sum);

    if (!source->StartReading(buffer))
      return "";

    int handle;
    unsigned int length;
    unsigned long long int offset;

    while (buffer.for_write() || !buffer.eof_read())
      if (buffer.for_write(handle, length, offset, true))
        buffer.is_written(handle);

    if (!source->StopReading())
      return "";

    if (!buffer.checksum_valid())
      return "";

    char buf[100];
    md5sum.print(buf, 100);
    return buf;
  }

Here is the call graph for this function:

virtual URL Arc::Submitter::Migrate ( const URL jobid,
const JobDescription jobdesc,
const ExecutionTarget et,
bool  forcemigration 
) const [pure virtual]

This virtual method should be overridden by plugins which should be capable of migrating jobs.

The active job which should be migrated is pointed to by the URL jobid, and is represented by the JobDescription jobdesc. The forcemigration boolean specifies if the migration should succeed if the active job cannot be terminated. The protected method AddJob can be used to save job information. This method should return the URL of the migrated job. In case migration fails an empty URL should be returned.

Implemented in Arc::SubmitterARC0, Arc::SubmitterARC1, Arc::SubmitterBES, Arc::SubmitterUNICORE, and Arc::SubmitterCREAM.

Here is the caller graph for this function:

virtual bool Arc::Submitter::ModifyJobDescription ( JobDescription jobdesc,
const ExecutionTarget et 
) const [pure virtual]

Implemented in Arc::SubmitterARC0, Arc::SubmitterARC1, Arc::SubmitterBES, Arc::SubmitterUNICORE, and Arc::SubmitterCREAM.

Here is the caller graph for this function:

bool Arc::Submitter::PutFiles ( const JobDescription jobdesc,
const URL url 
) const [protected]

Definition at line 35 of file Submitter.cpp.

                                                                          {

    FileCache cache;
    DataMover mover;
    mover.retry(true);
    mover.secure(false);
    mover.passive(true);
    mover.verbose(false);

    for (std::list<FileType>::const_iterator it = job.DataStaging.File.begin();
         it != job.DataStaging.File.end(); it++)
      if (!it->Source.empty()) {
        const URL& src = it->Source.begin()->URI;
        if (src.Protocol() == "file") {
          URL dst(std::string(url.str() + '/' + it->Name));
          DataHandle source(src, usercfg);
          DataHandle destination(dst, usercfg);
          DataStatus res =
            mover.Transfer(*source, *destination, cache, URLMap(), 0, 0, 0,
                           usercfg.Timeout());
          if (!res.Passed()) {
            if (!res.GetDesc().empty())
              logger.msg(ERROR, "Failed uploading file: %s - %s",
                         std::string(res), res.GetDesc());
            else
              logger.msg(ERROR, "Failed uploading file: %s", std::string(res));
            return false;
          }
        }
      }

    return true;
  }

Here is the call graph for this function:

Here is the caller graph for this function:

virtual URL Arc::Submitter::Submit ( const JobDescription jobdesc,
const ExecutionTarget et 
) const [pure virtual]

This virtual method should be overridden by plugins which should be capable of submitting jobs, defined in the JobDescription jobdesc, to the ExecutionTarget et.

The protected convenience method AddJob can be used to save job information. This method should return the URL of the submitted job. In case submission fails an empty URL should be returned.

Implemented in Arc::SubmitterARC0, Arc::SubmitterARC1, Arc::SubmitterBES, Arc::SubmitterUNICORE, and Arc::SubmitterCREAM.

Here is the caller graph for this function:


Member Data Documentation

const std::string Arc::Submitter::flavour [protected]

Definition at line 82 of file Submitter.h.

Logger Arc::Submitter::logger [static, protected]

Reimplemented in Arc::SubmitterARC0, Arc::SubmitterARC1, Arc::SubmitterBES, and Arc::SubmitterUNICORE.

Definition at line 84 of file Submitter.h.

const UserConfig& Arc::Submitter::usercfg [protected]

Definition at line 83 of file Submitter.h.


The documentation for this class was generated from the following files: