Changeset 8424 for trunk/Ohana/src/opihi/pcontrol/CheckSystem.c
- Timestamp:
- Aug 18, 2006, 1:44:51 PM (20 years ago)
- File:
-
- 1 edited
-
trunk/Ohana/src/opihi/pcontrol/CheckSystem.c (modified) (12 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/opihi/pcontrol/CheckSystem.c
r8296 r8424 1 1 # include "pcontrol.h" 2 # define DEBUG 0 2 3 3 4 static struct timeval lastlive = {0, 0}; 5 static int RunSystem = FALSE; 6 7 int SetRunSystem (int state) { 8 int oldstate; 9 oldstate = RunSystem; 10 RunSystem = state; 11 return oldstate; 12 } 4 13 5 14 int CheckSystem () { … … 29 38 } 30 39 31 if ( 0) {40 if (DEBUG) { 32 41 Stack *stack; 33 42 int Nidle, Ndown, Nbusy; … … 44 53 } 45 54 55 void *CheckSystem_Threaded (void *data) { 56 57 struct timeval now; 58 float dtime; 59 60 gprintInit (); 61 62 while (1) { 63 // stop here if the user-thread requests (no objects in flight) 64 TestCheckPoint (); 65 66 // don't run the system checks if RunSystem is FALSE 67 if (!RunSystem) { 68 usleep (50000); 69 continue; 70 } 71 72 // we want to give each block a maximum allowed time 73 CheckIdleHosts(0.020); /* submit a new job */ 74 75 CheckBusyJobs(0.020); /* get job status */ 76 CheckDoneJobs(0.020); /* harvest job stdout/stderr */ 77 CheckKillJobs(0.020); /* harvest job stdout/stderr */ 78 79 CheckDoneHosts(0.020); /* reset the host */ 80 CheckDownHosts(0.100); /* launch the host */ 81 82 /* always allow at least one test */ 83 /* most tests require about 2ms per host. 84 CheckDoneJobs must depend on the size of the output buffer */ 85 86 gettimeofday (&now, (void *) NULL); 87 dtime = DTIME (now, lastlive); 88 if (dtime > 1.0) { 89 CheckLiveHosts(0.040); 90 lastlive = now; 91 } 92 93 if (DEBUG) { 94 Stack *stack; 95 int Nidle, Ndown, Nbusy; 96 stack = GetHostStack (PCONTROL_HOST_IDLE); 97 Nidle = stack[0].Nobject; 98 stack = GetHostStack (PCONTROL_HOST_DOWN); 99 Ndown = stack[0].Nobject; 100 stack = GetHostStack (PCONTROL_HOST_BUSY); 101 Nbusy = stack[0].Nobject; 102 gprint (GP_ERR, "busy, idle, down: %2d %2d %2d\n", Nbusy, Nidle, Ndown); 103 } 104 } 105 return (NULL); 106 } 107 46 108 int CheckBusyJobs (float MaxDelay) { 47 109 48 110 struct timeval start, stop; 49 111 int i, Nobject; 50 Stack *stack; 112 Stack *hoststack; 113 Stack *jobstack; 51 114 Job *job; 115 Host *host; 52 116 float dtime; 53 117 … … 65 129 dtime = 0.0; 66 130 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? */ 131 // pull both job and host from their stacks 69 132 LockStack (hoststack); 70 133 job = PullStackByLocation (jobstack, STACK_TOP); … … 73 136 break; 74 137 } 75 host = RemoveStackByID (hoststack, job[0].host[0].HostID); 138 host = (Host *) job[0].host; 139 RemoveStackByID (hoststack, host[0].HostID); 76 140 UnlockStack (hoststack); 77 141 78 CheckBusyJob (job );79 gettimeofday (&stop, (void *) NULL); 80 dtime = DTIME (stop, start); 81 } 82 if ( 0&& (Nobject > 0)) gprint (GP_ERR, "checked %d of %d jobs\n", i, Nobject);142 CheckBusyJob (job, host); 143 gettimeofday (&stop, (void *) NULL); 144 dtime = DTIME (stop, start); 145 } 146 if (DEBUG && (Nobject > 0)) gprint (GP_ERR, "checked %d of %d jobs\n", i, Nobject); 83 147 return (TRUE); 84 148 } … … 88 152 struct timeval start, stop; 89 153 int i, Nobject; 90 Stack *stack; 154 Stack *hoststack; 155 Stack *jobstack; 91 156 Job *job; 92 float dtime; 93 94 /* Loop through objects on the stack, no more than once. see note above */ 95 stack = GetJobStack (PCONTROL_JOB_DONE); 96 Nobject = stack[0].Nobject; 97 98 /* always allow at least one test */ 99 gettimeofday (&start, (void *) NULL); 100 dtime = 0.0; 101 for (i = 0; (i < Nobject) && (dtime < MaxDelay); i++) { 102 job = PullStackByLocation (stack, STACK_TOP); 103 if (job == NULL) break; 104 CheckDoneJob (job); 105 gettimeofday (&stop, (void *) NULL); 106 dtime = DTIME (stop, start); 107 } 108 if (0 && (Nobject > 0)) gprint (GP_ERR, "checked %d of %d jobs\n", i, Nobject); 157 Host *host; 158 float dtime; 159 160 /* Loop through objects on the stack, no more than once. see note above */ 161 hoststack = GetHostStack (PCONTROL_HOST_BUSY); 162 jobstack = GetJobStack (PCONTROL_JOB_DONE); 163 Nobject = jobstack[0].Nobject; 164 165 /* always allow at least one test */ 166 gettimeofday (&start, (void *) NULL); 167 dtime = 0.0; 168 for (i = 0; (i < Nobject) && (dtime < MaxDelay); i++) { 169 LockStack (hoststack); 170 job = PullStackByLocation (jobstack, STACK_TOP); 171 if (job == NULL) { 172 UnlockStack (hoststack); 173 break; 174 } 175 host = (Host *) job[0].host; 176 RemoveStackByID (hoststack, host[0].HostID); 177 UnlockStack (hoststack); 178 179 CheckDoneJob (job, host); 180 gettimeofday (&stop, (void *) NULL); 181 dtime = DTIME (stop, start); 182 } 183 if (DEBUG && (Nobject > 0)) gprint (GP_ERR, "checked %d of %d jobs\n", i, Nobject); 109 184 return (TRUE); 110 185 } … … 114 189 struct timeval start, stop; 115 190 int i, Nobject; 116 Stack *stack; 191 Stack *hoststack; 192 Stack *jobstack; 117 193 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); 194 Host *host; 195 float dtime; 196 197 /* Loop through objects on the stack, no more than once. see note above */ 198 hoststack = GetHostStack (PCONTROL_HOST_BUSY); 199 jobstack = GetJobStack (PCONTROL_JOB_KILL); 200 Nobject = jobstack[0].Nobject; 201 202 /* always allow at least one test */ 203 gettimeofday (&start, (void *) NULL); 204 dtime = 0.0; 205 for (i = 0; (i < Nobject) && (dtime < MaxDelay); i++) { 206 LockStack (hoststack); 207 job = PullStackByLocation (jobstack, STACK_TOP); 208 if (job == NULL) { 209 UnlockStack (hoststack); 210 break; 211 } 212 host = (Host *) job[0].host; 213 RemoveStackByID (hoststack, host[0].HostID); 214 UnlockStack (hoststack); 215 216 KillJob (job, host); 217 gettimeofday (&stop, (void *) NULL); 218 dtime = DTIME (stop, start); 219 } 220 if (DEBUG && (Nobject > 0)) gprint (GP_ERR, "checked %d of %d jobs\n", i, Nobject); 135 221 return (TRUE); 136 222 } … … 158 244 dtime = DTIME (stop, start); 159 245 } 160 if ( 0) gprint (GP_ERR, "checked %d hosts\n", i);246 if (DEBUG) gprint (GP_ERR, "checked %d hosts\n", i); 161 247 return (TRUE); 162 248 } … … 180 266 host = PullStackByLocation (stack, STACK_TOP); 181 267 if (host == NULL) break; 268 if (host[0].markoff) { 269 host[0].markoff = FALSE; 270 OffHost (host); 271 return (TRUE); 272 } 182 273 dtime = DTIME (host[0].nexttry, start); 183 274 if (dtime > 0) { … … 189 280 dtime = DTIME (stop, start); 190 281 } 191 if ( 0) gprint (GP_ERR, "checked %d hosts\n", i);282 if (DEBUG) gprint (GP_ERR, "checked %d hosts\n", i); 192 283 return (TRUE); 193 284 } … … 219 310 dtime = DTIME (stop, start); 220 311 } 221 if ( 0) gprint (GP_ERR, "checked %d hosts\n", i);222 return (TRUE); 223 } 224 225 /* this is just a heartbeat check */312 if (DEBUG) gprint (GP_ERR, "checked %d hosts\n", i); 313 return (TRUE); 314 } 315 316 /* this is just a heartbeat check (only IDLE hosts) */ 226 317 int CheckLiveHosts (float MaxDelay) { 227 318 … … 246 337 dtime = DTIME (stop, start); 247 338 } 248 if (0) gprint (GP_ERR, "checked %d idle hosts\n", i); 249 250 /* Loop through objects on the stack, no more than once. see note above */ 251 stack = GetHostStack (PCONTROL_HOST_BUSY); 252 Nobject = stack[0].Nobject; 253 254 dtime = 0.0; 255 for (i = 0; (i < Nobject) && (dtime < MaxDelay); i++) { 256 host = PullStackByLocation (stack, STACK_TOP); 257 if (host == NULL) break; 258 CheckHost (host); 259 gettimeofday (&stop, (void *) NULL); 260 dtime = DTIME (stop, start); 261 } 262 if (0) gprint (GP_ERR, "checked %d busy hosts\n", i); 339 if (DEBUG) gprint (GP_ERR, "checked %d idle hosts\n", i); 263 340 return (TRUE); 264 341 }
Note:
See TracChangeset
for help on using the changeset viewer.
