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 
101  protected:
102  bool PutFiles(const JobDescription& jobdesc, const URL& url) const;
103  void AddJobDetails(const JobDescription& jobdesc, Job& job) const;
104 
105  const UserConfig& usercfg;
106  std::list<std::string> supportedInterfaces;
107  DataHandle* dest_handle;
108 
109  static Logger logger;
110  };
111 
119  class SubmitterPluginLoader : public Loader {
120  public:
125 
131 
137  SubmitterPlugin* load(const std::string& name, const UserConfig& usercfg);
138 
139  SubmitterPlugin* loadByInterfaceName(const std::string& name, const UserConfig& usercfg);
140 
141  void initialiseInterfacePluginMap(const UserConfig& uc);
142  const std::map<std::string, std::string>& getInterfacePluginMap() const { return interfacePluginMap; }
143 
144  private:
145  std::multimap<std::string, SubmitterPlugin*> submitters;
146  static std::map<std::string, std::string> interfacePluginMap;
147  };
148 
154  : public PluginArgument {
155  public:
156  SubmitterPluginArgument(const UserConfig& usercfg)
157  : usercfg(usercfg) {}
159  operator const UserConfig&() {
160  return usercfg;
161  }
162  private:
163  const UserConfig& usercfg;
164  };
165 
166 } // namespace Arc
167 
168 #endif // __ARC_SUBMITTERPLUGIN_H__