ARC SDK
JobInformationStorage.h
1 // -*- indent-tabs-mode: nil -*-
2 
3 #ifndef __ARC_JOBINFORMATIONSTORAGE_H__
4 #define __ARC_JOBINFORMATIONSTORAGE_H__
5 
6 #include <string>
7 #include <set>
8 
9 #ifdef DBJSTORE_ENABLED
10 #include <db_cxx.h>
11 #endif
12 
13 #include <arc/compute/Job.h>
14 
15 namespace Arc {
16 
18 
30  public:
32 
47  JobInformationStorage(const std::string& name, unsigned nTries = 10, unsigned tryInterval = 500000)
48  : name(name), nTries(nTries), tryInterval(tryInterval) {}
49  virtual ~JobInformationStorage() {}
50 
52 
71  virtual bool ReadAll(std::list<Job>& jobs, const std::list<std::string>& rejectEndpoints = std::list<std::string>()) = 0;
72 
74 
110  virtual bool Read(std::list<Job>& jobs, std::list<std::string>& jobIdentifiers,
111  const std::list<std::string>& endpoints = std::list<std::string>(),
112  const std::list<std::string>& rejectEndpoints = std::list<std::string>()) = 0;
113 
115 
130  virtual bool Write(const std::list<Job>& jobs) { std::list<const Job*> newJobs; std::set<std::string> prunedServices; return Write(jobs, prunedServices, newJobs); }
131 
133 
160  virtual bool Write(const std::list<Job>& jobs, const std::set<std::string>& prunedServices, std::list<const Job*>& newJobs) = 0;
161 
163 
173  virtual bool Clean() = 0;
174 
176 
189  virtual bool Remove(const std::list<std::string>& jobids) = 0;
190 
192 
195  const std::string& GetName() const { return name; }
196 
197  protected:
198  const std::string name;
199  unsigned nTries;
200  unsigned tryInterval;
201  };
202 
204  public:
205  JobInformationStorageXML(const std::string& name, unsigned nTries = 10, unsigned tryInterval = 500000)
206  : JobInformationStorage(name, nTries, tryInterval) {}
207  virtual ~JobInformationStorageXML() {}
208 
209  bool ReadAll(std::list<Job>& jobs, const std::list<std::string>& rejectEndpoints = std::list<std::string>());
210  bool Read(std::list<Job>& jobs, std::list<std::string>& jobIdentifiers,
211  const std::list<std::string>& endpoints = std::list<std::string>(),
212  const std::list<std::string>& rejectEndpoints = std::list<std::string>());
214  bool Write(const std::list<Job>& jobs, const std::set<std::string>& prunedServices, std::list<const Job*>& newJobs);
215  bool Clean();
216  bool Remove(const std::list<std::string>& jobids);
217 
218  private:
219  static Logger logger;
220  };
221 
222 #ifdef DBJSTORE_ENABLED
223  class JobInformationStorageBDB : public JobInformationStorage {
224  public:
225  JobInformationStorageBDB(const std::string& name, unsigned nTries = 10, unsigned tryInterval = 500000)
226  : JobInformationStorage(name, nTries, tryInterval) {}
227  virtual ~JobInformationStorageBDB() {}
228 
229  bool ReadAll(std::list<Job>& jobs, const std::list<std::string>& rejectEndpoints = std::list<std::string>());
230  bool Read(std::list<Job>& jobs, std::list<std::string>& jobIdentifiers,
231  const std::list<std::string>& endpoints = std::list<std::string>(),
232  const std::list<std::string>& rejectEndpoints = std::list<std::string>());
233  bool Write(const std::list<Job>& jobs);
234  bool Write(const std::list<Job>& jobs, const std::set<std::string>& prunedServices, std::list<const Job*>& newJobs);
235  bool Clean();
236  bool Remove(const std::list<std::string>& jobids);
237 
238  private:
239  static void logErrorMessage(int err);
240 
241  static Logger logger;
242 
243  class JobDB {
244  public:
245  JobDB(const std::string&, u_int32_t = DB_RDONLY);
246  ~JobDB();
247 
248  Db* operator->() { return jobDB; }
249  Db* viaNameKeys() { return nameSecondaryKeyDB; }
250  Db* viaEndpointKeys() { return endpointSecondaryKeyDB; }
251  Db* viaServiceInfoKeys() { return serviceInfoSecondaryKeyDB; }
252 
253  DbEnv *dbEnv;
254  Db *jobDB;
255  Db *endpointSecondaryKeyDB;
256  Db *nameSecondaryKeyDB;
257  Db *serviceInfoSecondaryKeyDB;
258  };
259  };
260 #endif
261 
262 } // namespace Arc
263 
264 #endif // __ARC_JOBINFORMATIONSTORAGE_H__