int default_router(job *jobp, struct pbs_queue *qp, long retry_time) { struct array_strings *dest_attr = NULL; char *destination; int last; if (qp->qu_attr[(int)QR_ATR_RouteDestin].at_flags & ATR_VFLAG_SET) { dest_attr = qp->qu_attr[(int)QR_ATR_RouteDestin].at_val.at_arst; last = dest_attr->as_usedptr; } else last = 0; /* loop through all possible destinations */ while (1) { if (jobp->ji_lastdest >= last) { jobp->ji_lastdest = 0; /* have tried all */ if (jobp->ji_retryok == 0) { log_event(PBSEVENT_JOB, PBS_EVENTCLASS_JOB, LOG_DEBUG, jobp->ji_qs.ji_jobid, msg_routebad); return (PBSE_ROUTEREJ); } else { /* set time to retry job */ jobp->ji_qs.ji_un.ji_routet.ji_rteretry = retry_time; jobp->ji_retryok = 0; return (0); } } destination = dest_attr->as_string[jobp->ji_lastdest++]; if (is_bad_dest(jobp, destination)) continue; switch (svr_movejob(jobp, destination, NULL)) { case -1: /* permanent failure */ add_dest(jobp); break; case 0: /* worked */ case 2: /* deferred */ return (0); case 1: /* failed, but try destination again */ jobp->ji_retryok = 1; break; } } }
int default_router( job *jobp, struct pbs_queue *qp, long retry_time) { struct array_strings *dest_attr = NULL; char *destination; int last; int local_errno = 0; char log_buf[LOCAL_LOG_BUF_SIZE]; if (LOGLEVEL >= 7) { sprintf(log_buf, "%s", jobp->ji_qs.ji_jobid); LOG_EVENT(PBSEVENT_JOB, PBS_EVENTCLASS_JOB, __func__, log_buf); } if (qp->qu_attr[QR_ATR_RouteDestin].at_flags & ATR_VFLAG_SET) { dest_attr = qp->qu_attr[QR_ATR_RouteDestin].at_val.at_arst; last = dest_attr->as_usedptr; } else { last = 0; } /* loop through all possible destinations */ jobp->ji_retryok = 0; while (1) { if (jobp->ji_lastdest >= last) { jobp->ji_lastdest = 0; /* have tried all */ if (jobp->ji_retryok == 0) { log_event( PBSEVENT_JOB, PBS_EVENTCLASS_JOB, jobp->ji_qs.ji_jobid, pbse_to_txt(PBSE_ROUTEREJ)); return(PBSE_ROUTEREJ); } else { /* set time to retry job */ jobp->ji_qs.ji_un.ji_routet.ji_rteretry = retry_time; return(0); } } destination = dest_attr->as_string[jobp->ji_lastdest++]; if (is_bad_dest(jobp, destination)) continue; switch (svr_movejob(jobp, destination, &local_errno, NULL, TRUE)) { case ROUTE_PERM_FAILURE: /* permanent failure */ add_dest(jobp); break; case ROUTE_SUCCESS: /* worked */ case ROUTE_DEFERRED: /* deferred */ return(0); /*NOTREACHED*/ break; case ROUTE_RETRY: /* failed, but try destination again */ jobp->ji_retryok = 1; break; } } return(-1); } /* END default_router() */