Changeset 17475 for trunk/Ohana/src/opihi/pcontrol/StartJob.c
- Timestamp:
- Apr 23, 2008, 11:35:39 AM (18 years ago)
- File:
-
- 1 edited
-
trunk/Ohana/src/opihi/pcontrol/StartJob.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/opihi/pcontrol/StartJob.c
r11388 r17475 1 1 # include "pcontrol.h" 2 2 3 // job and host are bound together (why pass in both?) 3 4 int StartJob (Job *job, Host *host) { 4 5 5 6 int i, Nline, status; 6 char *line, *p; 7 IOBuffer buffer; 8 9 InitIOBuffer (&buffer, 0x100); 7 char *line; 10 8 11 9 /* job must have assigned host */ … … 28 26 } 29 27 30 status = PclientCommand (host, line, PCLIENT_PROMPT, &buffer);28 status = PclientCommand (host, line, PCLIENT_PROMPT, PCONTROL_RESP_START_JOB); 31 29 free (line); 32 30 … … 34 32 switch (status) { 35 33 case PCLIENT_DOWN: 34 // unlink host & job 36 35 if (VerboseMode()) gprint (GP_ERR, "host %s is down\n", host[0].hostname); 37 goto failure;38 39 case PCLIENT_HUNG:40 // we need the job start to return a valid Job ID,41 // give up on jobs which don't get started.42 // XXX we are sensitive here to the time it takes pclient43 // to fork the job. if this is slow, the client may appear to hang.44 gprint (GP_ERR, "host %s is not responding (StartJob)\n", host[0].hostname);45 if (VerboseMode()) gprint (GP_ERR, "host %s is not responding\n", host[0].hostname);46 47 // unlink host & job48 36 job[0].host = NULL; 49 37 host[0].job = NULL; 50 if (job[0].realhost) free (job[0].realhost); 51 job[0].realhost = NULL; 52 PutHost (host, PCONTROL_HOST_DONE, STACK_BOTTOM); 38 HarvestHost (host[0].pid); 39 PutHost (host, PCONTROL_HOST_DOWN, STACK_BOTTOM); 53 40 PutJob (job, PCONTROL_JOB_PENDING, STACK_BOTTOM); 54 FreeIOBuffer (&buffer);55 41 return (FALSE); 56 42 57 43 case PCLIENT_GOOD: 58 if (VerboseMode()) gprint (GP_ERR, "message received (StartJob)\n"); 59 break; 44 job[0].realhost = strcreate (host[0].hostname); 45 job[0].pid = -1; 46 gettimeofday (&job[0].start, (void *) NULL); 47 48 if (VerboseMode()) gprint (GP_ERR, "started job on host %s\n", host[0].hostname); 49 PutHost (host, PCONTROL_HOST_RESP, STACK_BOTTOM); 50 PutJob (job, PCONTROL_JOB_BUSY, STACK_BOTTOM); 51 return (TRUE); 60 52 61 53 default: 62 54 ABORT ("unknown status for pclient command"); 63 55 } 56 } 57 58 // message has been received from the host, interpret results 59 int StartJobResponse (Host *host) { 60 61 int status; 62 char *p; 63 IOBuffer *buffer; 64 Job *job; 65 66 /* job must have assigned host */ 67 ASSERT (host, "missing host"); 68 ASSERT (host[0].job, "missing job"); 69 buffer = &host[0].comms_buffer; 70 job = (Job *) host[0].job; 64 71 65 72 /* check on result of pclient command */ 66 p = memstr (buffer .buffer, "STATUS", buffer.Nbuffer);73 p = memstr (buffer[0].buffer, "STATUS", buffer[0].Nbuffer); 67 74 ASSERT (p != NULL, "missing STATUS in pclient message"); 68 75 … … 71 78 case -1: 72 79 if (VerboseMode()) gprint (GP_ERR, "error in pclient child\n"); 73 goto failure; 80 // unlink host & job 81 job[0].host = NULL; 82 host[0].job = NULL; 83 HarvestHost (host[0].pid); 84 PutHost (host, PCONTROL_HOST_DOWN, STACK_BOTTOM); 85 PutJob (job, PCONTROL_JOB_PENDING, STACK_BOTTOM); 86 return (FALSE); 74 87 75 88 case -2: … … 80 93 81 94 default: 82 job[0].realhost = strcreate (host[0].hostname);95 if (VerboseMode()) gprint (GP_ERR, "message received (StartJobResponse)\n"); 83 96 job[0].pid = status; 84 97 PutHost (host, PCONTROL_HOST_BUSY, STACK_BOTTOM); 85 98 PutJob (job, PCONTROL_JOB_BUSY, STACK_BOTTOM); 86 FreeIOBuffer (&buffer); 87 gettimeofday (&job[0].start, (void *) NULL); 99 gettimeofday (&job[0].start, NULL); 88 100 return (TRUE); 89 101 } 102 90 103 /* we should never reach here */ 91 104 ABORT ("should not reach here (StartJob)"); 92 93 failure:94 // unlink host & job95 job[0].host = NULL;96 host[0].job = NULL;97 HarvestHost (host[0].pid);98 PutHost (host, PCONTROL_HOST_DOWN, STACK_BOTTOM);99 PutJob (job, PCONTROL_JOB_PENDING, STACK_BOTTOM);100 FreeIOBuffer (&buffer);101 return (FALSE);102 105 }
Note:
See TracChangeset
for help on using the changeset viewer.
