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 
424 
435  public:
437 
442  Location(new LocationAttributes()),
443  AdminDomain(new AdminDomainAttributes()),
444  ComputingService(new ComputingServiceAttributes()),
445  ComputingEndpoint(new ComputingEndpointAttributes()),
446  ComputingShare(new ComputingShareAttributes()),
447  ComputingManager(new ComputingManagerAttributes()),
448  ExecutionEnvironment(new ExecutionEnvironmentAttributes()),
449  Benchmarks(new std::map<std::string, double>()),
450  ApplicationEnvironments(new std::list<ApplicationEnvironment>()) {};
451 
453 
459  Location(t.Location), AdminDomain(t.AdminDomain), ComputingService(t.ComputingService),
460  ComputingEndpoint(t.ComputingEndpoint), OtherEndpoints(t.OtherEndpoints),
461  ComputingShare(t.ComputingShare), ComputingManager(t.ComputingManager),
462  ExecutionEnvironment(t.ExecutionEnvironment),
463  Benchmarks(t.Benchmarks), ApplicationEnvironments(t.ApplicationEnvironments) {}
464 
469  const std::list< CountedPointer<ComputingEndpointAttributes> >& oe,
473  const CountedPointer< std::map<std::string, double> >& b,
474  const CountedPointer< std::list<ApplicationEnvironment> >& ae) :
475  Location(l), AdminDomain(a), ComputingService(cse),
476  ComputingEndpoint(ce), OtherEndpoints(oe), ComputingShare(csh),
477  ComputingManager(cm), ExecutionEnvironment(ee),
478  Benchmarks(b), ApplicationEnvironments(ae) {}
479 
481 
487  ExecutionTarget(long int addrptr) :
488  Location((*(ExecutionTarget*)addrptr).Location),
489  AdminDomain((*(ExecutionTarget*)addrptr).AdminDomain),
490  ComputingService((*(ExecutionTarget*)addrptr).ComputingService),
491  ComputingEndpoint((*(ExecutionTarget*)addrptr).ComputingEndpoint),
492  OtherEndpoints((*(ExecutionTarget*)addrptr).OtherEndpoints),
493  ComputingShare((*(ExecutionTarget*)addrptr).ComputingShare),
494  ComputingManager((*(ExecutionTarget*)addrptr).ComputingManager),
495  ExecutionEnvironment((*(ExecutionTarget*)addrptr).ExecutionEnvironment),
496  Benchmarks((*(ExecutionTarget*)addrptr).Benchmarks),
497  ApplicationEnvironments((*(ExecutionTarget*)addrptr).ApplicationEnvironments) {}
498 
499 
500  ExecutionTarget& operator=(const ExecutionTarget& et) {
501  Location = et.Location; AdminDomain = et.AdminDomain; ComputingService = et.ComputingService;
502  ComputingEndpoint = et.ComputingEndpoint; ComputingEndpoint = et.ComputingEndpoint; ComputingShare = et.ComputingShare;
503  ComputingManager = et.ComputingManager; Benchmarks = et.Benchmarks;
504  ExecutionEnvironment = et.ExecutionEnvironment; ApplicationEnvironments = et.ApplicationEnvironments;
505  return *this;
506  }
507 
508  ~ExecutionTarget() {};
509 
510  SubmissionStatus Submit(const UserConfig& ucfg, const JobDescription& jobdesc, Job& job) const;
511 
513 
523  void RegisterJobSubmission(const JobDescription& jobdesc) const;
524 
526 
533  friend std::ostream& operator<<(std::ostream& out, const ExecutionTarget& et);
534 
535  static void GetExecutionTargets(const std::list<ComputingServiceType>& csList, std::list<ExecutionTarget>& etList);
536 
537  CountedPointer<LocationAttributes> Location;
538  CountedPointer<AdminDomainAttributes> AdminDomain;
539  CountedPointer<ComputingServiceAttributes> ComputingService;
540  CountedPointer<ComputingEndpointAttributes> ComputingEndpoint;
541  std::list< CountedPointer<ComputingEndpointAttributes> > OtherEndpoints;
542  CountedPointer<ComputingShareAttributes> ComputingShare;
543  CountedPointer<ComputingManagerAttributes> ComputingManager;
544  CountedPointer<ExecutionEnvironmentAttributes> ExecutionEnvironment;
545  CountedPointer< std::map<std::string, double> > Benchmarks;
546  CountedPointer< std::list<ApplicationEnvironment> > ApplicationEnvironments;
547 
548  private:
549  static Logger logger;
550  };
551 
552 } // namespace Arc
553 
554 #endif // __ARC_EXECUTIONTARGET_H__