IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Aug 11, 2006, 4:51:50 PM (20 years ago)
Author:
eugene
Message:

working on threaded version

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/opihi/pcontrol/CheckSystem.c

    r7917 r8296  
    1313  CheckBusyJobs(0.020);  /* get job status */
    1414  CheckDoneJobs(0.020);  /* harvest job stdout/stderr */
     15  CheckKillJobs(0.020);  /* harvest job stdout/stderr */
    1516
    1617  CheckDoneHosts(0.020); /* reset the host */
     
    5152  float dtime;
    5253
    53   stack = GetJobStack (PCONTROL_JOB_BUSY);
    54   Nobject = stack[0].Nobject;
    55 
    56   /* always allow at least one test */
    57   gettimeofday (&start, (void *) NULL);
    58   dtime = 0.0;
    59   for (i = 0; (i < Nobject) && (dtime < MaxDelay); i++) {
    60     job = GetStack (stack, STACK_TOP);
     54  /* Loop through objects on the stack, no more than once.  Note that it is not important if the
     55     stack size is modified by other threads or is changed by any of the actions performed during
     56     this loop: the Nobject value is only used to get a rough number for the number of iterations.
     57   */
     58
     59  hoststack = GetHostStack (PCONTROL_HOST_BUSY);
     60  jobstack  = GetJobStack (PCONTROL_JOB_BUSY);
     61  Nobject   = jobstack[0].Nobject;
     62
     63  /* always allow at least one test */
     64  gettimeofday (&start, (void *) NULL);
     65  dtime = 0.0;
     66  for (i = 0; (i < Nobject) && (dtime < MaxDelay); i++) {
     67    /* pull both job and host from their stacks */
     68    /* XXX is the subject to the Dangerous Embrace? */
     69    LockStack (hoststack);
     70    job = PullStackByLocation (jobstack, STACK_TOP);
     71    if (job == NULL) {
     72      UnlockStack (hoststack);
     73      break;
     74    }
     75    host = RemoveStackByID (hoststack, job[0].host[0].HostID);
     76    UnlockStack (hoststack);
     77
    6178    CheckBusyJob (job);
    6279    gettimeofday (&stop, (void *) NULL);
     
    7592  float dtime;
    7693
     94  /* Loop through objects on the stack, no more than once. see note above */
    7795  stack = GetJobStack (PCONTROL_JOB_DONE);
    7896  Nobject = stack[0].Nobject;
     
    82100  dtime = 0.0;
    83101  for (i = 0; (i < Nobject) && (dtime < MaxDelay); i++) {
    84     job = GetStack (stack, STACK_TOP);
     102    job = PullStackByLocation (stack, STACK_TOP);
     103    if (job == NULL) break;
    85104    CheckDoneJob (job);
    86105    gettimeofday (&stop, (void *) NULL);
     
    91110}
    92111
     112int CheckKillJobs (float MaxDelay) {
     113
     114  struct timeval start, stop;
     115  int i, Nobject;
     116  Stack *stack;
     117  Job   *job;
     118  float dtime;
     119
     120  /* Loop through objects on the stack, no more than once. see note above */
     121  stack = GetJobStack (PCONTROL_JOB_KILL);
     122  Nobject = stack[0].Nobject;
     123
     124  /* always allow at least one test */
     125  gettimeofday (&start, (void *) NULL);
     126  dtime = 0.0;
     127  for (i = 0; (i < Nobject) && (dtime < MaxDelay); i++) {
     128    job = PullStackByLocation (stack, STACK_TOP);
     129    if (job == NULL) break;
     130    KillJob (job);
     131    gettimeofday (&stop, (void *) NULL);
     132    dtime = DTIME (stop, start);
     133  }
     134  if (0 && (Nobject > 0)) gprint (GP_ERR, "checked %d of %d jobs\n", i, Nobject);
     135  return (TRUE);
     136}
     137
    93138int CheckDoneHosts (float MaxDelay) {
    94139
     
    99144  float dtime;
    100145
     146  /* Loop through objects on the stack, no more than once. see note above */
    101147  stack = GetHostStack (PCONTROL_HOST_DONE);
    102148  Nobject = stack[0].Nobject;
     
    106152  dtime = 0.0;
    107153  for (i = 0; (i < Nobject) && (dtime < MaxDelay); i++) {
    108     host = GetStack (stack, STACK_TOP);
     154    host = PullStackByLocation (stack, STACK_TOP);
     155    if (host == NULL) break;
    109156    CheckDoneHost (host);
    110157    gettimeofday (&stop, (void *) NULL);
     
    123170  float dtime;
    124171
     172  /* Loop through objects on the stack, no more than once. see note above */
    125173  stack = GetHostStack (PCONTROL_HOST_DOWN);
    126174  Nobject = stack[0].Nobject;
     
    130178  dtime = 0.0;
    131179  for (i = 0; (i < Nobject) && (dtime < MaxDelay); i++) {
    132     host = GetStack (stack, STACK_TOP);
     180    host = PullStackByLocation (stack, STACK_TOP);
     181    if (host == NULL) break;
    133182    dtime = DTIME (host[0].nexttry, start);
    134183    if (dtime > 0) {
     
    156205  if (!stack[0].Nobject) return (TRUE);
    157206
     207  /* Loop through objects on the stack, no more than once. see note above */
    158208  stack = GetHostStack (PCONTROL_HOST_IDLE);
    159209  Nobject = stack[0].Nobject;
     
    163213  dtime = 0.0;
    164214  for (i = 0; (i < Nobject) && (dtime < MaxDelay); i++) {
    165     host = GetStack (stack, STACK_TOP);
     215    host = PullStackByLocation (stack, STACK_TOP);
     216    if (host == NULL) break;
    166217    CheckIdleHost (host);
    167218    gettimeofday (&stop, (void *) NULL);
     
    181232  float dtime;
    182233
     234  /* Loop through objects on the stack, no more than once. see note above */
    183235  stack = GetHostStack (PCONTROL_HOST_IDLE);
    184236  Nobject = stack[0].Nobject;
     
    188240  dtime = 0.0;
    189241  for (i = 0; (i < Nobject) && (dtime < MaxDelay); i++) {
    190     host = GetStack (stack, STACK_TOP);
     242    host = PullStackByLocation (stack, STACK_TOP);
     243    if (host == NULL) break;
    191244    CheckHost (host);
    192245    gettimeofday (&stop, (void *) NULL);
     
    195248  if (0) gprint (GP_ERR, "checked %d idle hosts\n", i);
    196249
     250  /* Loop through objects on the stack, no more than once. see note above */
    197251  stack = GetHostStack (PCONTROL_HOST_BUSY);
    198252  Nobject = stack[0].Nobject;
     
    200254  dtime = 0.0;
    201255  for (i = 0; (i < Nobject) && (dtime < MaxDelay); i++) {
    202     host = GetStack (stack, STACK_TOP);
     256    host = PullStackByLocation (stack, STACK_TOP);
     257    if (host == NULL) break;
    203258    CheckHost (host);
    204259    gettimeofday (&stop, (void *) NULL);
Note: See TracChangeset for help on using the changeset viewer.