Changeset 4762 for trunk/Ohana/src/opihi/pcontrol/CheckSystem.c
- Timestamp:
- Aug 13, 2005, 10:30:13 AM (21 years ago)
- File:
-
- 1 edited
-
trunk/Ohana/src/opihi/pcontrol/CheckSystem.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/opihi/pcontrol/CheckSystem.c
r4705 r4762 1 1 # include "pcontrol.h" 2 2 3 static Npass = 0; 4 3 5 int CheckSystem () { 4 6 5 CheckBusyJobs(); 6 CheckDoneJobs(); 7 CheckDoneHosts(); 8 CheckIdleHosts(); 9 CheckDownHosts(); 10 11 /** add in different timescales for heartbeat? **/ 12 CheckLiveHosts(); 13 14 return (TRUE); 15 } 16 17 int CheckBusyJobs () { 18 7 /* we want to give each block a maximum allowed time */ 8 CheckIdleHosts(0.020); /* submit a new job */ 9 10 CheckBusyJobs(0.020); /* get job status */ 11 CheckDoneJobs(0.020); /* harvest job stdout/stderr */ 12 13 CheckDoneHosts(0.020); /* reset the host */ 14 CheckDownHosts(0.100); /* launch the host */ 15 16 /* most tests require about 2ms per host. 17 CheckDoneJobs must depend on the size of the output buffer */ 18 19 /* this is a waste of cycles: no need to do this every loop */ 20 if (Npass > 20) { 21 CheckLiveHosts(0.040); 22 Npass = 0; 23 } else { 24 Npass ++; 25 } 26 27 if (0) { 28 Stack *stack; 29 int Nidle, Ndown, Nbusy; 30 stack = GetHostStack (PCONTROL_HOST_IDLE); 31 Nidle = stack[0].Nobject; 32 stack = GetHostStack (PCONTROL_HOST_DOWN); 33 Ndown = stack[0].Nobject; 34 stack = GetHostStack (PCONTROL_HOST_BUSY); 35 Nbusy = stack[0].Nobject; 36 fprintf (stderr, "busy, idle, down: %2d %2d %2d\n", Nbusy, Nidle, Ndown); 37 } 38 39 return (TRUE); 40 } 41 42 int CheckBusyJobs (float MaxDelay) { 43 44 struct timeval start, stop; 19 45 int i, Nobject; 20 46 Stack *stack; 21 47 Job *job; 48 float dtime; 22 49 23 50 stack = GetJobStack (PCONTROL_JOB_BUSY); 24 51 Nobject = stack[0].Nobject; 25 52 26 for (i = 0; i < Nobject; i++) { 53 /* always allow at least one test */ 54 gettimeofday (&start, (void *) NULL); 55 dtime = 0.0; 56 for (i = 0; (i < Nobject) && (dtime < MaxDelay); i++) { 27 57 job = GetStack (stack, STACK_TOP); 28 58 CheckBusyJob (job); 29 } 30 return (TRUE); 31 } 32 33 int CheckDoneJobs () { 34 59 gettimeofday (&stop, (void *) NULL); 60 dtime = DTIME (stop, start); 61 } 62 if (0 && (Nobject > 0)) fprintf (stderr, "checked %d of %d jobs\n", i, Nobject); 63 return (TRUE); 64 } 65 66 int CheckDoneJobs (float MaxDelay) { 67 68 struct timeval start, stop; 35 69 int i, Nobject; 36 70 Stack *stack; 37 71 Job *job; 72 float dtime; 38 73 39 74 stack = GetJobStack (PCONTROL_JOB_DONE); 40 75 Nobject = stack[0].Nobject; 41 76 42 for (i = 0; i < Nobject; i++) { 77 /* always allow at least one test */ 78 gettimeofday (&start, (void *) NULL); 79 dtime = 0.0; 80 for (i = 0; (i < Nobject) && (dtime < MaxDelay); i++) { 43 81 job = GetStack (stack, STACK_TOP); 44 82 CheckDoneJob (job); 45 } 46 return (TRUE); 47 } 48 49 int CheckDoneHosts () { 50 51 int i, Nobject; 52 Stack *stack; 53 Host *host; 83 gettimeofday (&stop, (void *) NULL); 84 dtime = DTIME (stop, start); 85 } 86 if (0 && (Nobject > 0)) fprintf (stderr, "checked %d of %d jobs\n", i, Nobject); 87 return (TRUE); 88 } 89 90 int CheckDoneHosts (float MaxDelay) { 91 92 struct timeval start, stop; 93 int i, Nobject; 94 Stack *stack; 95 Host *host; 96 float dtime; 54 97 55 98 stack = GetHostStack (PCONTROL_HOST_DONE); 56 99 Nobject = stack[0].Nobject; 57 100 58 for (i = 0; i < Nobject; i++) { 101 /* always allow at least one test */ 102 gettimeofday (&start, (void *) NULL); 103 dtime = 0.0; 104 for (i = 0; (i < Nobject) && (dtime < MaxDelay); i++) { 59 105 host = GetStack (stack, STACK_TOP); 60 106 CheckDoneHost (host); 61 } 62 return (TRUE); 63 } 64 65 /* this is just a heartbeat check */ 66 int CheckLiveHosts () { 67 68 int i, Nobject; 69 Stack *stack; 70 Host *host; 71 72 stack = GetHostStack (PCONTROL_HOST_IDLE); 73 Nobject = stack[0].Nobject; 74 75 for (i = 0; i < Nobject; i++) { 76 host = GetStack (stack, STACK_TOP); 77 CheckHost (host); 78 } 79 80 stack = GetHostStack (PCONTROL_HOST_BUSY); 81 Nobject = stack[0].Nobject; 82 83 for (i = 0; i < Nobject; i++) { 84 host = GetStack (stack, STACK_TOP); 85 CheckHost (host); 86 } 87 return (TRUE); 88 } 89 90 int CheckDownHosts () { 91 92 int i, Nobject; 93 Stack *stack; 94 Host *host; 95 struct timeval now; 96 float delta; 97 98 gettimeofday (&now, (void *) NULL); 107 gettimeofday (&stop, (void *) NULL); 108 dtime = DTIME (stop, start); 109 } 110 if (0) fprintf (stderr, "checked %d hosts\n", i); 111 return (TRUE); 112 } 113 114 int CheckDownHosts (float MaxDelay) { 115 116 int i, Nobject; 117 Stack *stack; 118 Host *host; 119 struct timeval start, stop; 120 float dtime; 99 121 100 122 stack = GetHostStack (PCONTROL_HOST_DOWN); 101 123 Nobject = stack[0].Nobject; 102 124 103 for (i = 0; i < Nobject; i++) { 104 host = GetStack (stack, STACK_TOP); 105 delta = DTIME (host[0].nexttry, now); 106 if (delta > 0) { 125 /* always allow at least one test */ 126 gettimeofday (&start, (void *) NULL); 127 dtime = 0.0; 128 for (i = 0; (i < Nobject) && (dtime < MaxDelay); i++) { 129 host = GetStack (stack, STACK_TOP); 130 dtime = DTIME (host[0].nexttry, start); 131 if (dtime > 0) { 107 132 PutHost (host, PCONTROL_HOST_DOWN, STACK_BOTTOM); 108 133 } else { 109 134 StartHost (host); 110 135 } 111 } 112 return (TRUE); 113 } 114 115 int CheckIdleHosts () { 116 117 int i, Nobject; 118 Stack *stack; 119 Host *host; 136 gettimeofday (&stop, (void *) NULL); 137 dtime = DTIME (stop, start); 138 } 139 if (0) fprintf (stderr, "checked %d hosts\n", i); 140 return (TRUE); 141 } 142 143 int CheckIdleHosts (float MaxDelay) { 144 145 struct timeval start, stop; 146 int i, Nobject; 147 Stack *stack; 148 Host *host; 149 float dtime; 120 150 121 151 /* check if there are any pending jobs, otherwise skip step */ … … 126 156 Nobject = stack[0].Nobject; 127 157 128 for (i = 0; i < Nobject; i++) { 158 /* always allow at least one test */ 159 gettimeofday (&start, (void *) NULL); 160 dtime = 0.0; 161 for (i = 0; (i < Nobject) && (dtime < MaxDelay); i++) { 129 162 host = GetStack (stack, STACK_TOP); 130 163 CheckIdleHost (host); 131 } 132 return (TRUE); 133 } 164 gettimeofday (&stop, (void *) NULL); 165 dtime = DTIME (stop, start); 166 } 167 if (0) fprintf (stderr, "checked %d hosts\n", i); 168 return (TRUE); 169 } 170 171 /* this is just a heartbeat check */ 172 int CheckLiveHosts (float MaxDelay) { 173 174 struct timeval start, stop; 175 int i, Nobject; 176 Stack *stack; 177 Host *host; 178 float dtime; 179 180 stack = GetHostStack (PCONTROL_HOST_IDLE); 181 Nobject = stack[0].Nobject; 182 183 gettimeofday (&start, (void *) NULL); 184 185 dtime = 0.0; 186 for (i = 0; (i < Nobject) && (dtime < MaxDelay); i++) { 187 host = GetStack (stack, STACK_TOP); 188 CheckHost (host); 189 gettimeofday (&stop, (void *) NULL); 190 dtime = DTIME (stop, start); 191 } 192 if (0) fprintf (stderr, "checked %d idle hosts\n", i); 193 194 stack = GetHostStack (PCONTROL_HOST_BUSY); 195 Nobject = stack[0].Nobject; 196 197 dtime = 0.0; 198 for (i = 0; (i < Nobject) && (dtime < MaxDelay); i++) { 199 host = GetStack (stack, STACK_TOP); 200 CheckHost (host); 201 gettimeofday (&stop, (void *) NULL); 202 dtime = DTIME (stop, start); 203 } 204 if (0) fprintf (stderr, "checked %d busy hosts\n", i); 205 return (TRUE); 206 } 207 208 /* 209 210 gettimeofday (&stop, (void *) NULL); 211 dtime = DTIME (stop, start); 212 if (VerboseMode()) fprintf (stderr, "check 4: %f seconds\n", dtime); 213 214 gettimeofday (&start, (void *) NULL); 215 */ 216 217 /** All of the CheckFooBar entries cycle though their respective queues, popping from the top and 218 pushing to the bottom. if we stop before the loop is done there is no tendancy for bias because 219 we continue where we left off next round **/
Note:
See TracChangeset
for help on using the changeset viewer.
