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 | Private Member Functions
Arc::SubmitterCREAM Class Reference

#include <SubmitterCREAM.h>

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

List of all members.

Public Member Functions

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

Static Public Member Functions

static PluginInstance (PluginArgument *arg)
static std::string GetCksum (const std::string &file, const UserConfig &usercfg)

Protected Member Functions

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

Private Member Functions

 SubmitterCREAM (const UserConfig &usercfg)
 ~SubmitterCREAM ()

Detailed Description

Definition at line 12 of file SubmitterCREAM.h.


Constructor & Destructor Documentation

Arc::SubmitterCREAM::SubmitterCREAM ( const UserConfig usercfg) [private]

Definition at line 19 of file SubmitterCREAM.cpp.

    : Submitter(usercfg, "CREAM") {}

Here is the caller graph for this function:

Definition at line 22 of file SubmitterCREAM.cpp.

{}

Member Function Documentation

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

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, inherited]

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, inherited]

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, inherited]

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:

Definition at line 24 of file SubmitterCREAM.cpp.

                                                      {
    SubmitterPluginArgument *subarg =
      dynamic_cast<SubmitterPluginArgument*>(arg);
    if (!subarg)
      return NULL;
    return new SubmitterCREAM(*subarg);
  }

Here is the call graph for this function:

URL Arc::SubmitterCREAM::Migrate ( const URL jobid,
const JobDescription jobdesc,
const ExecutionTarget et,
bool  forcemigration 
) const [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.

Implements Arc::Submitter.

Definition at line 82 of file SubmitterCREAM.cpp.

                                                         {
    logger.msg(INFO, "Trying to migrate to %s: Migration to a CREAM cluster is not supported.", et.url.str());
    return URL();
  }

Here is the call graph for this function:

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

Implements Arc::Submitter.

Definition at line 89 of file SubmitterCREAM.cpp.

                                                                                                    {
    if (jobdesc.JDL_elements.find("BatchSystem") == jobdesc.JDL_elements.end() &&
        !et.ManagerProductName.empty())
      jobdesc.JDL_elements["BatchSystem"] = et.ManagerProductName;

    if (jobdesc.Resources.CandidateTarget.empty()) {
      ResourceTargetType candidateTarget;
      candidateTarget.EndPointURL = URL();
      candidateTarget.QueueName = et.ComputingShareName;
      jobdesc.Resources.CandidateTarget.push_back(candidateTarget);
    }

    return true;
  }

Here is the caller graph for this function:

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

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:

URL Arc::SubmitterCREAM::Submit ( const JobDescription jobdesc,
const ExecutionTarget et 
) const [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.

Implements Arc::Submitter.

Definition at line 32 of file SubmitterCREAM.cpp.

                                                              {
    MCCConfig cfg;
    usercfg.ApplyToConfig(cfg);
    std::string delegationid = UUID();
    URL delegationurl(et.url);
    delegationurl.ChangePath(delegationurl.Path() + "/gridsite-delegation");
    CREAMClient gLiteClientDelegation(delegationurl, cfg, usercfg.Timeout());
    if (!gLiteClientDelegation.createDelegation(delegationid, usercfg.ProxyPath())) {
      logger.msg(INFO, "Failed creating singed delegation certificate");
      return URL();
    }
    URL submissionurl(et.url);
    submissionurl.ChangePath(submissionurl.Path() + "/CREAM2");
    CREAMClient gLiteClientSubmission(submissionurl, cfg, usercfg.Timeout());
    gLiteClientSubmission.setDelegationId(delegationid);

    JobDescription job(jobdesc);
    if (!ModifyJobDescription(job, et)) {
      logger.msg(INFO, "Failed adapting job description to target resources");
      return URL();
    }

    std::string jobdescstring = job.UnParse("JDL");
    creamJobInfo jobInfo;
    if (!gLiteClientSubmission.registerJob(jobdescstring, jobInfo)) {
      logger.msg(INFO, "Failed registering job");
      return URL();
    }

    if (!PutFiles(job, jobInfo.ISB_URI)) {
      logger.msg(INFO, "Failed uploading local input files");
      return URL();
    }

    if (!gLiteClientSubmission.startJob(jobInfo.jobId)) {
      logger.msg(INFO, "Failed starting job");
      return URL();
    }

    std::map<std::string, std::string> additionalInfo;
    additionalInfo["ISB"] = jobInfo.ISB_URI;
    additionalInfo["OSB"] = jobInfo.OSB_URI;

    AddJob(job, submissionurl.str() + '/' + jobInfo.jobId, et.Cluster,
           delegationurl.str() + '/' + delegationid, additionalInfo);

    return submissionurl.str() + '/' + jobInfo.jobId;
  }

Here is the call graph for this function:


Member Data Documentation

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

Definition at line 82 of file Submitter.h.

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

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, inherited]

Definition at line 83 of file Submitter.h.


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