ARC SDK
Submitter.h
1 // -*- indent-tabs-mode: nil -*-
2 
3 #ifndef __ARC_SUBMITTER_H__
4 #define __ARC_SUBMITTER_H__
5 
6 #include <arc/UserConfig.h>
7 
8 #include <arc/compute/Endpoint.h>
9 #include <arc/compute/EndpointQueryingStatus.h>
10 #include <arc/compute/JobDescription.h>
11 #include <arc/compute/Job.h>
12 #include <arc/compute/SubmitterPlugin.h>
13 #include <arc/compute/ExecutionTarget.h>
14 #include <arc/compute/EntityRetriever.h>
15 
16 
17 namespace Arc {
18 
87  public:
90  UNKNOWN,
91  NOPLUGIN,
92  SUCCESSFUL
93  };
94 
96  static std::string str(EndpointSubmissionStatusType status);
97 
99  EndpointSubmissionStatus(EndpointSubmissionStatusType status = UNKNOWN, const std::string& description = "") : status(status), description(description) {};
100 
102  bool operator==(EndpointSubmissionStatusType s) const { return status == s; };
106  bool operator==(const EndpointSubmissionStatus& s) const { return status == s.status; };
108  bool operator!=(EndpointSubmissionStatusType s) const { return status != s; };
110  bool operator!=(const EndpointSubmissionStatus& s) const { return status != s.status; };
112  bool operator!() const { return status != SUCCESSFUL; };
114  operator bool() const { return status == SUCCESSFUL; };
115 
123  EndpointSubmissionStatus& operator=(const EndpointSubmissionStatus& s) { status = s.status; description = s.description; return *this; };
124 
126  EndpointSubmissionStatusType getStatus() const { return status; };
128  const std::string& getDescription() const { return description; };
132  std::string str() const { return str(status); };
133 
134  private:
136  std::string description;
137  };
138 
139  class SubmissionStatus;
140 
142 
208  class Submitter {
209  public:
211 
217  Submitter(const UserConfig& uc) : uc(uc) {}
218  ~Submitter() {}
219 
220  // === Using the consumer concept as in the EntityRetriever ===
222 
229  void addConsumer(EntityConsumer<Job>& addConsumer_consumer /* The name 'addConsumer_consumer' is important for Swig when matching methods */) { consumers.push_back(&addConsumer_consumer); }
231 
235  void removeConsumer(EntityConsumer<Job>& removeConsumer_consumer /* The name 'removeConsumer_consumer' is important for Swig when matching methods */);
236  // ===
237 
238  // === No brokering ===
239 
241 
265  SubmissionStatus Submit(const Endpoint& endpoint, const JobDescription& desc) { return Submit(endpoint, std::list<JobDescription>(1, desc)); }
267 
278  SubmissionStatus Submit(const Endpoint& endpoint, const JobDescription& desc, Job& job);
280 
288  SubmissionStatus Submit(const Endpoint& endpoint, const std::list<JobDescription>& descs);
290 
299  SubmissionStatus Submit(const Endpoint& endpoint, const std::list<JobDescription>& descs, std::list<Job>& jobs);
301 
318  SubmissionStatus Submit(const std::list<Endpoint>& endpoint, const std::list<JobDescription>& descs);
320 
328  SubmissionStatus Submit(const std::list<Endpoint>& endpoint, const std::list<JobDescription>& descs, std::list<Job>& jobs);
329 
330  // ==== Submission to single configuration (adaption of job description) ====
331  // ===== Single job =====
333 
355  SubmissionStatus Submit(const ExecutionTarget& et, const JobDescription& desc) { return Submit(et, std::list<JobDescription>(1, desc)); }
357 
369  SubmissionStatus Submit(const ExecutionTarget& et, const JobDescription& desc, Job& job);
370  // =====
371  // ===== Multiple jobs =====
373 
385  SubmissionStatus Submit(const ExecutionTarget& et, const std::list<JobDescription>& descs);
387 
400  SubmissionStatus Submit(const ExecutionTarget& et, const std::list<JobDescription>& descs, std::list<Job>& jobs);
401  // =====
402  // ====
403  // ===
404 
405  // === Brokering with service discovery (multiple endpoints) ===
406  // ==== Using provided JobDescription objects for brokering ====
408 
448  SubmissionStatus BrokeredSubmit(const std::list<std::string>& endpoints, const std::list<JobDescription>& descs, const std::list<std::string>& requestedSubmissionInterfaces = std::list<std::string>());
450 
471  SubmissionStatus BrokeredSubmit(const std::list<std::string>& endpoints, const std::list<JobDescription>& descs, std::list<Job>& jobs, const std::list<std::string>& requestedSubmissionInterfaces = std::list<std::string>());
473 
493  SubmissionStatus BrokeredSubmit(const std::list<Endpoint>& endpoints, const std::list<JobDescription>& descs, const std::list<std::string>& requestedSubmissionInterfaces = std::list<std::string>());
495 
518  SubmissionStatus BrokeredSubmit(const std::list<Endpoint>& endpoints, const std::list<JobDescription>& descs, std::list<Job>& jobs, const std::list<std::string>& requestedSubmissionInterfaces = std::list<std::string>());
519  // ====
520  // ===
521 
522  // === Methods for handling errors ===
524 
528  const std::list<const JobDescription*>& GetDescriptionsNotSubmitted() const { return notsubmitted; }
530  void ClearNotSubmittedDescriptions() { notsubmitted.clear(); }
532 
539  const EndpointStatusMap& GetEndpointQueryingStatuses() const { return queryingStatusMap; }
541 
544  void ClearEndpointQueryingStatuses() { queryingStatusMap.clear(); }
546 
553  const std::map<Endpoint, EndpointSubmissionStatus>& GetEndpointSubmissionStatuses() const { return submissionStatusMap; }
555 
558  void ClearEndpointSubmissionStatuses() { submissionStatusMap.clear(); }
559 
561 
566  void ClearAllStatuses() { queryingStatusMap.clear(); submissionStatusMap.clear(); }
568 
575  void ClearAll() { notsubmitted.clear(); queryingStatusMap.clear(); submissionStatusMap.clear(); }
576  // ===
577 
578  private:
579  class ConsumerWrapper : public EntityConsumer<Job> {
580  public:
581  ConsumerWrapper(Submitter& s) : s(s) {}
582  void addEntity(const Job& j) {
583  for (std::list<EntityConsumer<Job>*>::iterator it = s.consumers.begin(); it != s.consumers.end(); ++it) {
584  (*it)->addEntity(j);
585  }
586  }
587  private:
588  Submitter& s;
589  };
590 
591  SubmissionStatus SubmitNoClear(const Endpoint& endpoint, const std::list<JobDescription>& descs);
592 
593  const UserConfig& uc;
594 
595  EndpointStatusMap queryingStatusMap;
596  std::map<Endpoint, EndpointSubmissionStatus> submissionStatusMap;
597 
598  std::list<const JobDescription*> notsubmitted;
599 
600  std::list<EntityConsumer<Job>*> consumers;
601 
602  static SubmitterPluginLoader& getLoader();
603 
604  static Logger logger;
605  };
606 }
607 
608 #endif // __ARC_SUBMITTER_H__
Arc namespace contains all core ARC classes.
Definition: ArcConfig.h:11
Submitter(const UserConfig &uc)
Create a Submitter object.
Definition: Submitter.h:217
User configuration class
Definition: UserConfig.h:196
void ClearAllStatuses()
Clear all status maps.
Definition: Submitter.h:566
const std::map< Endpoint, EndpointSubmissionStatus > & GetEndpointSubmissionStatuses() const
Get submission status map.
Definition: Submitter.h:553
EndpointSubmissionStatusType getStatus() const
Definition: Submitter.h:126
SubmissionStatus BrokeredSubmit(const std::list< std::string > &endpoints, const std::list< JobDescription > &descs, const std::list< std::string > &requestedSubmissionInterfaces=std::list< std::string >())
Submit jobs to matching and ranked computing services.
void ClearEndpointQueryingStatuses()
Clear endpoint status querying map.
Definition: Submitter.h:544
const std::list< const JobDescription * > & GetDescriptionsNotSubmitted() const
Get job descriptions not submitted.
Definition: Submitter.h:528
const std::string & getDescription() const
Definition: Submitter.h:128
Job.
Definition: Job.h:33
Class for submitting jobs.
Definition: Submitter.h:208
Definition: SubmissionStatus.h:12
Definition: JobDescription.h:842
Represents an endpoint of a service with a given interface type and capabilities. ...
Definition: Endpoint.h:68
Definition: Submitter.h:86
bool operator!=(const EndpointSubmissionStatus &s) const
Definition: Submitter.h:110
bool operator!=(EndpointSubmissionStatusType s) const
Definition: Submitter.h:108
EndpointSubmissionStatus & operator=(const EndpointSubmissionStatus &s)
Definition: Submitter.h:123
void removeConsumer(EntityConsumer< Job > &removeConsumer_consumer)
Remove a previous added consumer object.
EndpointSubmissionStatus(EndpointSubmissionStatusType status=UNKNOWN, const std::string &description="")
Definition: Submitter.h:99
void ClearNotSubmittedDescriptions()
Clear list of not submitted job descriptions.
Definition: Submitter.h:530
EndpointSubmissionStatusType
Definition: Submitter.h:89
SubmissionStatus Submit(const ExecutionTarget &et, const JobDescription &desc)
Submit job to ExecutionTarget (computing service)
Definition: Submitter.h:355
SubmissionStatus Submit(const Endpoint &endpoint, const JobDescription &desc)
Submit job to endpoint.
Definition: Submitter.h:265
void ClearEndpointSubmissionStatuses()
Clear submission status map.
Definition: Submitter.h:558
void ClearAll()
Clear all.
Definition: Submitter.h:575
bool operator!() const
Definition: Submitter.h:112
ExecutionTarget.
Definition: ExecutionTarget.h:494
bool operator==(const EndpointSubmissionStatus &s) const
Definition: Submitter.h:106
void addConsumer(EntityConsumer< Job > &addConsumer_consumer)
Add a Job consumer.
Definition: Submitter.h:229
EndpointSubmissionStatus & operator=(EndpointSubmissionStatusType s)
Definition: Submitter.h:119
Status map for Endpoint objects.
Definition: Endpoint.h:38
bool operator==(EndpointSubmissionStatusType s) const
Definition: Submitter.h:102
const EndpointStatusMap & GetEndpointQueryingStatuses() const
Get status map for queried endpoints.
Definition: Submitter.h:539
std::string str() const
Definition: Submitter.h:132