本文整理汇总了C++中req_reject函数的典型用法代码示例。如果您正苦于以下问题:C++ req_reject函数的具体用法?C++ req_reject怎么用?C++ req_reject使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了req_reject函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: process_gpu_request_reply
static void process_gpu_request_reply(
struct work_task *pwt)
{
char *id = "process_gpu_request_reply";
struct batch_request *preq;
svr_disconnect(pwt->wt_event); /* close connection to MOM */
preq = pwt->wt_parm1;
preq->rq_conn = preq->rq_orgconn; /* restore client socket */
if (preq->rq_reply.brp_code != 0)
{
sprintf(log_buffer,
"MOM failed on GPU request, rc = %d",
preq->rq_reply.brp_code);
log_err(errno, id, log_buffer);
req_reject(preq->rq_reply.brp_code, 0, preq, NULL, log_buffer);
}
else
{
/* record that MOM changed gpu mode */
if (LOGLEVEL >= 7)
{
sprintf(
log_buffer,
"GPU control request completed for node %s gpuid %s mode %d reset_perm %d reset_vol %d",
preq->rq_ind.rq_gpuctrl.rq_momnode,
preq->rq_ind.rq_gpuctrl.rq_gpuid,
preq->rq_ind.rq_gpuctrl.rq_gpumode,
preq->rq_ind.rq_gpuctrl.rq_reset_perm,
preq->rq_ind.rq_gpuctrl.rq_reset_vol);
log_ext(-1, id, log_buffer, LOG_INFO);
}
reply_ack(preq);
}
}
开发者ID:Johnlihj,项目名称:torque,代码行数:42,代码来源:req_gpuctrl.c
示例2: req_jobcredential
void req_jobcredential(
struct batch_request *preq) /* ptr to the decoded request */
{
job *pj;
pj = locate_new_job(preq->rq_conn, NULL);
if (pj == NULL)
{
req_reject(PBSE_IVALREQ, 0, preq, NULL, NULL);
return;
}
reply_ack(preq);
return;
} /* END req_jobcredential() */
开发者ID:xsunsmile,项目名称:lrm-torque-clone,代码行数:20,代码来源:req_quejob.c
示例3: process_gpu_request_reply
/*
* process_gpu_request_reply
* called when a gpu change request was sent to MOM and the answer
* is received. Completes the gpu request.
*/
void process_gpu_request_reply(
batch_request *preq)
{
char log_buf[LOCAL_LOG_BUF_SIZE];
if (preq == NULL)
return;
preq->rq_conn = preq->rq_orgconn; /* restore client socket */
if (preq->rq_reply.brp_code != 0)
{
sprintf(log_buf,
"MOM failed on GPU request, rc = %d",
preq->rq_reply.brp_code);
log_err(errno, __func__, log_buf);
req_reject(preq->rq_reply.brp_code, 0, preq, NULL, log_buf);
}
else
{
/* record that MOM changed gpu mode */
if (LOGLEVEL >= 7)
{
sprintf(
log_buf,
"GPU control request completed for node %s gpuid %s mode %d reset_perm %d reset_vol %d",
preq->rq_ind.rq_gpuctrl.rq_momnode,
preq->rq_ind.rq_gpuctrl.rq_gpuid,
preq->rq_ind.rq_gpuctrl.rq_gpumode,
preq->rq_ind.rq_gpuctrl.rq_reset_perm,
preq->rq_ind.rq_gpuctrl.rq_reset_vol);
log_ext(-1, __func__, log_buf, LOG_INFO);
}
reply_ack(preq);
}
} /* END process_gpu_request_reply() */
开发者ID:singleman,项目名称:torque,代码行数:46,代码来源:req_gpuctrl.c
示例4: get_UID
int get_UID(
int s,
char *munge_buf,
struct batch_request *preq)
{
char *ptr;
char user_name[PBS_MAXUSER];
int i = 0;
ptr = strstr(munge_buf, "UID:");
if (!ptr)
{
req_reject(PBSE_SYSTEM, 0, preq, NULL, "could not read unmunge data user");
return(-1);
}
ptr = strchr(ptr, ':');
ptr++;
while (*ptr == SPACE)
{
ptr++;
}
memset(user_name, 0, sizeof(user_name));
while ((*ptr != SPACE) &&
(!isspace(*ptr)) &&
(i < (int)sizeof(user_name)))
{
user_name[i++] = *ptr;
ptr++;
}
strncpy(conn_credent[s].username, user_name, sizeof(conn_credent[s].username) - 1);
conn_credent[s].username[sizeof(conn_credent[s].username) - 1] = 0;
return(PBSE_NONE);
} /* END get_UID() */
开发者ID:actorquedeveloper,项目名称:torque,代码行数:41,代码来源:req_getcred.c
示例5: post_message_req
void post_message_req(
batch_request *preq)
{
char log_buf[LOCAL_LOG_BUF_SIZE];
/* preq has been hadnled previously */
if (preq == NULL)
return;
preq->rq_conn = preq->rq_orgconn; /* restore socket to client */
sprintf(log_buf, msg_messagejob, preq->rq_reply.brp_code);
log_event(PBSEVENT_JOB, PBS_EVENTCLASS_JOB, preq->rq_ind.rq_message.rq_jid, log_buf);
if (preq->rq_reply.brp_code)
req_reject(preq->rq_reply.brp_code, 0, preq, NULL, NULL);
else
reply_ack(preq);
} /* END post_message_req() */
开发者ID:actorquedeveloper,项目名称:torque,代码行数:21,代码来源:req_message.c
示例6: svr_find_job
void *modify_job_work(
batch_request *vp) /* I */
{
job *pjob;
svrattrl *plist;
int checkpoint_req = FALSE;
batch_request *preq = (struct batch_request *)vp;
pjob = svr_find_job(preq->rq_ind.rq_modify.rq_objname, FALSE);
if (pjob == NULL)
{
req_reject(PBSE_JOBNOTFOUND, 0, preq, NULL, "Job unexpectedly deleted");
return(NULL);
}
mutex_mgr job_mutex(pjob->ji_mutex, true);
/* pbs_mom sets the extend string to trigger copying of checkpoint files */
if (preq->rq_extend != NULL)
{
if (strcmp(preq->rq_extend,CHECKPOINTHOLD) == 0)
{
checkpoint_req = CHK_HOLD;
}
else if (strcmp(preq->rq_extend,CHECKPOINTCONT) == 0)
{
checkpoint_req = CHK_CONT;
}
}
plist = (svrattrl *)GET_NEXT(preq->rq_ind.rq_modify.rq_attr);
/* modify_job will free preq and respond to it */
modify_job((void **)&pjob, plist, preq, checkpoint_req, 0);
return(NULL);
} /* END modify_job_work() */
开发者ID:jbarber,项目名称:torque,代码行数:40,代码来源:req_modify.c
示例7: process_checkpoint_reply
static void process_checkpoint_reply(
struct work_task *pwt)
{
job *pjob;
struct batch_request *preq;
svr_disconnect(pwt->wt_event); /* close connection to MOM */
preq = get_remove_batch_request(pwt->wt_parm1);
free(pwt->wt_mutex);
free(pwt);
/* preq handled previously */
if (preq == NULL)
return;
preq->rq_conn = preq->rq_orgconn; /* restore client socket */
if ((pjob = svr_find_job(preq->rq_ind.rq_manager.rq_objname, FALSE)) == NULL)
{
log_event(PBSEVENT_DEBUG, PBS_EVENTCLASS_JOB,
preq->rq_ind.rq_manager.rq_objname,
msg_postmomnojob);
req_reject(PBSE_UNKJOBID, 0, preq, NULL, msg_postmomnojob);
}
else
{
/* record that MOM has a checkpoint file */
account_record(PBS_ACCT_CHKPNT, pjob, "Checkpointed"); /* note in accounting file */
reply_ack(preq);
unlock_ji_mutex(pjob, __func__, "1", LOGLEVEL);
}
} /* END process_checkpoint_reply() */
开发者ID:dhill12,项目名称:test,代码行数:39,代码来源:req_holdjob.c
示例8: req_shutdown
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;
}
开发者ID:A9-William,项目名称:pbspro,代码行数:36,代码来源:req_shutdown.c
示例9: req_stat_sched
void
req_stat_sched(struct batch_request *preq)
{
svrattrl *pal;
struct batch_reply *preply;
int rc = 0;
pbs_sched *psched;
/* allocate a reply structure and a status sub-structure */
preply = &preq->rq_reply;
preply->brp_choice = BATCH_REPLY_CHOICE_Status;
CLEAR_HEAD(preply->brp_un.brp_status);
for (psched = (pbs_sched *) GET_NEXT(svr_allscheds);
(psched != NULL);
psched = (pbs_sched *) GET_NEXT(psched->sc_link)
) {
rc = status_sched(psched, preq, &preply->brp_un.brp_status);
if (rc != 0) {
break;
}
}
if (!rc) {
(void)reply_send(preq);
} else {
if (rc != PBSE_NOATTR)
req_reject(rc, 0, preq);
else {
pal = (svrattrl *)GET_NEXT(preq->rq_ind.
rq_status.rq_attr);
reply_badattr(rc, bad, pal, preq);
}
}
}
开发者ID:altair4,项目名称:pbspro,代码行数:36,代码来源:req_stat.c
示例10: handle_single_delete
int handle_single_delete(
batch_request *preq,
batch_request *preq_tmp,
char *Msg)
{
char *jobid = preq->rq_ind.rq_delete.rq_objname;
job *pjob = svr_find_job(jobid, FALSE);
if (pjob == NULL)
{
log_event(PBSEVENT_DEBUG,PBS_EVENTCLASS_JOB,jobid,pbse_to_txt(PBSE_UNKJOBID));
req_reject(PBSE_UNKJOBID, 0, preq, NULL, "cannot locate job");
}
else
{
std::string jobID = pjob->ji_qs.ji_jobid;
unlock_ji_mutex(pjob, __func__, NULL, LOGLEVEL);
removeBeforeAnyDependencies(jobID.c_str());
/* send the asynchronous reply if needed */
if (preq_tmp != NULL)
{
reply_ack(preq_tmp);
preq->rq_noreply = TRUE; /* set for no more replies */
enqueue_threadpool_request(single_delete_work, preq, async_pool);
}
else
single_delete_work(preq);
}
return(PBSE_NONE);
} /* END handle_single_delete() */
开发者ID:nbentoumi,项目名称:torque,代码行数:36,代码来源:req_delete.c
示例11: req_connect
void req_connect(
struct batch_request *preq)
{
int sock = preq->rq_conn;
unsigned short conn_authen;
/* Called from one location inside a lock */
pthread_mutex_lock(svr_conn[sock].cn_mutex);
conn_authen = svr_conn[sock].cn_authen;
pthread_mutex_unlock(svr_conn[sock].cn_mutex);
if (conn_authen == 0)
{
reply_ack(preq);
}
else
{
req_reject(PBSE_BADCRED, 0, preq, NULL, "Connection not authorized");
}
return;
} /* END req_connect() */
开发者ID:actorquedeveloper,项目名称:torque,代码行数:24,代码来源:req_getcred.c
示例12: handle_single_delete
int handle_single_delete(
struct batch_request *preq,
struct batch_request *preq_tmp,
char *Msg)
{
int rc= -1;
char *jobid = preq->rq_ind.rq_delete.rq_objname;
job *pjob = svr_find_job(jobid, FALSE);
if (pjob == NULL)
{
log_event(PBSEVENT_DEBUG,PBS_EVENTCLASS_JOB,jobid,pbse_to_txt(PBSE_UNKJOBID));
req_reject(PBSE_UNKJOBID, 0, preq, NULL, "cannot locate job");
}
else
{
if (preq_tmp != NULL)
{
reply_ack(preq_tmp);
preq->rq_noreply = TRUE; /* set for no more replies */
}
/* mutex is freed below */
if ((rc = forced_jobpurge(pjob, preq)) == PBSE_NONE)
rc = execute_job_delete(pjob, Msg, preq);
}
if ((rc == PBSE_NONE) ||
(rc == PURGE_SUCCESS))
reply_ack(preq);
return(PBSE_NONE);
} /* END handle_single_delete() */
开发者ID:dhill12,项目名称:test,代码行数:36,代码来源:req_delete.c
示例13: req_stat_job_step2
static void req_stat_job_step2(
struct stat_cntl *cntl) /* I/O (free'd on return) */
{
svrattrl *pal;
job *pjob = NULL;
struct batch_request *preq;
struct batch_reply *preply;
int rc = 0;
enum TJobStatTypeEnum type;
pbs_queue *pque = NULL;
int exec_only = 0;
int bad = 0;
long DTime; /* delta time - only report full pbs_attribute list if J->MTime > DTime */
static svrattrl *dpal = NULL;
int job_array_index = 0;
job_array *pa = NULL;
char log_buf[LOCAL_LOG_BUF_SIZE];
all_jobs_iterator *iter;
preq = cntl->sc_origrq;
type = (enum TJobStatTypeEnum)cntl->sc_type;
preply = &preq->rq_reply;
/* See pbs_server_attributes(1B) for details on "poll_jobs" behaviour */
if (dpal == NULL)
{
/* build 'delta' pbs_attribute list */
svrattrl *tpal;
tlist_head dalist;
int aindex;
int atrlist[] =
{
JOB_ATR_jobname,
JOB_ATR_resc_used,
JOB_ATR_LAST
};
CLEAR_LINK(dalist);
for (aindex = 0;atrlist[aindex] != JOB_ATR_LAST;aindex++)
{
if ((tpal = attrlist_create("", "", 23)) == NULL)
{
return;
}
tpal->al_valln = atrlist[aindex];
if (dpal == NULL)
dpal = tpal;
append_link(&dalist, &tpal->al_link, tpal);
}
} /* END if (dpal == NULL) */
if (type == tjstArray)
{
pa = get_array(preq->rq_ind.rq_status.rq_id);
if (pa == NULL)
{
req_reject(PBSE_UNKARRAYID, 0, preq, NULL, "unable to find array");
return;
}
}
{
all_jobs *ajptr = NULL;
if (type == tjstQueue)
ajptr = cntl->sc_pque->qu_jobs;
else if (type == tjstSummarizeArraysQueue)
ajptr = cntl->sc_pque->qu_jobs_array_sum;
else if (type == tjstSummarizeArraysServer)
ajptr = &array_summary;
else
ajptr = &alljobs;
ajptr->lock();
iter = ajptr->get_iterator();
ajptr->unlock();
}
/*
* now ready for part 3, building the status reply,
* loop through again
*/
//.........这里部分代码省略.........
开发者ID:craigprescott,项目名称:torque,代码行数:101,代码来源:req_stat.c
示例14: execute_job_delete
int execute_job_delete(
job *pjob, /* M */
char *Msg, /* I */
struct batch_request *preq) /* I */
{
struct work_task *pwtnew;
int rc;
char *sigt = "SIGTERM";
int has_mutex = TRUE;
char log_buf[LOCAL_LOG_BUF_SIZE];
time_t time_now = time(NULL);
long force_cancel = FALSE;
long array_compatible = FALSE;
chk_job_req_permissions(&pjob,preq);
if (pjob == NULL)
{
/* preq is rejected in chk_job_req_permissions here */
return(-1);
}
if (pjob->ji_qs.ji_state == JOB_STATE_TRANSIT)
{
/* see note in req_delete - not sure this is possible still,
* but the deleted code is irrelevant now. I will leave this
* part --dbeer */
unlock_ji_mutex(pjob, __func__, "1", LOGLEVEL);
return(-1);
}
if (pjob->ji_qs.ji_substate == JOB_SUBSTATE_PRERUN ||
pjob->ji_qs.ji_substate == JOB_SUBSTATE_RERUN ||
pjob->ji_qs.ji_substate == JOB_SUBSTATE_RERUN1 ||
pjob->ji_qs.ji_substate == JOB_SUBSTATE_RERUN2 ||
pjob->ji_qs.ji_substate == JOB_SUBSTATE_RERUN3 )
{
/* If JOB_SUBSTATE_PRERUN being sent to MOM, wait till she gets it going */
/* retry in one second */
/* If JOB_SUBSTATE_RERUN, RERUN1, RERUN2 or RERUN3 the
job is being requeued. Wait until finished */
static time_t cycle_check_when = 0;
static char cycle_check_jid[PBS_MAXSVRJOBID + 1];
if (cycle_check_when != 0)
{
if (!strcmp(pjob->ji_qs.ji_jobid, cycle_check_jid) &&
(time_now - cycle_check_when > 10))
{
/* state not updated after 10 seconds */
/* did the mom ever get it? delete it anyways... */
cycle_check_jid[0] = '\0';
cycle_check_when = 0;
goto jump;
}
if (time_now - cycle_check_when > 20)
{
/* give up after 20 seconds */
cycle_check_jid[0] = '\0';
cycle_check_when = 0;
}
} /* END if (cycle_check_when != 0) */
if (cycle_check_when == 0)
{
/* new PRERUN job located */
cycle_check_when = time_now;
strcpy(cycle_check_jid, pjob->ji_qs.ji_jobid);
}
sprintf(log_buf, "job cannot be deleted, state=PRERUN, requeuing delete request");
log_event(PBSEVENT_JOB,PBS_EVENTCLASS_JOB,pjob->ji_qs.ji_jobid,log_buf);
pwtnew = set_task(WORK_Timed,time_now + 1,post_delete_route,preq,FALSE);
unlock_ji_mutex(pjob, __func__, "2", LOGLEVEL);
if (pwtnew == NULL)
{
req_reject(PBSE_SYSTEM, 0, preq, NULL, NULL);
return(-1);
}
else
{
return(ROUTE_DELETE);
}
//.........这里部分代码省略.........
开发者ID:dhill12,项目名称:test,代码行数:101,代码来源:req_delete.c
示例15: handle_delete_all
int handle_delete_all(
struct batch_request *preq,
struct batch_request *preq_tmp,
char *Msg)
{
/* don't use the actual request so we can reply about all of the jobs */
struct batch_request *preq_dup = duplicate_request(preq);
job *pjob;
int iter = -1;
int failed_deletes = 0;
int total_jobs = 0;
int rc = PBSE_NONE;
char tmpLine[MAXLINE];
preq_dup->rq_noreply = TRUE;
if (preq_tmp != NULL)
{
reply_ack(preq_tmp);
preq->rq_noreply = TRUE; /* set for no more replies */
}
while ((pjob = next_job(&alljobs, &iter)) != NULL)
{
if ((rc = forced_jobpurge(pjob, preq_dup)) == PURGE_SUCCESS)
{
continue;
}
if (pjob->ji_qs.ji_state >= JOB_STATE_EXITING)
{
unlock_ji_mutex(pjob, __func__, "1", LOGLEVEL);
continue;
}
total_jobs++;
/* mutex is freed below */
if (rc == PBSE_NONE)
{
if ((rc = execute_job_delete(pjob, Msg, preq_dup)) == PBSE_NONE)
reply_ack(preq_dup);
/* mark this as NULL because it has been freed */
preq_dup = NULL;
}
if (rc != PURGE_SUCCESS)
{
/* duplicate the preq so we don't have a problem with double frees */
preq_dup = duplicate_request(preq);
preq_dup->rq_noreply = TRUE;
if ((rc == MOM_DELETE) ||
(rc == ROUTE_DELETE))
failed_deletes++;
}
}
if (failed_deletes == 0)
{
reply_ack(preq);
/* PURGE SUCCESS means this was qdel -p all. In this case no reply_*()
* functions have been called */
if (rc == PURGE_SUCCESS)
{
free_br(preq_dup);
preq_dup = NULL;
}
}
else
{
snprintf(tmpLine,sizeof(tmpLine),"Deletes failed for %d of %d jobs",
failed_deletes,
total_jobs);
req_reject(PBSE_SYSTEM, 0, preq, NULL, tmpLine);
}
/* preq_dup happens at the end of the loop, so free the extra one if
* it is there */
if (preq_dup != NULL)
free_br(preq_dup);
return(PBSE_NONE);
} /* END handle_delete_all() */
开发者ID:dhill12,项目名称:test,代码行数:90,代码来源:req_delete.c
示例16: finalize_rerunjob
int finalize_rerunjob(
batch_request *preq,
job *pjob,
int rc)
{
int Force;
char log_buf[LOCAL_LOG_BUF_SIZE];
if (pjob == NULL)
return(PBSE_BAD_PARAMETER);
mutex_mgr pjob_mutex = mutex_mgr(pjob->ji_mutex, true);
if (preq->rq_extend && !strncasecmp(preq->rq_extend, RERUNFORCE, strlen(RERUNFORCE)))
Force = 1;
else
Force = 0;
switch (rc)
{
case -1:
/* completed job was requeued */
/* clear out job completion time if there is one */
break;
case 0:
/* requeue request successful */
pjob->ji_qs.ji_substate = JOB_SUBSTATE_RERUN;
break;
case PBSE_SYSTEM: /* This may not be accurate...*/
rc = PBSE_MEM_MALLOC;
snprintf(log_buf, LOCAL_LOG_BUF_SIZE, "Can not allocate memory");
req_reject(rc, 0, preq, NULL, log_buf);
return rc;
break;
default:
if (Force == 0)
{
rc = PBSE_MOMREJECT;
snprintf(log_buf, LOCAL_LOG_BUF_SIZE, "Rejected by mom");
req_reject(rc, 0, preq, NULL, log_buf);
return rc;
}
else
{
int newstate;
int newsubst;
unsigned int dummy;
char *tmp;
if ((cray_enabled == true) &&
(pjob->ji_wattr[JOB_ATR_login_node_id].at_val.at_str != NULL))
tmp = parse_servername(pjob->ji_wattr[JOB_ATR_login_node_id].at_val.at_str, &dummy);
else
tmp = parse_servername(pjob->ji_wattr[JOB_ATR_exec_host].at_val.at_str, &dummy);
/* Cannot communicate with MOM, forcibly requeue job.
This is a relatively disgusting thing to do */
sprintf(log_buf, "rerun req to %s failed (rc=%d), forcibly requeueing job",
tmp, rc);
free(tmp);
log_event(
PBSEVENT_ERROR | PBSEVENT_ADMIN | PBSEVENT_JOB,
PBS_EVENTCLASS_JOB,
pjob->ji_qs.ji_jobid,
log_buf);
log_err(-1, __func__, log_buf);
strcat(log_buf, ", previous output files may be lost");
svr_mailowner(pjob, MAIL_OTHER, MAIL_FORCE, log_buf);
svr_setjobstate(pjob, JOB_STATE_EXITING, JOB_SUBSTATE_RERUN3, FALSE);
rel_resc(pjob); /* free resc assigned to job */
pjob->ji_modified = 1; /* force full job save */
pjob->ji_momhandle = -1;
pjob->ji_qs.ji_svrflags &= ~JOB_SVFLG_StagedIn;
svr_evaljobstate(*pjob, newstate, newsubst, 0);
svr_setjobstate(pjob, newstate, newsubst, FALSE);
}
//.........这里部分代码省略.........
开发者ID:dkoes,项目名称:torque,代码行数:101,代码来源:req_rerun.c
示例17: purge_completed_jobs
void purge_completed_jobs(
struct batch_request *preq) /* I */
{
job *pjob;
char *time_str;
time_t purge_time = 0;
int iter;
char log_buf[LOCAL_LOG_BUF_SIZE];
/* get the time to purge the jobs that completed before */
time_str = preq->rq_extend;
time_str += strlen(PURGECOMP);
purge_time = strtol(time_str,NULL,10);
/*
* Clean unreported capability is only for operators and managers.
* Check if request is authorized
*/
if ((preq->rq_perm & (ATR_DFLAG_OPRD|ATR_DFLAG_OPWR|
ATR_DFLAG_MGRD|ATR_DFLAG_MGWR)) == 0)
{
req_reject(PBSE_PERM,0,preq,NULL,
"must have operator or manager privilege to use -c parameter");
return;
}
reply_ack(preq);
if (LOGLEVEL >= 4)
{
sprintf(log_buf,"Received purge completed jobs command, purge time is %ld (%s)",
(long)purge_time, preq->rq_extend);
log_event(PBSEVENT_SYSTEM, PBS_EVENTCLASS_REQUEST, __func__, log_buf);
}
iter = -1;
while ((pjob = next_job(&alljobs,&iter)) != NULL)
{
if ((pjob->ji_qs.ji_substate == JOB_SUBSTATE_COMPLETE) &&
(pjob->ji_wattr[JOB_ATR_comp_time].at_val.at_long <= purge_time) &&
((pjob->ji_wattr[JOB_ATR_reported].at_flags & ATR_VFLAG_SET) != 0) &&
(pjob->ji_wattr[JOB_ATR_reported].at_val.at_long == 0))
{
if (LOGLEVEL >= 4)
{
sprintf(log_buf,"Reported job is COMPLETED (%ld), setting reported to TRUE",
pjob->ji_wattr[JOB_ATR_comp_time].at_val.at_long);
log_event(PBSEVENT_JOB,PBS_EVENTCLASS_JOB,pjob->ji_qs.ji_jobid,log_buf);
}
pjob->ji_wattr[JOB_ATR_reported].at_val.at_long = 1;
pjob->ji_wattr[JOB_ATR_reported].at_flags = ATR_VFLAG_SET | ATR_VFLAG_MODIFY;
job_save(pjob, SAVEJOB_FULL, 0);
}
unlock_ji_mutex(pjob, __func__, "1", LOGLEVEL);
}
return;
} /* END purge_completed_jobs() */
开发者ID:dhill12,项目名称:test,代码行数:68,代码来源:req_delete.c
示例18: delay_and_send_sig_kill
void delay_and_send_sig_kill(
batch_request *preq_sig)
{
int delay = 0;
job *pjob;
pbs_queue *pque;
batch_request *preq_clt = NULL; /* original client request */
int rc;
time_t time_now = time(NULL);
char log_buf[LOCAL_LOG_BUF_SIZE];
if (preq_sig == NULL)
return;
rc = preq_sig->rq_reply.brp_code;
if (preq_sig->rq_extend != NULL)
{
preq_clt = get_remove_batch_request(preq_sig->rq_extend);
}
/* the client request has been handled another way, nothing left to do */
if (preq_clt == NULL)
return;
if ((pjob = chk_job_request(preq_clt->rq_ind.rq_rerun, preq_clt)) == NULL)
{
/* job has gone away, chk_job_request() calls req_reject() on failure */
return;
}
mutex_mgr pjob_mutex = mutex_mgr(pjob->ji_mutex, true);
if (rc)
{
/* mom rejected request */
if (rc == PBSE_UNKJOBID)
{
/* MOM claims no knowledge, so just purge it */
log_event(
PBSEVENT_JOB,
PBS_EVENTCLASS_JOB,
pjob->ji_qs.ji_jobid,
"MOM rejected signal during rerun");
/* removed the resources assigned to job */
free_nodes(pjob);
set_resc_assigned(pjob, DECR);
unlock_ji_mutex(pjob, __func__, "3", LOGLEVEL);
svr_job_purge(pjob);
reply_ack(preq_clt);
}
else
{
pjob_mutex.unlock();
req_reject(rc, 0, preq_clt, NULL, NULL);
}
return;
}
// Apply the user delay first so it takes precedence.
if (pjob->ji_wattr[JOB_ATR_user_kill_delay].at_flags & ATR_VFLAG_SET)
delay = pjob->ji_wattr[JOB_ATR_user_kill_delay].at_val.at_long;
if ((pque = get_jobs_queue(&pjob)) != NULL)
{
mutex_mgr pque_mutex = mutex_mgr(pque->qu_mutex, true);
mutex_mgr server_mutex = mutex_mgr(server.sv_attr_mutex, false);
if (delay == 0)
{
delay = attr_ifelse_long(&pque->qu_attr[QE_ATR_KillDelay],
&server.sv_attr[SRV_ATR_KillDelay],
0);
}
}
else
{
/* why is the pque null. Something went wrong */
snprintf(log_buf, LOCAL_LOG_BUF_SIZE, "jobid %s returned a null queue", pjob->ji_qs.ji_jobid);
req_reject(PBSE_UNKQUE, 0, preq_clt, NULL, log_buf);
return;
}
pjob_mutex.unlock();
reply_ack(preq_clt);
set_task(WORK_Timed, delay + time_now, send_sig_kill, strdup(pjob->ji_qs.ji_jobid), FALSE);
} // END delay_and_send_sig_kill()
开发者ID:dkoes,项目名称:torque,代码行数:99,代码来源:req_rerun.c
示例19: req_rerunjob
int req_rerunjob(
batch_request *preq)
{
int rc = PBSE_NONE;
job *pjob;
int MgrRequired = TRUE;
char log_buf[LOCAL_LOG_BUF_SIZE];
/* check if requestor is admin, job owner, etc */
if (!strcasecmp(preq->rq_ind.rq_rerun, "all"))
{
return(handle_requeue_all(preq));
}
if ((pjob = chk_job_request(preq->rq_ind.rq_rerun, preq)) == 0)
{
/* FAILURE */
/* chk_job_request calls req_reject() */
rc = PBSE_SYSTEM;
return rc; /* This needs to fixed to return an accurate error */
}
mutex_mgr pjob_mutex = mutex_mgr(pjob->ji_mutex, true);
/* the job must be running or completed */
if (pjob->ji_qs.ji_state >= JOB_STATE_EXITING)
{
if (pjob->ji_wattr[JOB_ATR_checkpoint_name].at_flags & ATR_VFLAG_SET)
{
/* allow end-users to rerun checkpointed jobs */
MgrRequired = FALSE;
}
}
else if (pjob->ji_qs.ji_state == JOB_STATE_RUNNING)
{
/* job is running */
/* NO-OP */
}
else if (pjob->ji_qs.ji_state == JOB_STATE_QUEUED)
{
// If we are already queued, then there is nothing to do.
rc = PBSE_NONE;
reply_ack(preq);
return(rc);
}
else
{
/* FAILURE - job is in bad state */
rc = PBSE_BADSTATE;
snprintf(log_buf, LOCAL_LOG_BUF_SIZE, "job %s is in a bad state",
preq->rq_ind.rq_rerun);
req_reject(rc, 0, preq, NULL, log_buf);
return rc;
}
if ((MgrRequired == TRUE) &&
((preq->rq_perm & (ATR_DFLAG_MGWR | ATR_DFLAG_OPWR)) == 0))
{
/* FAILURE */
rc = PBSE_PERM;
snprintf(log_buf, LOCAL_LOG_BUF_SIZE,
"additional permissions required (ATR_DFLAG_MGWR | ATR_DFLAG_OPWR)");
req_reject(rc, 0, preq, NULL, log_buf);
return rc;
}
/* the job must be rerunnable */
if (pjob->ji_wattr[JOB_ATR_rerunable].at_val.at_long == 0)
{
/* NOTE: should force override this constraint? maybe (???) */
/* no, the user is saying that the job will break, and
IEEE Std 1003.1 specifically says rerun is to be rejected
if rerunable==FALSE -garrick */
rc = PBSE_NORERUN;
snprintf(log_buf, LOCAL_LOG_BUF_SIZE, "job %s not rerunnable",
preq->rq_ind.rq_rerun);
req_reject(rc, 0, preq, NULL, log_buf);
return rc;
}
if (pjob->ji_qs.ji_state == JOB_STATE_RUNNING)
{
/* ask MOM to kill off the job if it is running */
int delay = 0;
pbs_queue *pque;
// Apply the user delay first so it takes precedence.
if (pjob->ji_wattr[JOB_ATR_user_kill_delay].at_flags & ATR_VFLAG_SET)
delay = pjob->ji_wattr[JOB_ATR_user_kill_delay].at_val.at_long;
//.........这里部分代码省略.........
开发者ID:dkoes,项目名称:torque,代码行数:101,代码来源:req_rerun.c
示例20: req_movejob
int req_movejob(
batch_request *req) /* I */
{
job *jobp;
char log_buf[LOCAL_LOG_BUF_SIZE];
int local_errno = 0;
jobp = chk_job_request(req->rq_ind.rq_move.rq_jid, req);
if (jobp == NULL)
{
return(PBSE_NONE);
}
mutex_mgr job_mutex(jobp->ji_mutex, true);
if (LOGLEVEL >= 7)
{
sprintf(log_buf, "%s", jobp->ji_qs.ji_jobid);
LOG_EVENT(PBSEVENT_JOB, PBS_EVENTCLASS_JOB, __func__, log_buf);
}
if ((jobp->ji_qs.ji_state != JOB_STATE_QUEUED) &&
(jobp->ji_qs.ji_state != JOB_STATE_HELD) &&
(jobp->ji_qs.ji_state != JOB_STATE_WAITING))
{
#ifndef NDEBUG
sprintf(log_buf, "%s %d %s", pbse_to_txt(PBSE_BADSTATE), jobp->ji_qs.ji_state, __func__);
log_event(PBSEVENT_DEBUG,PBS_EVENTCLASS_JOB,jobp->ji_qs.ji_jobid,log_buf);
#endif /* NDEBUG */
req_reject(PBSE_BADSTATE, 0, req, NULL, NULL);
return(PBSE_NONE);
}
/*
* svr_movejob() does the real work, handles both local and
* network moves
*/
/* We have found that sometimes the destination queue and the
parent queue are the same. If so we do not need to do
anything else */
if (strcmp(jobp->ji_qs.ji_queue, req->rq_ind.rq_move.rq_destin) == 0)
{
sprintf(log_buf, "Job %s already in queue %s", jobp->ji_qs.ji_jobid, jobp->ji_qs.ji_queue);
if (LOGLEVEL >= 7)
{
log_event(PBSEVENT_JOB, PBS_EVENTCLASS_JOB, __func__, log_buf);
}
req_reject(PBSE_JOB_ALREADY_IN_QUEUE, 0, req, NULL, log_buf);
return(PBSE_NONE);
}
switch (svr_movejob(jobp, req->rq_ind.rq_move.rq_destin, &local_errno, req))
{
case 0:
/* success */
snprintf(log_buf, sizeof(log_buf), "%s", msg_movejob);
snprintf(log_buf + strlen(log_buf), sizeof(log_buf) - strlen(log_buf), msg_manager,
req->rq_ind.rq_move.rq_destin, req->rq_user, req->rq_host);
log_event(PBSEVENT_JOB,PBS_EVENTCLASS_JOB,jobp->ji_qs.ji_jobid,log_buf);
reply_ack(req);
break;
case - 1:
case 1:
/* fail */
/* NOTE: can pass detailed response to requestor (NYI) */
req_reject(local_errno, 0, req, NULL, NULL);
break;
case 2:
/* deferred, will be handled by */
/* post_movejob() when the child completes */
/* NO-OP */
break;
} /* END switch (svr_movejob(jobp,req->rq_ind.rq_move.rq_destin,req)) */
return(PBSE_NONE);
} /* END req_movejob() */
开发者ID:actorquedeveloper,项目名称:torque,代码行数:99,代码来源:req_movejob.c
注:本文中的req_reject函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论