IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jul 31, 2005, 8:04:11 AM (21 years ago)
Author:
eugene
Message:

task/job list cleanup, fixing kill/delete

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/opihi/pantasks/JobOps.c

    r4450 r4684  
    11# include "scheduler.h"
    22
    3 # define MAX_N_JOBS 1000
    4 static char *JobIDList;
    5 static int   JobIDPtr = 0;
     3static Job **jobs;
     4static int   Njobs;
     5static int   NJOBS;
    66
    7 static char dot[] = ".";
     7/* counter marking job being visited by the run loop */
     8static int   ActiveJob;
    89
    9 static Job *jobs;
    10 static int  Njobs;
    11 static int  NJOBS;
    12 
    13 static char *JobName = dot;
    14 static int   CurrentJob = 0;
     10/* set up the jobs list */
     11void InitJobs () {
     12  NJOBS = 20;
     13  Njobs = 0;
     14  ALLOCATE (jobs, Job *, NJOBS);
     15  ActiveJob = -1;
     16}
    1517
    1618/* provide a mechanism to loop over the list of jobs */
     
    1921  Job *job;
    2022
    21   if (CurrentJob >= Njobs) {
    22     CurrentJob = 0;
     23  ActiveJob ++;
     24  if (ActiveJob < 0) ActiveJob = 0;
     25  if (ActiveJob >= Njobs) {
     26    ActiveJob = -1;
    2327    return (NULL);
    2428  }
    25 
    26   job = &jobs[CurrentJob];
    27   CurrentJob ++;
     29  job = jobs[ActiveJob];
    2830  return (job);
    29 }
    30 
    31 void InitJobs () {
    32   NJOBS = 20;
    33   Njobs = 0;
    34   ALLOCATE (jobs, Job, NJOBS);
    35   JobName = dot;
    36 
    37   ALLOCATE (JobIDList, char, MAX_N_JOBS);
    38   bzero (JobIDList, MAX_N_JOBS*sizeof(char));
    39 }
    40 
    41 /* return next unique ID, recycle every MAX_N_JOBS */
    42 int NextJobID () {
    43 
    44   int Ntry;
    45 
    46   JobIDPtr ++;
    47   if (JobIDPtr >= MAX_N_JOBS) JobIDPtr = 0;
    48 
    49   Ntry = 0;
    50   while (JobIDList[JobIDPtr]) {
    51     Ntry ++;
    52     JobIDPtr ++;
    53     if (JobIDPtr >= MAX_N_JOBS) JobIDPtr = 0;
    54     if (Ntry == MAX_N_JOBS) return (-1);
    55   }
    56   JobIDList[JobIDPtr] = TRUE;
    57   return (JobIDPtr);
    58 }
    59 
    60 /* list known jobs */
    61 void ListJobs () {
    62 
    63   int i;
    64 
    65   for (i = 0; i < Njobs; i++) {
    66     fprintf (stderr, "%d: %-15s %5d %20s (%x)\n", Njobs, jobs[i].task[0].name, jobs[i].JobID, jobs[i].argv[0], jobs[i].argv);
    67   }
    68   return;
    6931}
    7032
     
    7638  /* return job with matching JobID */
    7739  for (i = 0; i < Njobs; i++) {
    78     if (jobs[i].JobID == JobID) {
    79       return (&jobs[i]);
     40    if (jobs[i][0].JobID == JobID) {
     41      return (jobs[i]);
    8042    }
    8143  }
     
    8345
    8446
     47/* list known jobs */
     48void ListJobs () {
     49
     50  int i;
     51
     52  if (Njobs == 0) {
     53    fprintf (stderr, "no defined jobs\n");
     54    return;
     55  }
     56
     57  for (i = 0; i < Njobs; i++) {
     58    fprintf (stderr, "%d: %-15s %5d %20s (%x)\n", Njobs, jobs[i][0].task[0].name, jobs[i][0].JobID, jobs[i][0].argv[0], jobs[i][0].argv);
     59  }
     60  return;
     61}
     62
    8563/* make a new job from a task */
    8664Job *CreateJob (Task *task) {
    8765 
    8866  int i;
     67  Job *job;
     68 
     69  ALLOCATE (job, Job, 1);
    8970
    90   jobs[Njobs].JobID = NextJobID ();
    91   jobs[Njobs].pid = 0;
    92   jobs[Njobs].mode = JOB_LOCAL;
     71  job[0].JobID = NextJobID ();
     72  job[0].pid = 0;
     73  job[0].mode = JOB_LOCAL;
    9374  if (task[0].host != NULL) {
    94     jobs[Njobs].mode = JOB_CONTROLLER;
     75    job[0].mode = JOB_CONTROLLER;
    9576  }
    9677
     
    9980   *  we allocate one extra element, with value 0 to be passed to execvp
    10081   */
    101   jobs[Njobs].argc = task[0].argc;
    102   ALLOCATE (jobs[Njobs].argv, char *, MAX (task[0].argc + 1, 1));
     82  job[0].argc = task[0].argc;
     83  ALLOCATE (job[0].argv, char *, MAX (task[0].argc + 1, 1));
    10384  for (i = 0; i < task[0].argc; i++) {
    104     jobs[Njobs].argv[i] = strcreate (task[0].argv[i]);
     85    job[0].argv[i] = strcreate (task[0].argv[i]);
    10586  }
    106   jobs[Njobs].argv[i] = 0;
     87  job[0].argv[i] = 0;
    10788
    10889  /* other data from the task is needed by the job
     
    11192     be applied to the existing jobs */
    11293
    113   jobs[Njobs].task = task;
     94  job[0].task = task;
    11495 
    11596  /* if we decide we need to be able to dynamically set task qualities
     
    11798     entries to these quantites in the job structure */
    11899
     100  jobs[Njobs] = job;
    119101  Njobs ++;
    120102  if (Njobs == NJOBS) {
    121103    NJOBS += 20;
    122     REALLOCATE (jobs, Job, NJOBS);
     104    REALLOCATE (jobs, Job *, NJOBS);
    123105  }
    124   return (&jobs[Njobs-1]);
     106  return (jobs[Njobs-1]);
    125107}
    126108
     
    130112
    131113  if (job == NULL) return;
    132 
    133   if ((job[0].JobID >= 0) || (job[0].JobID < MAX_N_JOBS)) {
    134     JobIDList[job[0].JobID] = FALSE;
    135   }
     114 
     115  FreeJobID (job[0].JobID);
    136116
    137117  for (i = 0; i < job[0].argc; i++) {
     
    142122}
    143123
    144 void SetCurrentJob (char *name) {
    145   JobName = name;
    146 }
    147 
    148 char *GetCurrentJob () {
    149   return (JobName);
    150 }
    151 
     124/** are we deleting the active job?? **/
    152125int DeleteJob (Job *job) {
    153126
     
    156129  Nm = -1;
    157130  for (i = 0; i < Njobs; i++) {
    158     if (job == &jobs[i]) {
     131    if (job == jobs[i]) {
    159132      Nm = i;
    160133      break;
     
    166139  }
    167140
    168   FreeJob (&jobs[Nm]);
     141  FreeJob (jobs[Nm]);
    169142  for (i = Nm + 1; i < Njobs; i++)
    170143    jobs[i - 1] = jobs[i];
    171144  Njobs --;
    172145
    173   CurrentJob --;
    174   CurrentJob = MAX (CurrentJob, 0);
    175 
     146  /* adjust active job number */
     147  if (ActiveJob >= Nm) {
     148    ActiveJob --;
     149  }
    176150  return (TRUE);
    177151}
Note: See TracChangeset for help on using the changeset viewer.