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 
31  /*
32  * == Design considerations ==
33  * In order to resemble the GLUE2 structure, the vital GLUE2 classes seen from
34  * ARC perspective have a analogue below. However when doing match making, it
35  * is desirable to have a complete and flat layout of a single submission
36  * target configuration. E.g. two ComputingShares in a ComputingService gives
37  * two configurations. Add different submission endpoints and the number of
38  * configurations goes up... In order not to duplicate resource info instances
39  * CountedPointer class is used indirectly in the GLUE2 master class
40  * ComputingServiceType through the GLUE2Entity class, and directly in the
41  * flat ExecutionTarget class (submission target configuration).
42  */
43 
54 
69  : public Software {
70  public:
71  ApplicationEnvironment() : FreeSlots(-1), FreeJobs(-1), FreeUserSeats(-1) {}
72  ApplicationEnvironment(const std::string& Name)
73  : Software(Name), FreeSlots(-1), FreeJobs(-1), FreeUserSeats(-1) {}
74  ApplicationEnvironment(const std::string& Name, const std::string& Version)
75  : Software(Name, Version), FreeSlots(-1), FreeJobs(-1), FreeUserSeats(-1) {}
76  ApplicationEnvironment& operator=(const Software& sv) {
77  Software::operator=(sv);
78  return *this;
79  }
80 
81  std::string State;
82  int FreeSlots;
83  int FreeJobs;
84  int FreeUserSeats;
85  };
86 
92  public:
93  LocationAttributes() : Latitude(0), Longitude(0) {}
94 
95  std::string Address;
96  std::string Place;
97  std::string Country;
98  std::string PostCode;
99  float Latitude;
100  float Longitude;
101 
102  friend std::ostream& operator<<(std::ostream& out, const LocationAttributes& l);
103  };
104 
110  public:
111  std::string Name;
112  std::string Owner;
113 
114  friend std::ostream& operator<<(std::ostream& out, const AdminDomainAttributes& ad);
115  };
116 
122  public:
124  : VirtualMachine(false), CPUClockSpeed(-1), MainMemorySize(-1),
125  ConnectivityIn(false), ConnectivityOut(false) {}
126  std::string ID;
127  std::string Platform;
128  bool VirtualMachine;
129  std::string CPUVendor;
130  std::string CPUModel;
131  std::string CPUVersion;
132  int CPUClockSpeed;
133  int MainMemorySize;
134 
136 
148 
149  bool ConnectivityIn;
150  bool ConnectivityOut;
151 
152  friend std::ostream& operator<<(std::ostream&, const ExecutionEnvironmentAttributes&);
153  };
154 
166  public:
168 
170  std::string ID;
171 
173  std::string Scheme;
174 
179  std::list<std::string> Rule;
180 
181  friend std::ostream& operator<<(std::ostream&, const MappingPolicyAttributes&);
182  };
183 
189  public:
191  Reservation(false), BulkSubmission(false),
192  TotalPhysicalCPUs(-1), TotalLogicalCPUs(-1), TotalSlots(-1),
193  Homogeneous(true),
194  WorkingAreaShared(true), WorkingAreaTotal(-1), WorkingAreaFree(-1), WorkingAreaLifeTime(-1),
195  CacheTotal(-1), CacheFree(-1) {}
196 
197  std::string ID;
198  std::string ProductName;
199  std::string ProductVersion;
200  bool Reservation;
201  bool BulkSubmission;
202  int TotalPhysicalCPUs;
203  int TotalLogicalCPUs;
204  int TotalSlots;
205  bool Homogeneous;
206  std::list<std::string> NetworkInfo;
207  bool WorkingAreaShared;
208  int WorkingAreaTotal;
209  int WorkingAreaFree;
210  Period WorkingAreaLifeTime;
211  int CacheTotal;
212  int CacheFree;
213 
214  friend std::ostream& operator<<(std::ostream&, const ComputingManagerAttributes&);
215  };
216 
222  public:
224  MaxWallTime(-1), MaxTotalWallTime(-1), MinWallTime(-1), DefaultWallTime(-1),
225  MaxCPUTime(-1), MaxTotalCPUTime(-1), MinCPUTime(-1), DefaultCPUTime(-1),
226  MaxTotalJobs(-1), MaxRunningJobs(-1), MaxWaitingJobs(-1),
227  MaxPreLRMSWaitingJobs(-1), MaxUserRunningJobs(-1), MaxSlotsPerJob(-1),
228  MaxStageInStreams(-1), MaxStageOutStreams(-1),
230  Preemption(false),
231  TotalJobs(-1), RunningJobs(-1), LocalRunningJobs(-1), WaitingJobs(-1), LocalWaitingJobs(-1),
232  SuspendedJobs(-1), LocalSuspendedJobs(-1), StagingJobs(-1), PreLRMSWaitingJobs(-1),
233  EstimatedAverageWaitingTime(-1), EstimatedWorstWaitingTime(-1),
234  FreeSlots(-1), UsedSlots(-1), RequestedSlots(-1) {}
235 
236  std::string ID;
238 
242  std::string Name;
243  std::string MappingQueue;
244 
245  Period MaxWallTime;
246  Period MaxTotalWallTime; // not in current Glue2 draft
247  Period MinWallTime;
248  Period DefaultWallTime;
249  Period MaxCPUTime;
250  Period MaxTotalCPUTime;
251  Period MinCPUTime;
252  Period DefaultCPUTime;
253  int MaxTotalJobs;
254  int MaxRunningJobs;
255  int MaxWaitingJobs;
256  int MaxPreLRMSWaitingJobs;
257  int MaxUserRunningJobs;
258  int MaxSlotsPerJob;
259  int MaxStageInStreams;
260  int MaxStageOutStreams;
261  std::string SchedulingPolicy;
262 
264 
270 
272 
278 
280 
286 
287  URL DefaultStorageService;
288  bool Preemption;
289  int TotalJobs;
290  int RunningJobs;
291  int LocalRunningJobs;
292  int WaitingJobs;
293  int LocalWaitingJobs;
294  int SuspendedJobs;
295  int LocalSuspendedJobs;
296  int StagingJobs;
297  int PreLRMSWaitingJobs;
298  Period EstimatedAverageWaitingTime;
299  Period EstimatedWorstWaitingTime;
300  int FreeSlots;
301 
303 
309  std::map<Period, int> FreeSlotsWithDuration;
310  int UsedSlots;
311  int RequestedSlots;
312  std::string ReservationPolicy;
313 
314  friend std::ostream& operator<<(std::ostream&, const ComputingShareAttributes&);
315  };
316 
322  public:
323  ComputingEndpointAttributes() : DowntimeStarts(-1), DowntimeEnds(-1),
324  TotalJobs(-1), RunningJobs(-1), WaitingJobs(-1),
325  StagingJobs(-1), SuspendedJobs(-1), PreLRMSWaitingJobs(-1) {}
326 
327  std::string ID;
328  std::string URLString;
329  std::string InterfaceName;
330  std::string HealthState;
331  std::string HealthStateInfo;
332  std::string QualityLevel;
333  std::set<std::string> Capability;
334  std::string Technology;
335  std::list<std::string> InterfaceVersion;
336  std::list<std::string> InterfaceExtension;
337  std::list<std::string> SupportedProfile;
338  std::string Implementor;
339  Software Implementation;
340  std::string ServingState;
341  std::string IssuerCA;
342  std::list<std::string> TrustedCA;
343  Time DowntimeStarts;
344  Time DowntimeEnds;
345  std::string Staging;
346  int TotalJobs;
347  int RunningJobs;
348  int WaitingJobs;
349  int StagingJobs;
350  int SuspendedJobs;
351  int PreLRMSWaitingJobs;
352  // This is singular in the GLUE2 doc: JobDescription
353  std::list<std::string> JobDescriptions;
354 
355  friend std::ostream& operator<<(std::ostream&, const ComputingEndpointAttributes&);
356  };
357 
363  public:
365  TotalJobs(-1), RunningJobs(-1), WaitingJobs(-1),
366  StagingJobs(-1), SuspendedJobs(-1), PreLRMSWaitingJobs(-1) {}
367  std::string ID;
368  std::string Name;
369  std::string Type;
370  std::set<std::string> Capability;
371  std::string QualityLevel;
372  int TotalJobs;
373  int RunningJobs;
374  int WaitingJobs;
375  int StagingJobs;
376  int SuspendedJobs;
377  int PreLRMSWaitingJobs;
378 
379  // Other
380  Endpoint InformationOriginEndpoint; // this ComputingService was generated while this Endpoint was queried
381 
382  friend std::ostream& operator<<(std::ostream& out, const ComputingServiceAttributes& cs);
383  };
384 
389  class LocationType : public GLUE2Entity<LocationAttributes> {};
390 
395  class AdminDomainType : public GLUE2Entity<AdminDomainAttributes> {};
396 
401  class ExecutionEnvironmentType : public GLUE2Entity<ExecutionEnvironmentAttributes> {};
402 
410  class MappingPolicyType : public GLUE2Entity<MappingPolicyAttributes> {};
411 
416  class ComputingManagerType : public GLUE2Entity<ComputingManagerAttributes> {
417  public:
418  ComputingManagerType() : Benchmarks(new std::map<std::string, double>), ApplicationEnvironments(new std::list<ApplicationEnvironment>) {}
419  // TODO: Currently using int as key, use std::string instead for holding ID.
420  std::map<int, ExecutionEnvironmentType> ExecutionEnvironment;
423 
428  };
429 
434  class ComputingShareType : public GLUE2Entity<ComputingShareAttributes> {
435  public:
436  // TODO: Currently using int, use std::string instead for holding ID.
437  std::set<int> ComputingEndpointIDs;
438 
442  std::map<int, MappingPolicyType> MappingPolicy;
443  };
444 
449  class ComputingEndpointType : public GLUE2Entity<ComputingEndpointAttributes> {
450  public:
451  // TODO: Currently using int, use std::string instead for holding ID.
452  std::set<int> ComputingShareIDs;
453  };
454 
460  class ComputingServiceType : public GLUE2Entity<ComputingServiceAttributes> {
461  public:
462  template<typename T>
463  void GetExecutionTargets(T& container) const;
464 
465  LocationType Location;
466  AdminDomainType AdminDomain;
467  // TODO: Currently using int as key, use std::string instead for holding ID.
468  std::map<int, ComputingEndpointType> ComputingEndpoint;
469  std::map<int, ComputingShareType> ComputingShare;
470  std::map<int, ComputingManagerType> ComputingManager;
471 
472  friend std::ostream& operator<<(std::ostream&, const ComputingServiceType&);
473  private:
474  template<typename T>
475  void AddExecutionTarget(T& container, const ExecutionTarget& et) const;
476  static Logger logger;
477  };
478 
479  // to avoid "explicit specialization before instantiation" errors
480  template <>
481  void ComputingServiceType::AddExecutionTarget< std::list<ExecutionTarget> >(std::list<ExecutionTarget>& etList, const ExecutionTarget& et) const;
482 
484 
495  public:
497 
502  Location(new LocationAttributes()),
503  AdminDomain(new AdminDomainAttributes()),
504  ComputingService(new ComputingServiceAttributes()),
505  ComputingEndpoint(new ComputingEndpointAttributes()),
506  ComputingShare(new ComputingShareAttributes()),
507  ComputingManager(new ComputingManagerAttributes()),
508  ExecutionEnvironment(new ExecutionEnvironmentAttributes()),
509  Benchmarks(new std::map<std::string, double>()),
510  ApplicationEnvironments(new std::list<ApplicationEnvironment>()) {};
511 
513 
519  Location(t.Location), AdminDomain(t.AdminDomain), ComputingService(t.ComputingService),
520  ComputingEndpoint(t.ComputingEndpoint), OtherEndpoints(t.OtherEndpoints),
521  ComputingShare(t.ComputingShare), MappingPolicies(t.MappingPolicies),
522  ComputingManager(t.ComputingManager), ExecutionEnvironment(t.ExecutionEnvironment),
523  Benchmarks(t.Benchmarks), ApplicationEnvironments(t.ApplicationEnvironments) {}
524 
533  const std::list< CountedPointer<ComputingEndpointAttributes> >& oe,
535  const std::list< CountedPointer<MappingPolicyAttributes> >& mp,
538  const CountedPointer< std::map<std::string, double> >& b,
539  const CountedPointer< std::list<ApplicationEnvironment> >& ae) :
540  Location(l), AdminDomain(a), ComputingService(cse),
541  ComputingEndpoint(ce), OtherEndpoints(oe),
542  ComputingShare(csh), MappingPolicies(mp),
543  ComputingManager(cm), ExecutionEnvironment(ee),
544  Benchmarks(b), ApplicationEnvironments(ae) {}
545 
547 
553  ExecutionTarget(long int addrptr) :
554  Location((*(ExecutionTarget*)addrptr).Location),
555  AdminDomain((*(ExecutionTarget*)addrptr).AdminDomain),
556  ComputingService((*(ExecutionTarget*)addrptr).ComputingService),
557  ComputingEndpoint((*(ExecutionTarget*)addrptr).ComputingEndpoint),
558  OtherEndpoints((*(ExecutionTarget*)addrptr).OtherEndpoints),
559  ComputingShare((*(ExecutionTarget*)addrptr).ComputingShare),
560  MappingPolicies((*(ExecutionTarget*)addrptr).MappingPolicies),
561  ComputingManager((*(ExecutionTarget*)addrptr).ComputingManager),
562  ExecutionEnvironment((*(ExecutionTarget*)addrptr).ExecutionEnvironment),
563  Benchmarks((*(ExecutionTarget*)addrptr).Benchmarks),
564  ApplicationEnvironments((*(ExecutionTarget*)addrptr).ApplicationEnvironments) {}
565 
566 
567  ExecutionTarget& operator=(const ExecutionTarget& et) {
568  Location = et.Location; AdminDomain = et.AdminDomain; ComputingService = et.ComputingService;
569  ComputingEndpoint = et.ComputingEndpoint; ComputingEndpoint = et.ComputingEndpoint;
570  ComputingShare = et.ComputingShare; MappingPolicies = et.MappingPolicies;
571  ComputingManager = et.ComputingManager; Benchmarks = et.Benchmarks;
572  ExecutionEnvironment = et.ExecutionEnvironment; ApplicationEnvironments = et.ApplicationEnvironments;
573  return *this;
574  }
575 
576  ~ExecutionTarget() {};
577 
578  SubmissionStatus Submit(const UserConfig& ucfg, const JobDescription& jobdesc, Job& job) const;
579 
581 
591  void RegisterJobSubmission(const JobDescription& jobdesc) const;
592 
594 
601  friend std::ostream& operator<<(std::ostream& out, const ExecutionTarget& et);
602 
603  static void GetExecutionTargets(const std::list<ComputingServiceType>& csList, std::list<ExecutionTarget>& etList);
604 
605  CountedPointer<LocationAttributes> Location;
606  CountedPointer<AdminDomainAttributes> AdminDomain;
607  CountedPointer<ComputingServiceAttributes> ComputingService;
608  CountedPointer<ComputingEndpointAttributes> ComputingEndpoint;
609  std::list< CountedPointer<ComputingEndpointAttributes> > OtherEndpoints;
610  CountedPointer<ComputingShareAttributes> ComputingShare;
611  std::list< CountedPointer<MappingPolicyAttributes> > MappingPolicies;
612  CountedPointer<ComputingManagerAttributes> ComputingManager;
613  CountedPointer<ExecutionEnvironmentAttributes> ExecutionEnvironment;
614  CountedPointer< std::map<std::string, double> > Benchmarks;
615  CountedPointer< std::list<ApplicationEnvironment> > ApplicationEnvironments;
616 
617  private:
618  static Logger logger;
619  };
620 
621 } // namespace Arc
622 
623 #endif // __ARC_EXECUTIONTARGET_H__
Definition: ExecutionTarget.h:416
Arc namespace contains all core ARC classes.
Definition: ArcConfig.h:11
Definition: ExecutionTarget.h:91
std::map< Period, int > FreeSlotsWithDuration
FreeSlotsWithDuration std::map<Period, int>
Definition: ExecutionTarget.h:309
std::map< int, MappingPolicyType > MappingPolicy
Definition: ExecutionTarget.h:442
int MaxMainMemory
MaxMainMemory UInt64 0..1 MB.
Definition: ExecutionTarget.h:269
ExecutionTarget(const CountedPointer< LocationAttributes > &l, const CountedPointer< AdminDomainAttributes > &a, const CountedPointer< ComputingServiceAttributes > &cse, const CountedPointer< ComputingEndpointAttributes > &ce, const std::list< CountedPointer< ComputingEndpointAttributes > > &oe, const CountedPointer< ComputingShareAttributes > &csh, const std::list< CountedPointer< MappingPolicyAttributes > > &mp, const CountedPointer< ComputingManagerAttributes > &cm, const CountedPointer< ExecutionEnvironmentAttributes > &ee, const CountedPointer< std::map< std::string, double > > &b, const CountedPointer< std::list< ApplicationEnvironment > > &ae)
Definition: ExecutionTarget.h:529
Definition: ExecutionTarget.h:221
Definition: GLUE2Entity.h:19
int MaxDiskSpace
MaxDiskSpace UInt64 0..1 GB.
Definition: ExecutionTarget.h:285
A class for storing and manipulating times.
Definition: DateTime.h:125
ExecutionTarget()
Create an ExecutionTarget.
Definition: ExecutionTarget.h:501
void RegisterJobSubmission(const JobDescription &jobdesc) const
Update ExecutionTarget after succesful job submission.
A logger class.
Definition: Logger.h:493
Wrapper for pointer with automatic destruction and multiple references.
Definition: Utils.h:183
Definition: ExecutionTarget.h:401
Definition: ExecutionTarget.h:434
Software()
Dummy constructor.
Definition: Software.h:58
Represents an endpoint of a service with a given interface type and capabilities. ...
Definition: Endpoint.h:68
Definition: ExecutionTarget.h:188
Definition: ExecutionTarget.h:109
Software OperatingSystem
OperatingSystem.
Definition: ExecutionTarget.h:147
ExecutionTarget(long int addrptr)
Create an ExecutionTarget.
Definition: ExecutionTarget.h:553
A Period represents a length of time.
Definition: DateTime.h:48
Definition: ExecutionTarget.h:389
CountedPointer< std::list< ApplicationEnvironment > > ApplicationEnvironments
ApplicationEnvironments.
Definition: ExecutionTarget.h:427
Class to represent general URLs.
Definition: URL.h:88
Definition: ExecutionTarget.h:395
Definition: ExecutionTarget.h:165
ApplicationEnvironment.
Definition: ExecutionTarget.h:68
friend std::ostream & operator<<(std::ostream &out, const ExecutionTarget &et)
Print the ExecutionTarget information.
const ArcVersion Version
Definition: ExecutionTarget.h:460
ExecutionTarget.
Definition: ExecutionTarget.h:494
Definition: ExecutionTarget.h:449
Definition: ExecutionTarget.h:321
std::list< std::string > Rule
Definition: ExecutionTarget.h:179
Definition: ExecutionTarget.h:410
std::string Scheme
Scheme adopted to define the policy rules.
Definition: ExecutionTarget.h:173
std::string Name
Name String 0..1.
Definition: ExecutionTarget.h:242
Definition: ExecutionTarget.h:121
std::string ID
A global unique ID.
Definition: ExecutionTarget.h:170
Definition: ExecutionTarget.h:362
int MaxVirtualMemory
MaxVirtualMemory UInt64 0..1 MB.
Definition: ExecutionTarget.h:277
Used to represent software (names and version) and comparison.
Definition: Software.h:38
ExecutionTarget(const ExecutionTarget &t)
Create an ExecutionTarget.
Definition: ExecutionTarget.h:518