00001
00002
00003 #ifndef __ARC_JOB_H__
00004 #define __ARC_JOB_H__
00005
00006 #include <arc/DateTime.h>
00007 #include <arc/URL.h>
00008 #include <arc/client/JobState.h>
00009 #include <string>
00010
00011 namespace Arc {
00012
00013 class DataHandle;
00014 class JobControllerPlugin;
00015 class JobControllerPluginLoader;
00016 class JobSupervisor;
00017 class Logger;
00018 class UserConfig;
00019 class XMLNode;
00020
00022
00027 class Job {
00028 friend class JobSupervisor;
00029 public:
00030
00032
00035 Job();
00036 ~Job();
00037
00038 Job(const Job& job);
00039 Job(XMLNode job);
00040
00041
00042
00043 URL JobID;
00044 URL Cluster;
00045 std::string InterfaceName;
00046
00047
00048 std::string Name;
00049 std::string Type;
00050 std::string IDFromEndpoint;
00051 std::string LocalIDFromManager;
00052 std::string JobDescription;
00053 std::string JobDescriptionDocument;
00054 JobState State;
00055 JobState RestartState;
00056 int ExitCode;
00057 std::string ComputingManagerExitCode;
00058 std::list<std::string> Error;
00059 int WaitingPosition;
00060 std::string UserDomain;
00061 std::string Owner;
00062 std::string LocalOwner;
00063 Period RequestedTotalWallTime;
00064 Period RequestedTotalCPUTime;
00065 int RequestedSlots;
00066 std::list<std::string> RequestedApplicationEnvironment;
00067 std::string StdIn;
00068 std::string StdOut;
00069 std::string StdErr;
00070 std::string LogDir;
00071 std::list<std::string> ExecutionNode;
00072 std::string Queue;
00073 Period UsedTotalWallTime;
00074 Period UsedTotalCPUTime;
00075 int UsedMainMemory;
00076 Time LocalSubmissionTime;
00077 Time SubmissionTime;
00078 Time ComputingManagerSubmissionTime;
00079 Time StartTime;
00080 Time ComputingManagerEndTime;
00081 Time EndTime;
00082 Time WorkingAreaEraseTime;
00083 Time ProxyExpirationTime;
00084 std::string SubmissionHost;
00085 std::string SubmissionClientName;
00086 Time CreationTime;
00087 Period Validity;
00088 std::list<std::string> OtherMessages;
00089
00090 std::list<std::string> ActivityOldID;
00091 std::map<std::string, std::string> LocalInputFiles;
00092
00093 bool VirtualMachine;
00094 std::string UsedCPUType;
00095 std::string UsedOSFamily;
00096 std::string UsedPlatform;
00097
00098
00099 enum ResourceType {
00100 STDIN,
00101 STDOUT,
00102 STDERR,
00103 STAGEINDIR,
00104 STAGEOUTDIR,
00105 SESSIONDIR,
00106 JOBLOG,
00107 JOBDESCRIPTION
00108 };
00109
00111
00120 void SaveToStream(std::ostream& out, bool longlist) const;
00121
00123
00133 Job& operator=(XMLNode job);
00134
00135 Job& operator=(const Job& job);
00136
00137 int operator==(const Job& other);
00138
00140
00147 void Update(XMLNode job);
00148
00150
00158 void ToXML(XMLNode job) const;
00159
00160 bool GetURLToResource(ResourceType resource, URL& url) const;
00161
00162 bool Retrieve(const UserConfig& uc, const URL& destination, bool force) const;
00163
00164 static bool CopyJobFile(const UserConfig& uc, const URL& src, const URL& dst);
00165 static bool ListFilesRecursive(const UserConfig& uc, const URL& dir, std::list<std::string>& files, const std::string& prefix = "");
00166
00167 static bool CompareJobID(const Job& a, const Job& b) { return a.JobID.fullstr().compare(b.JobID.fullstr()) < 0; }
00168 static bool CompareSubmissionTime(const Job& a, const Job& b) { return a.SubmissionTime < b.SubmissionTime; }
00169 static bool CompareJobName(const Job& a, const Job& b) { return a.Name.compare(b.Name) < 0; }
00170
00172
00205 static bool ReadAllJobsFromFile(const std::string& filename, std::list<Job>& jobs, unsigned nTries = 10, unsigned tryInterval = 500000);
00206
00208
00250 static bool ReadJobsFromFile(const std::string& filename, std::list<Job>& jobs, std::list<std::string>& jobIdentifiers, bool all = false, const std::list<std::string>& endpoints = std::list<std::string>(), const std::list<std::string>& rejectEndpoints = std::list<std::string>(), unsigned nTries = 10, unsigned tryInterval = 500000);
00251
00253
00277 static bool WriteJobsToTruncatedFile(const std::string& filename, const std::list<Job>& jobs, unsigned nTries = 10, unsigned tryInterval = 500000);
00278
00280
00286 static bool WriteJobsToFile(const std::string& filename, const std::list<Job>& jobs, unsigned nTries = 10, unsigned tryInterval = 500000);
00287
00289
00319 static bool WriteJobsToFile(const std::string& filename, const std::list<Job>& jobs, std::list<const Job*>& newJobs, unsigned nTries = 10, unsigned tryInterval = 500000);
00320
00322
00344 static bool RemoveJobsFromFile(const std::string& filename, const std::list<URL>& jobids, unsigned nTries = 10, unsigned tryInterval = 500000);
00345
00347
00364 static bool ReadJobIDsFromFile(const std::string& filename, std::list<std::string>& jobids, unsigned nTries = 10, unsigned tryInterval = 500000);
00365
00367
00382 static bool WriteJobIDToFile(const URL& jobid, const std::string& filename, unsigned nTries = 10, unsigned tryInterval = 500000);
00383
00385
00400 static bool WriteJobIDsToFile(const std::list<URL>& jobids, const std::string& filename, unsigned nTries = 10, unsigned tryInterval = 500000);
00401
00402 static bool WriteJobIDsToFile(const std::list<Job>& jobs, const std::string& filename, unsigned nTries = 10, unsigned tryInterval = 500000);
00403
00404 private:
00405 JobControllerPlugin* jc;
00406
00407 static JobControllerPluginLoader loader;
00408
00409
00410 static DataHandle *data_source, *data_destination;
00411
00412 static Logger logger;
00413 };
00414
00415 }
00416
00417 #endif // __ARC_JOB_H__