Changeset 17475 for trunk/Ohana/src/opihi/pcontrol/CheckBusyJob.c
- Timestamp:
- Apr 23, 2008, 11:35:39 AM (18 years ago)
- File:
-
- 1 edited
-
trunk/Ohana/src/opihi/pcontrol/CheckBusyJob.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/opihi/pcontrol/CheckBusyJob.c
r16456 r17475 4 4 int CheckBusyJob (Job *job, Host *host) { 5 5 6 int status; 7 int outstate; 8 char *p; 9 char string[64]; 10 IOBuffer buffer; 6 int status; 11 7 12 8 /* we are checking a job which is currently busy. it has been pulled from the … … 16 12 ASSERT (job, "job not set"); 17 13 ASSERT (host, "host not set"); 18 19 14 ASSERT (host == (Host *) job[0].host, "invalid host"); 20 15 ASSERT (job == (Job *) host[0].job, "invalid job"); 21 16 22 InitIOBuffer (&buffer, 0x100); 23 24 status = PclientCommand (host, "status", PCLIENT_PROMPT, &buffer); 17 status = PclientCommand (host, "status", PCLIENT_PROMPT, PCONTROL_RESP_CHECK_BUSY_JOB); 25 18 26 19 /* check on success of pclient command */ 27 20 switch (status) { 28 21 case PCLIENT_DOWN: 29 HarvestHost (host[0].pid); 22 // free the realhost name 23 if (job[0].realhost) free (job[0].realhost); 24 job[0].realhost = NULL; 25 30 26 // unlink host & job 27 if (VerboseMode()) gprint (GP_ERR, "host %s is down\n", host[0].hostname); 31 28 job[0].host = NULL; 32 29 host[0].job = NULL; 33 if (job[0].realhost) free (job[0].realhost); 34 job[0].realhost = NULL; 30 HarvestHost (host[0].pid); 35 31 PutHost (host, PCONTROL_HOST_DOWN, STACK_BOTTOM); 36 32 PutJob (job, PCONTROL_JOB_PENDING, STACK_BOTTOM); 37 FreeIOBuffer (&buffer);38 33 return (FALSE); 39 40 case PCLIENT_HUNG:41 // don't do anything drastic, just keep trying42 if (DEBUG || VerboseMode()) gprint (GP_ERR, "client is busy, not responding");43 PutHost (host, PCONTROL_HOST_BUSY, STACK_BOTTOM);44 PutJob (job, PCONTROL_JOB_BUSY, STACK_BOTTOM);45 FreeIOBuffer (&buffer);46 return (TRUE);47 34 48 35 case PCLIENT_GOOD: 49 36 if (DEBUG || VerboseMode()) gprint (GP_ERR, "message received (CheckBusyJob)"); 50 break; 37 PutHost (host, PCONTROL_HOST_RESP, STACK_BOTTOM); 38 PutJob (job, PCONTROL_JOB_BUSY, STACK_BOTTOM); 39 return (TRUE); 51 40 52 41 default: 53 42 ABORT ("unknown status for pclient command"); 54 43 } 44 } 45 46 int CheckBusyJobResponse (Host *host) { 47 48 int outstate; 49 char *p; 50 char string[64]; 51 IOBuffer *buffer; 52 Job *job; 53 54 /* job must have assigned host */ 55 ASSERT (host, "missing host"); 56 ASSERT (host[0].job, "missing job"); 57 buffer = &host[0].comms_buffer; 58 job = (Job *) host[0].job; 55 59 56 60 /** host is up, need to parse message **/ 57 p = memstr (buffer.buffer, "STATUS", buffer.Nbuffer); 58 // this condition means the message is garbage. toss it and try again 59 if (p == NULL) { 60 PutHost (host, PCONTROL_HOST_BUSY, STACK_BOTTOM); 61 PutJob (job, PCONTROL_JOB_BUSY, STACK_BOTTOM); 62 FreeIOBuffer (&buffer); 63 return (FALSE); 64 } 61 p = memstr (buffer[0].buffer, "STATUS", buffer[0].Nbuffer); 62 ASSERT (p != NULL, "missing STATUS in pclient message"); 65 63 66 64 sscanf (p, "%*s %s", string); … … 71 69 PutHost (host, PCONTROL_HOST_BUSY, STACK_BOTTOM); 72 70 PutJob (job, PCONTROL_JOB_BUSY, STACK_BOTTOM); 73 FreeIOBuffer (&buffer);74 71 return (TRUE); 75 72 } … … 79 76 if (!strcmp(string, "EXIT")) outstate = PCONTROL_JOB_EXIT; 80 77 if (!strcmp(string, "CRASH")) outstate = PCONTROL_JOB_CRASH; 81 ASSERT (outstate != PCONTROL_JOB_BUSY, " should not reach here (CheckJob)");78 ASSERT (outstate != PCONTROL_JOB_BUSY, "invalid status response (CheckBusyJobResponse)"); 82 79 83 80 /* parse the exit status and sizes of output buffers */ 84 p = memstr (buffer .buffer, "EXITST", buffer.Nbuffer);81 p = memstr (buffer[0].buffer, "EXITST", buffer[0].Nbuffer); 85 82 sscanf (p, "%*s %d", &job[0].exit_status); 86 p = memstr (buffer .buffer, "STDOUT", buffer.Nbuffer);83 p = memstr (buffer[0].buffer, "STDOUT", buffer[0].Nbuffer); 87 84 sscanf (p, "%*s %d", &job[0].stdout_size); 88 p = memstr (buffer .buffer, "STDERR", buffer.Nbuffer);85 p = memstr (buffer[0].buffer, "STDERR", buffer[0].Nbuffer); 89 86 sscanf (p, "%*s %d", &job[0].stderr_size); 90 87 … … 98 95 PutHost (host, PCONTROL_HOST_BUSY, STACK_BOTTOM); 99 96 PutJobSetState (job, PCONTROL_JOB_DONE, STACK_BOTTOM, outstate); 100 gettimeofday (&job[0].stop, (void *)NULL);97 gettimeofday (&job[0].stop, NULL); 101 98 job[0].dtime = DTIME(job[0].stop, job[0].start); 102 FreeIOBuffer (&buffer);103 99 return (TRUE); 104 100 }
Note:
See TracChangeset
for help on using the changeset viewer.
