int schedule_jobs(void) { int cmd; static int first_time = 1; if (first_time) cmd = SCH_SCHEDULE_FIRST; else cmd = svr_do_schedule; /*listener_command = cmd;*/ svr_do_schedule = SCH_SCHEDULE_NULL; if (scheduler_sock == -1) { scheduler_jobct = 0; if ((scheduler_sock = contact_sched(cmd)) < 0) { return(-1); } first_time = 0; return(0); } return(1); } /* END schedule_jobs() */
int action_sched_partition(attribute *pattr, void *pobj, int actmode) { pbs_sched* psched; pbs_sched* pin_sched; attribute *part_attr; int i; int k; if (pobj == dflt_scheduler) return PBSE_SCHED_OP_NOT_PERMITTED; pin_sched = (pbs_sched *) pobj; for (i = 0; i < pattr->at_val.at_arst->as_usedptr; ++i) { if (pattr->at_val.at_arst->as_string[i] == NULL) continue; for (psched = (pbs_sched*) GET_NEXT(svr_allscheds); psched; psched = (pbs_sched*) GET_NEXT(psched->sc_link)) { if (psched == pobj) { continue; } part_attr = &(psched->sch_attr[SCHED_ATR_partition]); if (part_attr->at_flags & ATR_VFLAG_SET) { for (k = 0; k < part_attr->at_val.at_arst->as_usedptr; k++) { if ((part_attr->at_val.at_arst->as_string[k] != NULL) && (!strcmp(pattr->at_val.at_arst->as_string[i], part_attr->at_val.at_arst->as_string[k]))) return PBSE_SCHED_PARTITION_ALREADY_EXISTS; } } } } if (actmode != ATR_ACTION_RECOV) (void)contact_sched(SCH_ATTRS_CONFIGURE, NULL, pin_sched->pbs_scheduler_addr, pin_sched->pbs_scheduler_port); return PBSE_NONE; }
/** * @brief * action routine for the sched's "sched_log" attribute * * @param[in] pattr - attribute being set * @param[in] pobj - Object on which attribute is being set * @param[in] actmode - the mode of setting, recovery or just alter * * @return error code * @retval PBSE_NONE - Success * @retval !PBSE_NONE - Failure * */ int action_sched_log(attribute *pattr, void *pobj, int actmode) { pbs_sched* psched; psched = (pbs_sched *) pobj; if (pobj == dflt_scheduler) return PBSE_SCHED_OP_NOT_PERMITTED; if (actmode == ATR_ACTION_NEW || actmode == ATR_ACTION_ALTER || actmode == ATR_ACTION_RECOV) { psched = (pbs_sched*) GET_NEXT(svr_allscheds); while (psched != NULL) { if (psched->sch_attr[SCHED_ATR_sched_log].at_flags & ATR_VFLAG_SET) { if (!strcmp(psched->sch_attr[SCHED_ATR_sched_log].at_val.at_str, pattr->at_val.at_str)) { if (psched != pobj) { return PBSE_SCHED_LOG_EXIST; } else break; } } psched = (pbs_sched*) GET_NEXT(psched->sc_link); } } if (actmode != ATR_ACTION_RECOV) (void)contact_sched(SCH_ATTRS_CONFIGURE, NULL, psched->pbs_scheduler_addr, psched->pbs_scheduler_port); return PBSE_NONE; }
void req_shutdown(struct batch_request *preq) { int type; extern int shutdown_who; if ((preq->rq_perm & (ATR_DFLAG_MGWR | ATR_DFLAG_MGRD | ATR_DFLAG_OPRD | ATR_DFLAG_OPWR)) == 0) { req_reject(PBSE_PERM, 0, preq); return; } (void)sprintf(log_buffer, msg_shutdown_op, preq->rq_user, preq->rq_host); log_event(PBSEVENT_SYSTEM|PBSEVENT_ADMIN|PBSEVENT_DEBUG, PBS_EVENTCLASS_SERVER, LOG_NOTICE, msg_daemonname, log_buffer); pshutdown_request = preq; /* save for reply from main() when done */ type = preq->rq_ind.rq_shutdown; shutdown_who = type & SHUT_WHO_MASK; if (shutdown_who & SHUT_WHO_SECDONLY) (void)failover_send_shutdown(FAILOVER_SecdShutdown); if (shutdown_who & SHUT_WHO_SCHED) (void)contact_sched(SCH_QUIT, NULL); /* tell scheduler to quit */ if (shutdown_who & SHUT_WHO_SECDONLY) { reply_ack(preq); return; /* do NOT shutdown this Server */ } /* Moms are told to shutdown in pbsd_main.c after main loop */ svr_shutdown(type); return; }