ARC SDK
ExecutionTarget.h
Go to the documentation of this file.
1 // -*- indent-tabs-mode: nil -*-
2 
3 #ifndef __ARC_EXECUTIONTARGET_H__
4 #define __ARC_EXECUTIONTARGET_H__
5 
10 #include <list>
11 #include <map>
12 #include <set>
13 #include <string>
14 
15 #include <arc/DateTime.h>
16 #include <arc/compute/Endpoint.h>
17 #include <arc/URL.h>
18 #include <arc/Utils.h>
19 #include <arc/compute/GLUE2Entity.h>
20 #include <arc/compute/JobDescription.h>
21 #include <arc/compute/Software.h>
22 #include <arc/compute/SubmissionStatus.h>
23 
24 namespace Arc {
25 
26  class Job;
27  class Logger;
28  class SubmitterPlugin;
29  class UserConfig;
30 
41 
42 
56  : public Software {
57  public:
58  ApplicationEnvironment() : FreeSlots(-1), FreeJobs(-1), FreeUserSeats(-1) {}
59  ApplicationEnvironment(const std::string& Name)
60  : Software(Name), FreeSlots(-1), FreeJobs(-1), FreeUserSeats(-1) {}
61  ApplicationEnvironment(const std::string& Name, const std::string& Version)
62  : Software(Name, Version), FreeSlots(-1), FreeJobs(-1), FreeUserSeats(-1) {}
63  ApplicationEnvironment& operator=(const Software& sv) {
64  Software::operator=(sv);
65  return *this;
66  }
67 
68  std::string State;
69  int FreeSlots;
70  int FreeJobs;
71  int FreeUserSeats;
72  };
73 
79  public:
80  LocationAttributes() : Latitude(0), Longitude(0) {}
81 
82  std::string Address;
83  std::string Place;
84  std::string Country;
85  std::string PostCode;
86  float Latitude;
87  float Longitude;
88 
89  friend std::ostream& operator<<(std::ostream& out, const LocationAttributes& l);
90  };
91 
97  public:
98  std::string Name;
99  std::string Owner;
100 
101  friend std::ostream& operator<<(std::ostream& out, const AdminDomainAttributes& ad);
102  };
103 
109  public:
111  : VirtualMachine(false), CPUClockSpeed(-1), MainMemorySize(-1),
112  ConnectivityIn(false), ConnectivityOut(false) {}
113  std::string ID;
114  std::string Platform;
115  bool VirtualMachine;
116  std::string CPUVendor;
117  std::string CPUModel;
118  std::string CPUVersion;
119  int CPUClockSpeed;
120  int MainMemorySize;
121 
123 
135 
136  bool ConnectivityIn;
137  bool ConnectivityOut;
138 
139  friend std::ostream& operator<<(std::ostream&, const ExecutionEnvironmentAttributes&);
140  };
141 
147  public:
149  Reservation(false), BulkSubmission(false),
150  TotalPhysicalCPUs(-1), TotalLogicalCPUs(-1), TotalSlots(-1),
151  Homogeneous(true),
152  WorkingAreaShared(true), WorkingAreaTotal(-1), WorkingAreaFree(-1), WorkingAreaLifeTime(-1),
153  CacheTotal(-1), CacheFree(-1) {}
154 
155  std::string ID;
156  std::string ProductName;
157  std::string ProductVersion;
158  bool Reservation;
159  bool BulkSubmission;
160  int TotalPhysicalCPUs;
161  int TotalLogicalCPUs;
162  int TotalSlots;
163  bool Homogeneous;
164  std::list<std::string> NetworkInfo;
165  bool WorkingAreaShared;
166  int WorkingAreaTotal;
167  int WorkingAreaFree;
168  Period WorkingAreaLifeTime;
169  int CacheTotal;
170  int CacheFree;
171 
172  friend std::ostream& operator<<(std::ostream&, const ComputingManagerAttributes&);
173  };
174 
180  public:
182  MaxWallTime(-1), MaxTotalWallTime(-1), MinWallTime(-1), DefaultWallTime(-1),
183  MaxCPUTime(-1), MaxTotalCPUTime(-1), MinCPUTime(-1), DefaultCPUTime(-1),
184  MaxTotalJobs(-1), MaxRunningJobs(-1), MaxWaitingJobs(-1),
185  MaxPreLRMSWaitingJobs(-1), MaxUserRunningJobs(-1), MaxSlotsPerJob(-1),
186  MaxStageInStreams(-1), MaxStageOutStreams(-1),
188  Preemption(false),
189  TotalJobs(-1), RunningJobs(-1), LocalRunningJobs(-1), WaitingJobs(-1), LocalWaitingJobs(-1),
190  SuspendedJobs(-1), LocalSuspendedJobs(-1), StagingJobs(-1), PreLRMSWaitingJobs(-1),
191  EstimatedAverageWaitingTime(-1), EstimatedWorstWaitingTime(-1),
192  FreeSlots(-1), UsedSlots(-1), RequestedSlots(-1) {}
193 
194  std::string ID;
196 
200  std::string Name;
201  std::string MappingQueue;
202 
203  Period MaxWallTime;
204  Period MaxTotalWallTime; // not in current Glue2 draft
205  Period MinWallTime;
206  Period DefaultWallTime;
207  Period MaxCPUTime;
208  Period MaxTotalCPUTime;
209  Period MinCPUTime;
210  Period DefaultCPUTime;
211  int MaxTotalJobs;
212  int MaxRunningJobs;
213  int MaxWaitingJobs;
214  int MaxPreLRMSWaitingJobs;
215  int MaxUserRunningJobs;
216  int MaxSlotsPerJob;
217  int MaxStageInStreams;
218  int MaxStageOutStreams;
219  std::string SchedulingPolicy;
220 
222 
228 
230 
236 
238 
244 
245  URL DefaultStorageService;
246  bool Preemption;
247  int TotalJobs;
248  int RunningJobs;
249  int LocalRunningJobs;
250  int WaitingJobs;
251  int LocalWaitingJobs;
252  int SuspendedJobs;
253  int LocalSuspendedJobs;
254  int StagingJobs;
255  int PreLRMSWaitingJobs;
256  Period EstimatedAverageWaitingTime;
257  Period EstimatedWorstWaitingTime;
258  int FreeSlots;
259 
261 
267  std::map<Period, int> FreeSlotsWithDuration;
268  int UsedSlots;
269  int RequestedSlots;
270  std::string ReservationPolicy;
271 
272  friend std::ostream& operator<<(std::ostream&, const ComputingShareAttributes&);
273  };
274 
280  public:
281  ComputingEndpointAttributes() : DowntimeStarts(-1), DowntimeEnds(-1),
282  TotalJobs(-1), RunningJobs(-1), WaitingJobs(-1),
283  StagingJobs(-1), SuspendedJobs(-1), PreLRMSWaitingJobs(-1) {}
284 
285  std::string ID;
286  std::string URLString;
287  std::string InterfaceName;
288  std::string HealthState;
289  std::string HealthStateInfo;
290  std::string QualityLevel;
291  std::set<std::string> Capability;
292  std::string Technology;
293  std::list<std::string> InterfaceVersion;
294  std::list<std::string> InterfaceExtension;
295  std::list<std::string> SupportedProfile;
296  std::string Implementor;
297  Software Implementation;
298  std::string ServingState;
299  std::string IssuerCA;
300  std::list<std::string> TrustedCA;
301  Time DowntimeStarts;
302  Time DowntimeEnds;
303  std::string Staging;
304  int TotalJobs;
305  int RunningJobs;
306  int WaitingJobs;
307  int StagingJobs;
308  int SuspendedJobs;
309  int PreLRMSWaitingJobs;
310  // This is singular in the GLUE2 doc: JobDescription
311  std::list<std::string> JobDescriptions;
312 
313  friend std::ostream& operator<<(std::ostream&, const ComputingEndpointAttributes&);
314  };
315 
321  public:
323  TotalJobs(-1), RunningJobs(-1), WaitingJobs(-1),
324  StagingJobs(-1), SuspendedJobs(-1), PreLRMSWaitingJobs(-1) {}
325  std::string ID;
326  std::string Name;
327  std::string Type;
328  std::set<std::string> Capability;
329  std::string QualityLevel;
330  int TotalJobs;
331  int RunningJobs;
332  int WaitingJobs;
333  int StagingJobs;
334  int SuspendedJobs;
335  int PreLRMSWaitingJobs;
336 
337  // Other
338  Endpoint InformationOriginEndpoint; // this ComputingService was generated while this Endpoint was queried
339 
340  friend std::ostream& operator<<(std::ostream& out, const ComputingServiceAttributes& cs);
341  };
342 
347  class LocationType : public GLUE2Entity<LocationAttributes> {};
348 
353  class AdminDomainType : public GLUE2Entity<AdminDomainAttributes> {};
354 
359  class ExecutionEnvironmentType : public GLUE2Entity<ExecutionEnvironmentAttributes> {};
360 
365  class ComputingManagerType : public GLUE2Entity<ComputingManagerAttributes> {
366  public:
367  ComputingManagerType() : Benchmarks(new std::map<std::string, double>), ApplicationEnvironments(new std::list<ApplicationEnvironment>) {}
368  // TODO: Currently using int as key, use std::string instead for holding ID.
369  std::map<int, ExecutionEnvironmentType> ExecutionEnvironment;
372 
377  };
378 
383  class ComputingShareType : public GLUE2Entity<ComputingShareAttributes> {
384  public:
385  // TODO: Currently using int, use std::string instead for holding ID.
386  std::set<int> ComputingEndpointIDs;
387  };
388 
393  class ComputingEndpointType : public GLUE2Entity<ComputingEndpointAttributes> {
394  public:
395  // TODO: Currently using int, use std::string instead for holding ID.
396  std::set<int> ComputingShareIDs;
397  };
398 
404  class ComputingServiceType : public GLUE2Entity<ComputingServiceAttributes> {
405  public:
406  template<typename T>
407  void GetExecutionTargets(T& container) const;
408 
409  LocationType Location;
410  AdminDomainType AdminDomain;
411  // TODO: Currently using int as key, use std::string instead for holding ID.
412  std::map<int, ComputingEndpointType> ComputingEndpoint;
413  std::map<int, ComputingShareType> ComputingShare;
414  std::map<int, ComputingManagerType> ComputingManager;
415 
416  friend std::ostream& operator<<(std::ostream&, const ComputingServiceType&);
417  private:
418  template<typename T>
419  void AddExecutionTarget(T& container, const ExecutionTarget& et) const;
420  static Logger logger;
421  };
422 
423  // to avoid "explicit specialization before instantiation" errors
424  template <>
425  void ComputingServiceType::AddExecutionTarget< std::list<ExecutionTarget> >(std::list<ExecutionTarget>& etList, const ExecutionTarget& et) const;
426 
428 
439  public:
441 
446  Location(new LocationAttributes()),
447  AdminDomain(new AdminDomainAttributes()),
448  ComputingService(new ComputingServiceAttributes()),
449  ComputingEndpoint(new ComputingEndpointAttributes()),
450  ComputingShare(new ComputingShareAttributes()),
451  ComputingManager(new ComputingManagerAttributes()),
452  ExecutionEnvironment(new ExecutionEnvironmentAttributes()),
453  Benchmarks(new std::map<std::string, double>()),
454  ApplicationEnvironments(new std::list<ApplicationEnvironment>()) {};
455 
457 
463  Location(t.Location), AdminDomain(t.AdminDomain), ComputingService(t.ComputingService),
464  ComputingEndpoint(t.ComputingEndpoint), OtherEndpoints(t.OtherEndpoints),
465  ComputingShare(t.ComputingShare), ComputingManager(t.ComputingManager),
466  ExecutionEnvironment(t.ExecutionEnvironment),
467  Benchmarks(t.Benchmarks), ApplicationEnvironments(t.ApplicationEnvironments) {}
468 
473  const std::list< CountedPointer<ComputingEndpointAttributes> >& oe,
477  const CountedPointer< std::map<std::string, double> >& b,
478  const CountedPointer< std::list<ApplicationEnvironment> >& ae) :
479  Location(l), AdminDomain(a), ComputingService(cse),
480  ComputingEndpoint(ce), OtherEndpoints(oe), ComputingShare(csh),
481  ComputingManager(cm), ExecutionEnvironment(ee),
482  Benchmarks(b), ApplicationEnvironments(ae) {}
483 
485 
491  ExecutionTarget(long int addrptr) :
492  Location((*(ExecutionTarget*)addrptr).Location),
493  AdminDomain((*(ExecutionTarget*)addrptr).AdminDomain),
494  ComputingService((*(ExecutionTarget*)addrptr).ComputingService),
495  ComputingEndpoint((*(ExecutionTarget*)addrptr).ComputingEndpoint),
496  OtherEndpoints((*(ExecutionTarget*)addrptr).OtherEndpoints),
497  ComputingShare((*(ExecutionTarget*)addrptr).ComputingShare),
498  ComputingManager((*(ExecutionTarget*)addrptr).ComputingManager),
499  ExecutionEnvironment((*(ExecutionTarget*)addrptr).ExecutionEnvironment),
500  Benchmarks((*(ExecutionTarget*)addrptr).Benchmarks),
501  ApplicationEnvironments((*(ExecutionTarget*)addrptr).ApplicationEnvironments) {}
502 
503 
504  ExecutionTarget& operator=(const ExecutionTarget& et) {
505  Location = et.Location; AdminDomain = et.AdminDomain; ComputingService = et.ComputingService;
506  ComputingEndpoint = et.ComputingEndpoint; ComputingEndpoint = et.ComputingEndpoint; ComputingShare = et.ComputingShare;
507  ComputingManager = et.ComputingManager; Benchmarks = et.Benchmarks;
508  ExecutionEnvironment = et.ExecutionEnvironment; ApplicationEnvironments = et.ApplicationEnvironments;
509  return *this;
510  }
511 
512  ~ExecutionTarget() {};
513 
514  SubmissionStatus Submit(const UserConfig& ucfg, const JobDescription& jobdesc, Job& job) const;
515 
517 
527  void RegisterJobSubmission(const JobDescription& jobdesc) const;
528 
530 
537  friend std::ostream& operator<<(std::ostream& out, const ExecutionTarget& et);
538 
539  static void GetExecutionTargets(const std::list<ComputingServiceType>& csList, std::list<ExecutionTarget>& etList);
540 
541  CountedPointer<LocationAttributes> Location;
542  CountedPointer<AdminDomainAttributes> AdminDomain;
543  CountedPointer<ComputingServiceAttributes> ComputingService;
544  CountedPointer<ComputingEndpointAttributes> ComputingEndpoint;
545  std::list< CountedPointer<ComputingEndpointAttributes> > OtherEndpoints;
546  CountedPointer<ComputingShareAttributes> ComputingShare;
547  CountedPointer<ComputingManagerAttributes> ComputingManager;
548  CountedPointer<ExecutionEnvironmentAttributes> ExecutionEnvironment;
549  CountedPointer< std::map<std::string, double> > Benchmarks;
550  CountedPointer< std::list<ApplicationEnvironment> > ApplicationEnvironments;
551 
552  private:
553  static Logger logger;
554  };
555 
556 } // namespace Arc
557 
558 #endif // __ARC_EXECUTIONTARGET_H__