ARC SDK
JobDescription.h
Go to the documentation of this file.
1 #ifndef __ARC_JOBDESCRIPTION_H__
2 #define __ARC_JOBDESCRIPTION_H__
3 
8 #include <list>
9 #include <vector>
10 #include <string>
11 
12 #include <arc/DateTime.h>
13 #include <arc/XMLNode.h>
14 #include <arc/URL.h>
15 #include <arc/compute/Software.h>
16 
17 
18 namespace Arc {
19 
35  class JobDescriptionParserPluginLoader;
36  class ExecutionTarget;
37 
42  template<class T>
43  class OptIn {
44  public:
45  OptIn<T>() : optIn(false) {}
46  OptIn<T>(const T& t) : v(t), optIn(false) {}
47  OptIn<T>(const T& t, bool o) : v(t), optIn(o) {}
48  OptIn<T>(const OptIn<T>& ot) : v(ot.v), optIn(ot.optIn) {}
49 
50  OptIn<T>& operator=(const OptIn<T>& ot) { v = ot.v; optIn = ot.optIn; return *this; }
51  OptIn<T>& operator=(const T& t) { v = t; optIn = false; return *this; }
52 
53  operator T() const { return v; }
54 
55  T v;
56  bool optIn;
57  };
58 
63  template<class T>
64  class Range {
65  public:
66  Range<T>() : min(0), max(0) {}
67  Range<T>(const T& t) : min(t), max(t) {}
68  operator T(void) const { return max; }
69 
70  Range<T>& operator=(const Range<T>& t) { min = t.min; max = t.max; return *this; };
71  Range<T>& operator=(const T& t) { max = t; return *this; };
72 
73  T min;
74  T max;
75  };
76 
81  template<class T>
82  class ScalableTime {
83  public:
84  ScalableTime<T>() : benchmark("", -1.) {}
85  ScalableTime<T>(const T& t) : range(t) {}
86 
87  std::pair<std::string, double> benchmark;
88  Range<T> range;
89  };
90 
95  template<>
96  class ScalableTime<int> {
97  public:
98  ScalableTime<int>() : benchmark("", -1.) {}
99  ScalableTime<int>(const int& t) : range(t) {}
100 
101  std::pair<std::string, double> benchmark;
102  Range<int> range;
103 
104  int scaleMin(double s) const { return (int)(range.min*benchmark.second/s); }
105  int scaleMax(double s) const { return (int)(range.max*benchmark.second/s); }
106  };
107 
109 
119  class JobIdentificationType {
120  public:
121  JobIdentificationType() :
122  JobName(""), Description(""), Type("") {}
124 
131  std::string JobName;
132 
134 
141  std::string Description;
142 
144 
151  std::string Type;
152 
154 
160  std::list<std::string> Annotation;
161 
163 
172  std::list<std::string> ActivityOldID;
173  };
174 
176 
186  class ExecutableType {
187  public:
188  ExecutableType() : Path(""), SuccessExitCode(false, 0) {}
189 
191 
198  std::string Path;
199 
201 
207  std::list<std::string> Argument;
208 
210 
221  std::pair<bool, int> SuccessExitCode;
222  };
223 
225 
232  class RemoteLoggingType {
233  public:
234  RemoteLoggingType() : optional(false) {}
235 
237 
245  std::string ServiceType;
246 
248 
254  URL Location;
255 
257 
264  bool optional;
265  };
266 
271  class NotificationType {
272  public:
273  NotificationType() {}
274 
278  std::string Email;
279 
283  std::list<std::string> States;
284  };
285 
290  class ApplicationType {
291  public:
292  ApplicationType() :
293  Rerun(-1),
294  ExpirationTime(-1),
296  Priority (-1),
297  DryRun(false)
298  {}
299  ApplicationType& operator=(const ApplicationType&);
301 
307  ExecutableType Executable;
308 
310 
316  std::string Input;
317 
319 
326  std::string Output;
327 
329 
335  std::string Error;
340  std::list< std::pair<std::string, std::string> > Environment;
341 
343 
351  std::list<ExecutableType> PreExecutable;
352 
354 
362  std::list<ExecutableType> PostExecutable;
363 
365 
371  std::string LogDir;
372 
378  std::list<RemoteLoggingType> RemoteLogging;
383  int Rerun;
384 
389 
394 
398  int Priority;
399 
400  std::list<NotificationType> Notification;
401 
405  std::list<URL> CredentialService;
406 
411 
415  bool DryRun;
416  };
417 
422  class SlotRequirementType {
423  public:
425  NumberOfSlots(-1),
426  SlotsPerHost(-1),
427  ExclusiveExecution(EE_DEFAULT) {}
431  int NumberOfSlots; // Range?
432 
436  int SlotsPerHost; // Range?
437 
442  EE_DEFAULT,
443  EE_TRUE,
444  EE_FALSE
445  } ExclusiveExecution;
446  };
447 
452  class DiskSpaceRequirementType {
453  public:
454  DiskSpaceRequirementType() :
455  DiskSpace(-1),
456  CacheDiskSpace(-1),
457  SessionDiskSpace(-1) {}
463  Range<int> DiskSpace;
470  int CacheDiskSpace;
477  int SessionDiskSpace;
478  };
479 
484  enum SessionDirectoryAccessMode {
485  SDAM_NONE = 0,
486  SDAM_RO = 1,
487  SDAM_RW = 2
488  };
489 
494  enum NodeAccessType {
495  NAT_NONE = 0,
496  NAT_INBOUND = 1,
497  NAT_OUTBOUND = 2,
498  NAT_INOUTBOUND = 3
499  };
500 
505  class ParallelEnvironmentType {
506  public:
507  ParallelEnvironmentType() :
508  ProcessesPerSlot(-1),
509  ThreadsPerProcess(-1) {}
510 
514  std::string Type;
515 
519  std::string Version;
520 
524  int ProcessesPerSlot; // Range?
525 
529  int ThreadsPerProcess; // Range?
530 
534  std::multimap<std::string, std::string> Options;
535  };
536 
538 
543  class ResourcesType {
544  public:
545  ResourcesType() :
548  SessionLifeTime(-1),
549  SessionDirectoryAccess(SDAM_NONE),
550  IndividualCPUTime(-1),
551  TotalCPUTime(-1),
552  IndividualWallTime(-1),
553  TotalWallTime(IndividualWallTime),
554  NodeAccess(NAT_NONE) {}
555  ResourcesType& operator=(const ResourcesType&);
556 
558 
561  SoftwareRequirement OperatingSystem;
562 
566  std::string Platform;
567 
571  std::string NetworkInfo;
572 
574 
578 
580 
584 
585  DiskSpaceRequirementType DiskSpaceRequirement;
586 
591 
595  SessionDirectoryAccessMode SessionDirectoryAccess;
596 
601 
606 
611 
612  ScalableTime<int>& TotalWallTime;
613 
617  NodeAccessType NodeAccess;
618 
620 
626 
627  SlotRequirementType SlotRequirement;
628  ParallelEnvironmentType ParallelEnvironment;
629 
634 
636 
639  std::string QueueName;
640 
642 
649  };
650 
655  class SourceType: public URL {
656  public:
657  SourceType() {};
658  SourceType(const URL& u):URL(u) {};
659  SourceType(const std::string& s):URL(s) {};
660  SourceType& operator=(const URL& u) { URL::operator=(u); return *this; };
661  SourceType& operator=(const std::string& s) { URL::operator=(s); return *this; };
662  std::string DelegationID;
663  };
664 
670  class TargetType: public URL {
671  public:
673 
678  TargetType() :
680  UseIfFailure(false),
681  UseIfCancel(false),
682  UseIfSuccess(true) {};
684 
687  TargetType(const URL& u) :
688  URL(u),
690  UseIfFailure(false),
691  UseIfCancel(false),
692  UseIfSuccess(true) {};
694 
697  TargetType(const std::string& s) :
698  URL(s),
700  UseIfFailure(false),
701  UseIfCancel(false),
702  UseIfSuccess(true) {};
703 
705 
708  std::string DelegationID;
709 
711  CFE_DEFAULT,
712  CFE_OVERWRITE,
713  CFE_APPEND,
715  };
716 
723 
729  bool UseIfFailure;
730 
736  bool UseIfCancel;
737 
743  bool UseIfSuccess;
744  };
745 
750  class InputFileType {
751  public:
752  InputFileType() : Name(""), IsExecutable(false), FileSize(-1) {};
753  std::string Name;
759  bool IsExecutable;
760 
761  long FileSize;
767  std::string Checksum;
768  std::list<SourceType> Sources;
769  };
770 
776  class OutputFileType {
777  public:
778  OutputFileType() : Name("") {};
780  std::string Name;
782  std::list<TargetType> Targets;
783  };
784 
790  class DataStagingType {
791  public:
792  DataStagingType() {};
793 
795  std::list<InputFileType> InputFiles;
797  std::list<OutputFileType> OutputFiles;
799  std::string DelegationID;
800  };
801 
802 
804 
813  class JobDescriptionResult {
814  public:
815  JobDescriptionResult(bool r):res(r) { };
816  JobDescriptionResult(bool r, const std::string& s):res(r),desc(s) { };
818  operator bool(void) { return res; };
820  bool operator!(void) { return !res; };
822  const std::string& str(void) { return desc; };
823  private:
824  bool res;
825  std::string desc;
826  };
827 
846  class JobDescription {
847  public:
848  friend class JobDescriptionParserPlugin;
849  JobDescription() : alternatives(), current(alternatives.begin()) {};
850 
851  JobDescription(const JobDescription& j, bool withAlternatives = true);
852 
853  // Language wrapper constructor
854  JobDescription(const long int& ptraddr);
855 
856  ~JobDescription() {}
857 
859  JobDescription& operator=(const JobDescription& j);
860 
862 
866  void AddAlternative(const JobDescription& j);
868 
871  bool HasAlternatives() const { return !alternatives.empty(); }
877  const std::list<JobDescription>& GetAlternatives() const { return alternatives; }
883  std::list<JobDescription>& GetAlternatives() { return alternatives; }
885 
888  std::list<JobDescription> GetAlternativesCopy() const { return alternatives; }
890 
896  bool UseAlternative();
897  void UseOriginal();
898 
899  void RemoveAlternatives();
900 
902 
921  static JobDescriptionResult Parse(const std::string& source, std::list<JobDescription>& jobdescs, const std::string& language = "", const std::string& dialect = "");
922 
923  static JobDescriptionResult ParseFromFile(const std::string& filename, std::list<JobDescription>& jobdescs, const std::string& language = "", const std::string& dialect = "");
924 
926 
933  JobDescriptionResult UnParse(std::string& product, std::string language, const std::string& dialect = "") const;
934 
936 
944  const std::string& GetSourceLanguage() const { return sourceLanguage; }
945 
947 
963  JobDescriptionResult SaveToStream(std::ostream& out, const std::string& format) const;
964 
966 
997  bool Prepare(const ExecutionTarget& et) { return Prepare(&et); }
998 
999  bool Prepare() { return Prepare(NULL); }
1000 
1001  static bool GetTestJob(int testid, JobDescription& jobdescription);
1002 
1009 
1011 
1015 
1022 
1029 
1031 
1042  std::map<std::string, std::string> OtherAttributes;
1043 
1044  private:
1045  bool Prepare(const ExecutionTarget* et);
1046 
1047  void Set(const JobDescription& j);
1048 
1049  std::string sourceLanguage;
1050 
1051  std::list<JobDescription> alternatives;
1052  std::list<JobDescription>::iterator current;
1053 
1054  static Glib::Mutex jdpl_lock;
1055  static JobDescriptionParserPluginLoader *jdpl;
1056 
1057  static Logger logger;
1058  };
1059 
1060 } // namespace Arc
1061 
1062 #endif // __ARC_JOBDESCRIPTION_H__
Arc namespace contains all core ARC classes.
Definition: ArcConfig.h:11
ExecutableType Executable
Main executable to be run.
Definition: JobDescription.h:303
bool DryRun
Definition: JobDescription.h:411
Definition: JobDescription.h:286
bool UseIfSuccess
Action in case job succeeded.
Definition: JobDescription.h:739
std::string NetworkInfo
Definition: JobDescription.h:567
Simple structure for in- and output files.
Definition: JobDescription.h:786
std::list< RemoteLoggingType > RemoteLogging
Remote logging services.
Definition: JobDescription.h:374
Definition: JobDescriptionParserPlugin.h:243
Definition: JobDescription.h:448
Class used to express and resolve version requirements on software.
Definition: Software.h:327
JobIdentificationType Identification
Structure for identification.
Definition: JobDescription.h:1004
Time ExpirationTime
Definition: JobDescription.h:384
std::string Description
Human readable description.
Definition: JobDescription.h:137
Range< int > DiskSpace
Definition: JobDescription.h:459
OptIn< std::string > Coprocessor
Definition: JobDescription.h:629
CreationFlagEnumeration CreationFlag
Output file creation flag.
Definition: JobDescription.h:718
Definition: JobDescription.h:501
SoftwareRequirement RunTimeEnvironment
Runtime environment.
Definition: JobDescription.h:644
int Rerun
Definition: JobDescription.h:379
std::list< std::string > Annotation
Annotation.
Definition: JobDescription.h:156
Definition: JobDescription.h:710
Wrapper for LibXML library Tree interface.
Definition: XMLNode.h:61
A class for storing and manipulating times.
Definition: DateTime.h:125
URL()
Empty constructor. URL object is invalid.
ApplicationType Application
Structure for apllication options.
Definition: JobDescription.h:1010
std::list< std::string > States
Definition: JobDescription.h:279
JobDescriptionResult SaveToStream(std::ostream &out, const std::string &format) const
Print job description to a std::ostream object.
std::string LogDir
Name of logging directory.
Definition: JobDescription.h:367
std::list< TargetType > Targets
List of destinations for which the output file should be copied.
Definition: JobDescription.h:778
std::string Type
Job type.
Definition: JobDescription.h:147
JobDescription & operator=(const JobDescription &j)
Testing.
ScalableTime< int > IndividualCPUTime
Definition: JobDescription.h:596
int NumberOfSlots
Definition: JobDescription.h:427
URL Location
URL of logging service.
Definition: JobDescription.h:250
CreationFlagEnumeration
Definition: JobDescription.h:706
int ProcessesPerSlot
Definition: JobDescription.h:520
std::string Output
Standard output.
Definition: JobDescription.h:322
A logger class.
Definition: Logger.h:493
bool UseIfCancel
Action in case job was cancelled.
Definition: JobDescription.h:732
Period SessionLifeTime
Definition: JobDescription.h:586
bool operator!(void)
Get negated result.
Definition: JobDescription.h:816
Resource requirements structure.
Definition: JobDescription.h:539
void AddAlternative(const JobDescription &j)
Add alternative job description.
TargetType()
Default constructor.
Definition: JobDescription.h:674
SoftwareRequirement OperatingSystem
Specifies operating system which apllication should be executed at.
Definition: JobDescription.h:557
Definition: JobDescription.h:842
std::string Platform
Definition: JobDescription.h:562
std::string Error
Standard error.
Definition: JobDescription.h:331
const std::list< JobDescription > & GetAlternatives() const
Get list of alternative job descriptions.
Definition: JobDescription.h:873
ScalableTime< int > IndividualWallTime
Definition: JobDescription.h:606
std::pair< bool, int > SuccessExitCode
Exit code at successful execution.
Definition: JobDescription.h:217
ScalableTime< int > TotalCPUTime
Definition: JobDescription.h:601
An output file.
Definition: JobDescription.h:772
Represent an output file destination.
Definition: JobDescription.h:666
std::string ServiceType
Type of logging service.
Definition: JobDescription.h:241
Job description parsing or assembly result.
Definition: JobDescription.h:809
SessionDirectoryAccessMode SessionDirectoryAccess
Definition: JobDescription.h:591
std::string DelegationID
Delegation ID to use.
Definition: JobDescription.h:698
Time ProcessingStartTime
Definition: JobDescription.h:389
std::list< ExecutableType > PreExecutable
Executables to be run before the main executable.
Definition: JobDescription.h:347
Definition: JobDescription.h:418
bool optional
Requirement satisfaction switch.
Definition: JobDescription.h:260
Job identification.
Definition: JobDescription.h:115
std::list< JobDescription > GetAlternativesCopy() const
Get a copy of the list of alternative job descriptions.
Definition: JobDescription.h:884
std::list< OutputFileType > OutputFiles
List of outputfiles.
Definition: JobDescription.h:793
std::string Path
Path to executable.
Definition: JobDescription.h:194
Range< int > IndividualVirtualMemory
Specifies amount of requested virtual memory in MB.
Definition: JobDescription.h:579
A Period represents a length of time.
Definition: DateTime.h:48
std::string Type
Definition: JobDescription.h:510
int SessionDiskSpace
Definition: JobDescription.h:473
XMLNode AccessControl
Definition: JobDescription.h:406
std::list< std::pair< std::string, std::string > > Environment
Definition: JobDescription.h:336
Class to represent general URLs.
Definition: URL.h:88
ResourcesType Resources
Structure for resource requirements.
Definition: JobDescription.h:1017
int Priority
Definition: JobDescription.h:394
std::list< URL > CredentialService
Definition: JobDescription.h:401
std::string Input
Standard input.
Definition: JobDescription.h:312
std::string Checksum
CRC32 checksum of file.
Definition: JobDescription.h:763
bool UseIfFailure
Action in case job failed.
Definition: JobDescription.h:725
const std::string & GetSourceLanguage() const
Get input source language.
Definition: JobDescription.h:940
int SlotsPerHost
Definition: JobDescription.h:432
std::string Name
Name of output file.
Definition: JobDescription.h:774
bool UseAlternative()
Fill next alternative into this object.
Definition: JobDescription.h:708
std::map< std::string, std::string > OtherAttributes
Holds attributes not fitting into this class.
Definition: JobDescription.h:1038
std::string QueueName
Name of queue to use.
Definition: JobDescription.h:635
SoftwareRequirement CEType
CE Middleware.
Definition: JobDescription.h:621
ExecutionTarget.
Definition: ExecutionTarget.h:494
DataStagingType DataStaging
Structure for data staging.
Definition: JobDescription.h:1024
std::list< InputFileType > InputFiles
List of inputfiles.
Definition: JobDescription.h:788
bool IsExecutable
Definition: JobDescription.h:755
int CacheDiskSpace
Definition: JobDescription.h:466
JobDescriptionResult UnParse(std::string &product, std::string language, const std::string &dialect="") const
Output contents in the specified language.
ExclusiveExecutionType
Definition: JobDescription.h:437
std::list< std::string > ActivityOldID
ID of old activity.
Definition: JobDescription.h:168
std::list< std::string > Argument
List of arguments to executable.
Definition: JobDescription.h:203
std::string Email
Definition: JobDescription.h:274
std::list< ExecutableType > PostExecutable
Executables to be run after the main executable.
Definition: JobDescription.h:358
Range< int > IndividualPhysicalMemory
Specifies amount of requested RAM in MB.
Definition: JobDescription.h:573
Definition: JobDescription.h:746
const std::string & str(void)
Get explanation of result as string.
Definition: JobDescription.h:818
Definition: JobDescription.h:707
bool Prepare(const ExecutionTarget &et)
Prepare for submission to target.
Definition: JobDescription.h:993
Definition: JobDescription.h:651
int ThreadsPerProcess
Definition: JobDescription.h:525
std::string Version
Definition: JobDescription.h:515
bool HasAlternatives() const
Has alternative job descriptions.
Definition: JobDescription.h:867
Definition: JobDescription.h:709
NodeAccessType NodeAccess
Definition: JobDescription.h:613
static JobDescriptionResult Parse(const std::string &source, std::list< JobDescription > &jobdescs, const std::string &language="", const std::string &dialect="")
Parse string into JobDescription objects.
Definition: JobDescription.h:92
std::string JobName
Name of job.
Definition: JobDescription.h:127
std::multimap< std::string, std::string > Options
Definition: JobDescription.h:530
std::string DelegationID
Delegation for all data staging operations.
Definition: JobDescription.h:795