ARC SDK
SubmitterPlugin.h
Go to the documentation of this file.
1 // -*- indent-tabs-mode: nil -*-
2 
3 #ifndef __ARC_SUBMITTERPLUGIN_H__
4 #define __ARC_SUBMITTERPLUGIN_H__
5 
10 #include <list>
11 #include <map>
12 #include <string>
13 
14 #include <arc/URL.h>
15 #include <arc/loader/Loader.h>
16 #include <arc/loader/Plugin.h>
17 #include <arc/compute/EntityRetriever.h>
18 #include <arc/compute/Job.h>
19 #include <arc/compute/JobDescription.h>
20 #include <arc/compute/SubmissionStatus.h>
21 #include <arc/data/DataHandle.h>
22 
23 namespace Arc {
24 
30  class Config;
31  class ExecutionTarget;
32  class JobDescription;
33  class Logger;
34  class UserConfig;
35 
37 
45  class SubmitterPlugin : public Plugin {
46  protected:
47  SubmitterPlugin(const UserConfig& usercfg, PluginArgument* parg)
48  : Plugin(parg), usercfg(&usercfg), dest_handle(NULL) {}
49  public:
50  virtual ~SubmitterPlugin() { delete dest_handle; }
51 
53 
62  virtual SubmissionStatus Submit(const JobDescription& j, const ExecutionTarget& et, EntityConsumer<Job>& jc) { std::list<const JobDescription*> ns; return Submit(std::list<JobDescription>(1, j), et, jc, ns); }
63 
65 
73  virtual SubmissionStatus Submit(const std::list<JobDescription>& jobdesc,
74  const ExecutionTarget& et,
76  std::list<const JobDescription*>& notSubmitted) = 0;
77  virtual SubmissionStatus Submit(const std::list<JobDescription>& jobdesc,
78  const std::string& endpoint,
80  std::list<const JobDescription*>& notSubmitted);
81 
82 
84 
95  virtual bool Migrate(const std::string& jobid, const JobDescription& jobdesc,
96  const ExecutionTarget& et,
97  bool forcemigration, Job& job);
98 
99  virtual const std::list<std::string>& SupportedInterfaces() const { return supportedInterfaces; };
100 
104  virtual void SetUserConfig(const UserConfig& uc);
105 
106  protected:
107  bool PutFiles(const JobDescription& jobdesc, const URL& url) const;
108  void AddJobDetails(const JobDescription& jobdesc, Job& job) const;
109 
116  std::list<std::string> supportedInterfaces;
117  DataHandle* dest_handle;
118 
119  static Logger logger;
120  };
121 
129  class SubmitterPluginLoader : public Loader {
130  public:
135 
141 
147  SubmitterPlugin* load(const std::string& name, const UserConfig& usercfg);
148 
149  SubmitterPlugin* loadByInterfaceName(const std::string& name, const UserConfig& usercfg);
150 
151  void initialiseInterfacePluginMap(const UserConfig& uc);
152  const std::map<std::string, std::string>& getInterfacePluginMap() const { return interfacePluginMap; }
153 
154  private:
155  std::multimap<std::string, SubmitterPlugin*> submitters;
156  static std::map<std::string, std::string> interfacePluginMap;
157  };
158 
164  : public PluginArgument {
165  public:
166  SubmitterPluginArgument(const UserConfig& usercfg)
167  : usercfg(usercfg) {}
169  operator const UserConfig&() {
170  return usercfg;
171  }
172  private:
173  const UserConfig& usercfg;
174  };
175 
176 } // namespace Arc
177 
178 #endif // __ARC_SUBMITTERPLUGIN_H__
Arc namespace contains all core ARC classes.
Definition: ArcConfig.h:11
SubmitterPlugin * load(const std::string &name, const UserConfig &usercfg)
User configuration class
Definition: UserConfig.h:196
This class is a wrapper around the DataPoint class.
Definition: DataHandle.h:33
virtual bool Migrate(const std::string &jobid, const JobDescription &jobdesc, const ExecutionTarget &et, bool forcemigration, Job &job)
Migrate job.
Definition: SubmitterPlugin.h:163
A logger class.
Definition: Logger.h:493
Job.
Definition: Job.h:33
Definition: SubmissionStatus.h:12
const UserConfig * usercfg
Definition: SubmitterPlugin.h:115
Definition: JobDescription.h:842
virtual SubmissionStatus Submit(const JobDescription &j, const ExecutionTarget &et, EntityConsumer< Job > &jc)
Submit a single job description.
Definition: SubmitterPlugin.h:62
Base class for the SubmitterPlugins.
Definition: SubmitterPlugin.h:45
ExecutionTarget.
Definition: ExecutionTarget.h:494
Definition: SubmitterPlugin.h:129
virtual void SetUserConfig(const UserConfig &uc)