123 throw KKException ("KKJob::ProcessNode ***ERROR*** ProcessNode was not defined bydecendent class.");
129 typedef KKJobPtr (*ConstructorPtr)(
const KKStr&);
136 ConstructorPtr _constructor
139 registeredConstructors.insert (pair<KKStr, ConstructorPtr>(_name, _constructor));
146 const KKStr& _jobTypeName,
147 const KKStr& _statusStr
150 ConstructorIndex::iterator idx;
151 idx = registeredConstructors.find (_jobTypeName);
152 if (idx == registeredConstructors.end ())
154 KKJobPtr j = idx->second (_manager);
227 if (prerequisites.size () < 1)
230 KKStr s (5 + prerequisites.size () * 5);
231 for (
kkuint32 x = 0; x < prerequisites.size (); ++x)
235 s << prerequisites[x];
245 prerequisites.clear ();
250 for (
kkuint32 x = 0; x < fields.size (); ++x)
252 kkint32 p = fields[x].ToInt ();
253 prerequisites.push_back (p);
265 statusStr <<
"JobId" <<
"\t" <<
jobId <<
"\t" 266 <<
"ParentId" <<
"\t" <<
parentId <<
"\t" 280 log.Level (30) <<
"KKJob::ProcessStatusStr[" << statusStr <<
"]" << endl;
287 while (fieldNum < fields.size ())
289 fieldName = fields[fieldNum];
291 if (fieldNum < fields.size ())
293 fieldValue = fields[fieldNum];
302 fieldValue.TrimLeft (
"\n\r\t ");
303 fieldValue.TrimRight (
"\n\r\t ");
305 if (fieldName.CompareIgnoreCase (
"JOBID") == 0)
306 jobId = atoi (fieldValue.Str ());
308 else if (fieldName.CompareIgnoreCase (
"PARENTID") == 0)
309 parentId = atoi (fieldValue.Str ());
311 else if (fieldName.CompareIgnoreCase (
"STATUS") == 0)
312 status = JobStatusFromStr (fieldValue);
314 else if (fieldName.CompareIgnoreCase (
"NumProcessors") == 0)
315 numProcessors = fieldValue.ToInt ();
317 else if (fieldName.CompareIgnoreCase (
"NumPorcessesAllowed") == 0)
318 numPorcessesAllowed = fieldValue.ToInt ();
320 else if (fieldName.CompareIgnoreCase (
"Prerequisites") == 0)
321 PrerequisitesFromStr (fieldValue);
325 ProcessStatusField (fieldName, fieldValue);
335 const KKStr& fieldValue
338 log.Level (-1) <<
"KKJob::ProcessStatusField Invalid Field Name[" << fieldName <<
"]." << endl;
375 manager (jobs.manager)
378 KKJobList::const_iterator idx;
379 for (idx = jobs.begin (); idx != jobs.end (); idx++)
383 PushOnBack (j->Duplicate ());
393 jobIdLookUpTableIdx = jobIdLookUpTable.find (jobId);
394 if (jobIdLookUpTableIdx == jobIdLookUpTable.end ())
397 return jobIdLookUpTableIdx->second;
407 for (
kkuint32 z = 0; z < p.size (); ++z)
423 for (x = 0; x < QueueSize (); x++)
425 KKJobPtr j = IdxToPtr (x);
439 for (x = 0; x < QueueSize (); ++x)
441 KKJobPtr j = IdxToPtr (x);
458 jobIdLookUpTableIdx = jobIdLookUpTable.find (j->JobId ());
459 if (jobIdLookUpTableIdx != jobIdLookUpTable.end ())
461 log.Level (-1) << endl
463 <<
"KKJobList::PushOnBack ***ERROR***" << endl
465 <<
"KKJobList::PushOnBack Duplicate JobId[" << j->JobId () <<
"]" << endl
471 KKQueue<KKJob>::PushOnBack (j);
472 jobIdLookUpTable.insert (JobIdLookUpTablePair (j->JobId (), j));
484 KKJobList::iterator idx;
485 for (idx = begin (); idx != end (); ++idx)
KKStr(kkint32 size)
Creates a KKStr object that pre-allocates space for 'size' characters.
kkint32 numPorcessesAllowed
static KKStr JobStatusToStr(JobStatus status)
bool AllPrequisitesDone(KKJobPtr job)
virtual void ProcessNode()
void PrerequisitesFromStr(const KKStr &s)
KKJobList(JobManagerPtr _manager)
const VectorInt & Prerequisites() const
std::vector< int > VectorInt
KKJobManager * JobManagerPtr
static void RegisterConstructor(const KKStr &_name, ConstructorPtr _constructor)
virtual KKJobPtr Duplicate() const
static JobStatus JobStatusFromStr(const KKStr &statusStr)
void AddPrerequisites(VectorInt _prerequisites)
virtual void CompletedJobDataWrite(ostream &o)
Write out completed job results to status file.
void ProcessStatusStr(const KKStr &statusStr)
unsigned __int32 kkuint32
static KKJobPtr CallAppropriateConstructor(JobManagerPtr _manager, const KKStr &_jobTypeName, const KKStr &_statusStr)
virtual void CompletedJobDataRead(istream &i)
Works with 'WriteCompletedJobData'; You use this to load in data written by 'WriteCompletedJobData'.
KKJob(JobManagerPtr _manager, kkint32 _jobId, kkint32 _parentId, kkint32 _numPorcessesAllowed, RunLog &_log)
virtual void ProcessStatusField(const KKStr &fieldName, const KKStr &fieldValue)
Imjpelmentation specific field processing.
static KKStr Concat(const std::vector< std::string > &values)
Concatenates the list of 'std::string' strings.
KKStr PrerequisitesToStr() const
virtual void ReFresh(KKJob &j)
void PushOnBack(KKJobPtr j)
virtual const char * JobType() const
KKException(const char *_exceptionStr)
Used for logging messages.
VectorKKStr Split(char del) const
Splits the string up into tokens using 'del' as the separator returning them in a vector...
A framework for managing a large number of processes(Jobs) in a multi-cpu/ multi-o/s environment...
KKJob(JobManagerPtr _manager)
kkint32 CompareIgnoreCase(const char *s2) const
summary>Compares to Strings and returns -1, 0, or 1, indicating if less than, equal, or greater.
KKJobList(const KKJobList &jobs)
virtual KKStr ToStatusStr()
static ConstructorIndex registeredConstructors
KKJobPtr LookUpByJobId(kkint32 jobId)