本文整理汇总了C++中IS_JOB_PENDING函数的典型用法代码示例。如果您正苦于以下问题:C++ IS_JOB_PENDING函数的具体用法?C++ IS_JOB_PENDING怎么用?C++ IS_JOB_PENDING使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了IS_JOB_PENDING函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: jobacct_storage_g_job_start
/*
* load into the storage information about a job,
* typically when it begins execution, but possibly earlier
*/
extern int jobacct_storage_g_job_start(void *db_conn,
struct job_record *job_ptr)
{
if (slurm_acct_storage_init(NULL) < 0)
return SLURM_ERROR;
if (enforce & ACCOUNTING_ENFORCE_NO_JOBS)
return SLURM_SUCCESS;
/* A pending job's start_time is it's expected initiation time
* (changed in slurm v2.1). Rather than changing a bunch of code
* in the accounting_storage plugins and SlurmDBD, just clear
* start_time before accounting and restore it later.
* If an update for a job that is being requeued[hold] happens,
* we don't want to modify the start_time of the old record.
* Pending + Completing is equivalent to Requeue.
*/
if (IS_JOB_PENDING(job_ptr) && !IS_JOB_COMPLETING(job_ptr)) {
int rc;
time_t orig_start_time = job_ptr->start_time;
job_ptr->start_time = (time_t) 0;
rc = (*(ops.job_start))(db_conn, job_ptr);
job_ptr->start_time = orig_start_time;
return rc;
}
return (*(ops.job_start))(db_conn, job_ptr);
}
开发者ID:SchedMD,项目名称:slurm,代码行数:31,代码来源:slurm_accounting_storage.c
示例2: find_preemptable_jobs
extern List find_preemptable_jobs(struct job_record *job_ptr)
{
ListIterator job_iterator;
struct job_record *job_p;
List preemptee_job_list = NULL;
/* Validate the preemptor job */
if (job_ptr == NULL) {
error("find_preemptable_jobs: job_ptr is NULL");
return preemptee_job_list;
}
if (!IS_JOB_PENDING(job_ptr)) {
error("find_preemptable_jobs: job %u not pending",
job_ptr->job_id);
return preemptee_job_list;
}
if (job_ptr->part_ptr == NULL) {
error("find_preemptable_jobs: job %u has NULL partition ptr",
job_ptr->job_id);
return preemptee_job_list;
}
if (job_ptr->part_ptr->node_bitmap == NULL) {
error("find_preemptable_jobs: partition %s node_bitmap=NULL",
job_ptr->part_ptr->name);
return preemptee_job_list;
}
/* Build an array of pointers to preemption candidates */
job_iterator = list_iterator_create(job_list);
while ((job_p = (struct job_record *) list_next(job_iterator))) {
if (!IS_JOB_RUNNING(job_p) && !IS_JOB_SUSPENDED(job_p))
continue;
if ((job_p->part_ptr == NULL) ||
(job_p->part_ptr->priority_tier >=
job_ptr->part_ptr->priority_tier) ||
(job_p->part_ptr->preempt_mode == PREEMPT_MODE_OFF))
continue;
if ((job_p->node_bitmap == NULL) ||
(bit_overlap(job_p->node_bitmap,
job_ptr->part_ptr->node_bitmap) == 0))
continue;
if (job_ptr->details &&
(job_ptr->details->expanding_jobid == job_p->job_id))
continue;
/* This job is a preemption candidate */
if (preemptee_job_list == NULL) {
preemptee_job_list = list_create(NULL);
}
list_append(preemptee_job_list, job_p);
}
list_iterator_destroy(job_iterator);
if (preemptee_job_list && youngest_order)
list_sort(preemptee_job_list, _sort_by_youngest);
else if (preemptee_job_list)
list_sort(preemptee_job_list, _sort_by_prio);
return preemptee_job_list;
}
开发者ID:HPCNow,项目名称:slurm,代码行数:60,代码来源:preempt_partition_prio.c
示例3: _get_job_state
/* NOTE: if job has already completed, we append "EXITCODE=#" to
* the state name */
static char * _get_job_state(struct job_record *job_ptr)
{
char *state_str;
static char return_msg[128];
if (IS_JOB_COMPLETING(job_ptr)) {
/* Give configured KillWait+10 for job
* to clear out, then then consider job
* done. Moab will allocate jobs to
* nodes that are already Idle. */
int age = (int) difftime(time(NULL),
job_ptr->end_time);
if (age < (kill_wait+10))
return "Running";
}
if (IS_JOB_RUNNING(job_ptr))
return "Running";
if (IS_JOB_SUSPENDED(job_ptr))
return "Suspended";
if (IS_JOB_PENDING(job_ptr))
return "Idle";
if (IS_JOB_COMPLETE(job_ptr) || IS_JOB_FAILED(job_ptr))
state_str = "Completed";
else /* JOB_CANCELLED, JOB_TIMEOUT, JOB_NODE_FAIL, etc. */
state_str = "Removed";
snprintf(return_msg, sizeof(return_msg), "%s;EXITCODE=%u",
state_str, WEXITSTATUS(job_ptr->exit_code));
return return_msg;
}
开发者ID:Q-Leap-Networks,项目名称:qlustar-slurm,代码行数:33,代码来源:get_jobs.c
示例4: _get_node_cnt
static int _get_node_cnt(job_info_t * job)
{
int node_cnt = 0;
/* For PENDING jobs, return the maximum of the requested nodelist,
* requested maximum number of nodes, or requested CPUs rounded
* to nearest node.
*
* For COMPLETING jobs, the job->nodes nodelist has already been
* altered to list only the nodes still in the comp state, and
* thus we count only those nodes toward the total nodes still
* allocated to this job.
*/
if (IS_JOB_PENDING(job)) {
node_cnt = _nodes_in_list(job->req_nodes);
node_cnt = MAX(node_cnt, job->num_nodes);
if ((node_cnt == 1) && (job->num_cpus > 1)
&& job->ntasks_per_node
&& (job->ntasks_per_node != (uint16_t) NO_VAL)) {
int num_tasks = job->num_cpus;
if (job->cpus_per_task != (uint16_t) NO_VAL)
num_tasks /= job->cpus_per_task;
node_cnt = (num_tasks + 1) / job->ntasks_per_node;
if (node_cnt > num_tasks)
node_cnt = num_tasks;
else if (!node_cnt)
node_cnt = 1;
}
} else
node_cnt = _nodes_in_list(job->nodes);
return node_cnt;
}
开发者ID:Cray,项目名称:slurm,代码行数:33,代码来源:print.c
示例5: _print_job_job_id
int _print_job_job_id(job_info_t * job, int width, bool right, char* suffix)
{
if (job == NULL) { /* Print the Header instead */
_print_str("JOBID", width, right, true);
} else if ((job->array_task_id != NO_VAL) &&
!params.array_flag && IS_JOB_PENDING(job) &&
job->node_inx) {
uint32_t i, max_task_id = 0;
char id[FORMAT_STRING_SIZE], task_str[FORMAT_STRING_SIZE];
bitstr_t *task_bits;
for (i = 1; i <= job->node_inx[0]; i++)
max_task_id = MAX(max_task_id, job->node_inx[i]);
task_bits = bit_alloc(max_task_id + 1);
for (i = 1; i <= job->node_inx[0]; i++)
bit_set(task_bits, job->node_inx[i]);
bit_fmt(task_str, sizeof(task_str), task_bits);
snprintf(id, FORMAT_STRING_SIZE, "%u_[%s]",
job->array_job_id, task_str);
_print_str(id, width, right, true);
bit_free(task_bits);
} else if (job->array_task_id != NO_VAL) {
char id[FORMAT_STRING_SIZE];
snprintf(id, FORMAT_STRING_SIZE, "%u_%u",
job->array_job_id, job->array_task_id);
_print_str(id, width, right, true);
} else {
char id[FORMAT_STRING_SIZE];
snprintf(id, FORMAT_STRING_SIZE, "%u", job->job_id);
_print_str(id, width, right, true);
}
if (suffix)
printf("%s", suffix);
return SLURM_SUCCESS;
}
开发者ID:mrhaoji,项目名称:slurm,代码行数:34,代码来源:print.c
示例6: _get_job_runtime
/* Code taken from job_info.c calculate cummulative run time for a job */
static time_t _get_job_runtime(struct job_record *job_ptr)
{
time_t end_time, run_time;
if (IS_JOB_PENDING(job_ptr))
run_time = 0;
else if (IS_JOB_SUSPENDED(job_ptr))
run_time = job_ptr->pre_sus_time;
else {
if (IS_JOB_RUNNING(job_ptr) || (job_ptr->end_time == 0))
end_time = time(NULL);
else
end_time = job_ptr->end_time;
if (job_ptr->suspend_time) {
run_time = (time_t)
(difftime(end_time, job_ptr->suspend_time)
+ job_ptr->pre_sus_time);
} else {
run_time = (time_t)
difftime(end_time, job_ptr->start_time);
}
}
return run_time;
}
开发者ID:dinesh121991,项目名称:Backup-M2R-Intern-Bull-Slurm-Codes,代码行数:26,代码来源:preempt_job_prio.c
示例7: srun_user_message
/*
* srun_user_message - Send arbitrary message to an srun job (no job steps)
*/
extern int srun_user_message(struct job_record *job_ptr, char *msg)
{
slurm_addr_t * addr;
srun_user_msg_t *msg_arg;
xassert(job_ptr);
if (!IS_JOB_PENDING(job_ptr) && !IS_JOB_RUNNING(job_ptr))
return ESLURM_ALREADY_DONE;
if (job_ptr->other_port &&
job_ptr->resp_host && job_ptr->resp_host[0]) {
addr = xmalloc(sizeof(struct sockaddr_in));
slurm_set_addr(addr, job_ptr->other_port, job_ptr->resp_host);
msg_arg = xmalloc(sizeof(srun_user_msg_t));
msg_arg->job_id = job_ptr->job_id;
msg_arg->msg = xstrdup(msg);
_srun_agent_launch(addr, job_ptr->resp_host, SRUN_USER_MSG,
msg_arg);
return SLURM_SUCCESS;
} else if (job_ptr->batch_flag && IS_JOB_RUNNING(job_ptr)) {
#ifndef HAVE_FRONT_END
struct node_record *node_ptr;
#endif
job_notify_msg_t *notify_msg_ptr;
agent_arg_t *agent_arg_ptr;
#ifdef HAVE_FRONT_END
if (job_ptr->batch_host == NULL)
return ESLURM_DISABLED; /* no allocated nodes */
agent_arg_ptr = (agent_arg_t *) xmalloc(sizeof(agent_arg_t));
agent_arg_ptr->hostlist = hostlist_create(job_ptr->batch_host);
#else
node_ptr = find_first_node_record(job_ptr->node_bitmap);
if (node_ptr == NULL)
return ESLURM_DISABLED; /* no allocated nodes */
agent_arg_ptr = (agent_arg_t *) xmalloc(sizeof(agent_arg_t));
agent_arg_ptr->hostlist = hostlist_create(node_ptr->name);
#endif
if (agent_arg_ptr->hostlist == NULL)
fatal("hostlist_create: malloc failure");
notify_msg_ptr = (job_notify_msg_t *)
xmalloc(sizeof(job_notify_msg_t));
notify_msg_ptr->job_id = job_ptr->job_id;
notify_msg_ptr->message = xstrdup(msg);
agent_arg_ptr->node_count = 1;
agent_arg_ptr->retry = 0;
agent_arg_ptr->msg_type = REQUEST_JOB_NOTIFY;
agent_arg_ptr->msg_args = (void *) notify_msg_ptr;
/* Launch the RPC via agent */
agent_queue_request(agent_arg_ptr);
return SLURM_SUCCESS;
}
return ESLURM_DISABLED;
}
开发者ID:Xarthisius,项目名称:slurm,代码行数:56,代码来源:srun_comm.c
示例8: _merge_job_array
static bool _merge_job_array(List l, job_info_t * job_ptr)
{
job_info_t *list_job_ptr;
ListIterator iter;
bool merge = false;
if (params.array_flag)
return merge;
if (job_ptr->array_task_id == NO_VAL)
return merge;
if (!IS_JOB_PENDING(job_ptr))
return merge;
xfree(job_ptr->node_inx);
if (!l)
return merge;
iter = list_iterator_create(l);
while ((list_job_ptr = list_next(iter))) {
if ((list_job_ptr->array_task_id == NO_VAL) ||
(job_ptr->array_job_id != list_job_ptr->array_job_id) ||
(!IS_JOB_PENDING(list_job_ptr)))
continue;
/* We re-purpose the job's node_inx array to store the
* array_task_id values */
if (!list_job_ptr->node_inx) {
list_job_ptr->node_inx = xmalloc(sizeof(int32_t) * 0xffff);
list_job_ptr->node_inx[0] = 1; /* offset */
list_job_ptr->node_inx[1] =
list_job_ptr->array_task_id;
}
list_job_ptr->node_inx[0]++;
list_job_ptr->node_inx[list_job_ptr->node_inx[0]] =
job_ptr->array_task_id;
merge = true;
break;
}
list_iterator_destroy(iter);
return merge;
}
开发者ID:Cray,项目名称:slurm,代码行数:40,代码来源:print.c
示例9: _ft_decay_apply_new_usage
/* Apply usage with decay factor. Call standard functions */
static void _ft_decay_apply_new_usage(struct job_record *job, time_t *start)
{
if (!decay_apply_new_usage(job, start))
return;
/* Priority 0 is reserved for held jobs. Also skip priority
* calculation for non-pending jobs. */
if ((job->priority == 0) || !IS_JOB_PENDING(job))
return;
set_priority_factors(*start, job);
last_job_update = time(NULL);
}
开发者ID:mart1nl,项目名称:slurm,代码行数:14,代码来源:fair_tree.c
示例10: job_modify
extern int job_modify(struct job_descriptor *job_desc,
struct job_record *job_ptr, uint32_t submit_uid)
{
uint16_t job_mcdram, job_numa;
int mcdram_cnt, numa_cnt;
char *tmp_str;
if (!job_desc->features)
return SLURM_SUCCESS;
if (!IS_JOB_PENDING(job_ptr))
return ESLURM_JOB_NOT_PENDING;
job_mcdram = knl_mcdram_parse(job_desc->features, "&");
mcdram_cnt = knl_mcdram_bits_cnt(job_mcdram);
if (mcdram_cnt > 1) { /* Multiple MCDRAM options */
return ESLURM_INVALID_KNL;
} else if (mcdram_cnt == 0) {
if (job_desc->features && job_desc->features[0])
xstrcat(job_desc->features, "&");
tmp_str = knl_mcdram_str(default_mcdram);
xstrcat(job_desc->features, tmp_str);
xfree(tmp_str);
} else if ((job_mcdram & avail_mcdram) == 0) { /* Unavailable option */
return ESLURM_INVALID_KNL;
}
job_numa = knl_numa_parse(job_desc->features, "&");
numa_cnt = knl_numa_bits_cnt(job_numa);
if (numa_cnt > 1) { /* Multiple NUMA options */
return ESLURM_INVALID_KNL;
} else if (numa_cnt == 0) {
if (job_desc->features && job_desc->features[0])
xstrcat(job_desc->features, "&");
tmp_str = knl_numa_str(default_numa);
xstrcat(job_desc->features, tmp_str);
xfree(tmp_str);
} else if ((job_numa & avail_numa) == 0) { /* Unavailable NUMA option */
return ESLURM_INVALID_KNL;
}
return SLURM_SUCCESS;
}
开发者ID:FredHutch,项目名称:slurm,代码行数:42,代码来源:job_submit_knl.c
示例11: job_time_used
long job_time_used(job_info_t * job_ptr)
{
time_t end_time;
if ((job_ptr->start_time == 0) || IS_JOB_PENDING(job_ptr))
return 0L;
if (IS_JOB_SUSPENDED(job_ptr))
return (long) job_ptr->pre_sus_time;
if (IS_JOB_RUNNING(job_ptr) || (job_ptr->end_time == 0))
end_time = time(NULL);
else
end_time = job_ptr->end_time;
if (job_ptr->suspend_time)
return (long) (difftime(end_time, job_ptr->suspend_time)
+ job_ptr->pre_sus_time);
return (long) (difftime(end_time, job_ptr->start_time));
}
开发者ID:Cray,项目名称:slurm,代码行数:20,代码来源:print.c
示例12: jobacct_storage_g_job_start
/*
* load into the storage information about a job,
* typically when it begins execution, but possibly earlier
*/
extern int jobacct_storage_g_job_start(void *db_conn,
struct job_record *job_ptr)
{
if (slurm_acct_storage_init(NULL) < 0)
return SLURM_ERROR;
/* A pending job's start_time is it's expected initiation time
* (changed in slurm v2.1). Rather than changing a bunch of code
* in the accounting_storage plugins and SlurmDBD, just clear
* start_time before accounting and restore it later. */
if (IS_JOB_PENDING(job_ptr)) {
int rc;
time_t orig_start_time = job_ptr->start_time;
job_ptr->start_time = (time_t) 0;
rc = (*(g_acct_storage_context->ops.job_start))(
db_conn, job_ptr);
job_ptr->start_time = orig_start_time;
return rc;
}
return (*(g_acct_storage_context->ops.job_start))(db_conn, job_ptr);
}
开发者ID:VURM,项目名称:slurm,代码行数:26,代码来源:slurm_accounting_storage.c
示例13: _print_job_reason_list
int _print_job_reason_list(job_info_t * job, int width, bool right,
char* suffix)
{
if (job == NULL) { /* Print the Header instead */
char *title = "NODELIST(REASON)";
if (params.cluster_flags & CLUSTER_FLAG_BG)
title = "MIDPLANELIST(REASON)";
_print_str(title, width, right, false);
} else if (!IS_JOB_COMPLETING(job)
&& (IS_JOB_PENDING(job)
|| IS_JOB_TIMEOUT(job)
|| IS_JOB_FAILED(job))) {
char id[FORMAT_STRING_SIZE], *reason;
if (job->state_desc)
reason = job->state_desc;
else
reason = job_reason_string(job->state_reason);
snprintf(id, FORMAT_STRING_SIZE, "(%s)", reason);
_print_str(id, width, right, true);
} else {
char *nodes = xstrdup(job->nodes);
char *ionodes = NULL;
select_g_select_jobinfo_get(job->select_jobinfo,
SELECT_JOBDATA_IONODES,
&ionodes);
if (ionodes) {
xstrfmtcat(nodes, "[%s]", ionodes);
xfree(ionodes);
_print_str(nodes, width, right, false);
} else
_print_nodes(nodes, width, right, false);
xfree(nodes);
}
if (suffix)
printf("%s", suffix);
return SLURM_SUCCESS;
}
开发者ID:Cray,项目名称:slurm,代码行数:38,代码来源:print.c
示例14: _pending_pack_jobs
static bool _pending_pack_jobs(struct job_record *job_ptr)
{
struct job_record *pack_leader, *pack_job;
ListIterator iter;
bool pending_job = false;
if (job_ptr->pack_job_id == 0)
return false;
pack_leader = find_job_record(job_ptr->pack_job_id);
if (!pack_leader) {
error("Job pack leader %pJ not found", job_ptr);
return false;
}
if (!pack_leader->pack_job_list) {
error("Job pack leader %pJ lacks pack_job_list",
job_ptr);
return false;
}
iter = list_iterator_create(pack_leader->pack_job_list);
while ((pack_job = (struct job_record *) list_next(iter))) {
if (pack_leader->pack_job_id != pack_job->pack_job_id) {
error("%s: Bad pack_job_list for %pJ",
__func__, pack_leader);
continue;
}
if (IS_JOB_PENDING(pack_job)) {
pending_job = true;
break;
}
}
list_iterator_destroy(iter);
return pending_job;
}
开发者ID:chrisdukey,项目名称:slurm,代码行数:36,代码来源:srun_comm.c
示例15: _get_node_cnt
static int _get_node_cnt(job_info_t * job)
{
int node_cnt = 0, round;
/* For PENDING jobs, return the maximum of the requested nodelist,
* requested maximum number of nodes, or requested CPUs rounded
* to nearest node.
*
* For COMPLETING jobs, the job->nodes nodelist has already been
* altered to list only the nodes still in the comp state, and
* thus we count only those nodes toward the total nodes still
* allocated to this job.
*/
if (IS_JOB_PENDING(job)) {
node_cnt = _nodes_in_list(job->req_nodes);
node_cnt = MAX(node_cnt, job->num_nodes);
round = job->num_cpus + params.max_cpus - 1;
round /= params.max_cpus; /* round up */
node_cnt = MAX(node_cnt, round);
} else
node_cnt = _nodes_in_list(job->nodes);
return node_cnt;
}
开发者ID:IFCA,项目名称:slurm,代码行数:24,代码来源:print.c
示例16: acct_policy_update_pending_job
/*
* acct_policy_update_pending_job - Make sure the limits imposed on a
* job on submission are correct after an update to a qos or
* association. If the association/qos limits prevent
* the job from ever running (lowered limits since job submission),
* then cancel the job.
*/
extern int acct_policy_update_pending_job(struct job_record *job_ptr)
{
job_desc_msg_t job_desc;
uint16_t limit_set_max_cpus = 0;
uint16_t limit_set_max_nodes = 0;
uint16_t limit_set_time = 0;
bool update_accounting = false;
struct job_details *details_ptr;
int rc = SLURM_SUCCESS;
/* check to see if we are enforcing associations and the job
* is pending or if we are even enforcing limits. */
if (!accounting_enforce || !IS_JOB_PENDING(job_ptr)
|| !(accounting_enforce & ACCOUNTING_ENFORCE_LIMITS))
return SLURM_SUCCESS;
details_ptr = job_ptr->details;
if (!details_ptr) {
error("acct_policy_update_pending_job: no details");
return SLURM_ERROR;
}
/* set up the job desc to make sure things are the way we
* need.
*/
slurm_init_job_desc_msg(&job_desc);
job_desc.min_cpus = details_ptr->min_cpus;
/* Only set this value if not set from a limit */
if (job_ptr->limit_set_max_cpus == ADMIN_SET_LIMIT)
limit_set_max_cpus = job_ptr->limit_set_max_cpus;
else if ((details_ptr->max_cpus != NO_VAL)
&& !job_ptr->limit_set_max_cpus)
job_desc.max_cpus = details_ptr->max_cpus;
job_desc.min_nodes = details_ptr->min_nodes;
/* Only set this value if not set from a limit */
if (job_ptr->limit_set_max_nodes == ADMIN_SET_LIMIT)
limit_set_max_nodes = job_ptr->limit_set_max_nodes;
else if ((details_ptr->max_nodes != NO_VAL)
&& !job_ptr->limit_set_max_nodes)
job_desc.max_nodes = details_ptr->max_nodes;
else
job_desc.max_nodes = 0;
/* Only set this value if not set from a limit */
if (job_ptr->limit_set_time == ADMIN_SET_LIMIT)
limit_set_time = job_ptr->limit_set_time;
else if ((job_ptr->time_limit != NO_VAL) && !job_ptr->limit_set_time)
job_desc.time_limit = job_ptr->time_limit;
if (!acct_policy_validate(&job_desc, job_ptr->part_ptr,
job_ptr->assoc_ptr, job_ptr->qos_ptr,
&limit_set_max_cpus,
&limit_set_max_nodes,
&limit_set_time, 0)) {
info("acct_policy_update_pending_job: exceeded "
"association/qos's cpu, node or "
"time limit for job %d", job_ptr->job_id);
_cancel_job(job_ptr);
return SLURM_ERROR;
}
/* If it isn't an admin set limit replace it. */
if (!limit_set_max_cpus && (job_ptr->limit_set_max_cpus == 1)) {
details_ptr->max_cpus = NO_VAL;
job_ptr->limit_set_max_cpus = 0;
update_accounting = true;
} else if (limit_set_max_cpus != ADMIN_SET_LIMIT) {
if (details_ptr->max_cpus != job_desc.max_cpus) {
details_ptr->max_cpus = job_desc.max_cpus;
update_accounting = true;
}
job_ptr->limit_set_max_cpus = limit_set_max_cpus;
}
if (!limit_set_max_nodes && (job_ptr->limit_set_max_nodes == 1)) {
details_ptr->max_nodes = 0;
job_ptr->limit_set_max_nodes = 0;
update_accounting = true;
} else if (limit_set_max_nodes != ADMIN_SET_LIMIT) {
if (details_ptr->max_nodes != job_desc.max_nodes) {
details_ptr->max_nodes = job_desc.max_nodes;
update_accounting = true;
}
job_ptr->limit_set_max_nodes = limit_set_max_nodes;
}
if (!limit_set_time && (job_ptr->limit_set_time == 1)) {
job_ptr->time_limit = NO_VAL;
job_ptr->limit_set_time = 0;
update_accounting = true;
//.........这里部分代码省略.........
开发者ID:VURM,项目名称:slurm,代码行数:101,代码来源:acct_policy.c
示例17: _will_run_test2
static char * _will_run_test2(uint32_t jobid, time_t start_time,
char *node_list,
uint32_t *preemptee, int preemptee_cnt,
int *err_code, char **err_msg)
{
struct job_record *job_ptr = NULL, *pre_ptr;
struct part_record *part_ptr;
bitstr_t *avail_bitmap = NULL, *resv_bitmap = NULL;
bitstr_t *exc_core_bitmap = NULL;
time_t start_res;
uint32_t min_nodes, max_nodes, req_nodes;
List preemptee_candidates = NULL, preempted_jobs = NULL;
time_t orig_start_time;
char *reply_msg = NULL;
int i, rc;
bool resv_overlap = false;
xassert(node_list);
debug2("wiki2: will_run2 job_id=%u start_time=%u node_list=%s",
jobid, (uint32_t)start_time, node_list);
job_ptr = find_job_record(jobid);
if (job_ptr == NULL) {
*err_code = -700;
*err_msg = "No such job";
error("wiki: Failed to find job %u", jobid);
return NULL;
}
if ((job_ptr->details == NULL) || (!IS_JOB_PENDING(job_ptr))) {
*err_code = -700;
*err_msg = "WillRun not applicable to non-pending job";
error("wiki: WillRun on non-pending job %u", jobid);
return NULL;
}
part_ptr = job_ptr->part_ptr;
if (part_ptr == NULL) {
*err_code = -700;
*err_msg = "Job lacks a partition";
error("wiki: Job %u lacks a partition", jobid);
return NULL;
}
if (node_name2bitmap(node_list, false, &avail_bitmap) != 0) {
*err_code = -700;
*err_msg = "Invalid available nodes value";
error("wiki: Attempt to set invalid available node "
"list for job %u, %s", jobid, node_list);
return NULL;
}
/* Enforce reservation: access control, time and nodes */
start_res = start_time;
rc = job_test_resv(job_ptr, &start_res, true, &resv_bitmap,
&exc_core_bitmap, &resv_overlap);
if (rc != SLURM_SUCCESS) {
*err_code = -730;
*err_msg = "Job denied access to reservation";
error("wiki: reservation access denied for job %u", jobid);
FREE_NULL_BITMAP(avail_bitmap);
FREE_NULL_BITMAP(exc_core_bitmap);
return NULL;
}
bit_and(avail_bitmap, resv_bitmap);
FREE_NULL_BITMAP(resv_bitmap);
/* Only consider nodes that are not DOWN or DRAINED */
bit_and(avail_bitmap, avail_node_bitmap);
/* Consider only nodes in this job's partition */
if (part_ptr->node_bitmap)
bit_and(avail_bitmap, part_ptr->node_bitmap);
else {
*err_code = -730;
*err_msg = "Job's partition has no nodes";
error("wiki: no nodes in partition %s for job %u",
part_ptr->name, jobid);
FREE_NULL_BITMAP(avail_bitmap);
FREE_NULL_BITMAP(exc_core_bitmap);
return NULL;
}
if (job_req_node_filter(job_ptr, avail_bitmap) != SLURM_SUCCESS) {
/* Job probably has invalid feature list */
*err_code = -730;
*err_msg = "Job's required features not available "
"on selected nodes";
error("wiki: job %u not runnable on hosts=%s",
jobid, node_list);
FREE_NULL_BITMAP(avail_bitmap);
FREE_NULL_BITMAP(exc_core_bitmap);
return NULL;
}
if (job_ptr->details->exc_node_bitmap) {
bit_not(job_ptr->details->exc_node_bitmap);
bit_and(avail_bitmap, job_ptr->details->exc_node_bitmap);
bit_not(job_ptr->details->exc_node_bitmap);
}
if ((job_ptr->details->req_node_bitmap) &&
(!bit_super_set(job_ptr->details->req_node_bitmap,
//.........这里部分代码省略.........
开发者ID:beninim,项目名称:slurm_simulator,代码行数:101,代码来源:job_will_run.c
示例18: get_job
extern void get_job(void)
{
int error_code = -1, i, recs;
static int printed_jobs = 0;
static int count = 0;
static job_info_msg_t *job_info_ptr = NULL, *new_job_ptr = NULL;
job_info_t *job_ptr = NULL;
uint16_t show_flags = 0;
bitstr_t *nodes_req = NULL;
static uint16_t last_flags = 0;
if (params.all_flag)
show_flags |= SHOW_ALL;
if (job_info_ptr) {
if (show_flags != last_flags)
job_info_ptr->last_update = 0;
error_code = slurm_load_jobs(job_info_ptr->last_update,
&new_job_ptr, show_flags);
if (error_code == SLURM_SUCCESS)
slurm_free_job_info_msg(job_info_ptr);
else if (slurm_get_errno() == SLURM_NO_CHANGE_IN_DATA) {
error_code = SLURM_SUCCESS;
new_job_ptr = job_info_ptr;
}
} else
error_code = slurm_load_jobs((time_t) NULL, &new_job_ptr,
show_flags);
last_flags = show_flags;
if (error_code) {
if (quiet_flag != 1) {
if (!params.commandline) {
mvwprintw(text_win,
main_ycord, 1,
"slurm_load_jobs: %s",
slurm_strerror(slurm_get_errno()));
main_ycord++;
} else {
printf("slurm_load_jobs: %s\n",
slurm_strerror(slurm_get_errno()));
}
}
}
if (!params.no_header)
_print_header_job();
if (new_job_ptr)
recs = new_job_ptr->record_count;
else
recs = 0;
if (!params.commandline)
if ((text_line_cnt+printed_jobs) > count)
text_line_cnt--;
printed_jobs = 0;
count = 0;
if (params.hl)
nodes_req = get_requested_node_bitmap();
for (i = 0; i < recs; i++) {
job_ptr = &(new_job_ptr->job_array[i]);
if (!IS_JOB_PENDING(job_ptr) && !IS_JOB_RUNNING(job_ptr) &&
!IS_JOB_SUSPENDED(job_ptr) && !IS_JOB_COMPLETING(job_ptr))
continue; /* job has completed */
if (nodes_req) {
int overlap = 0;
bitstr_t *loc_bitmap = bit_alloc(bit_size(nodes_req));
inx2bitstr(loc_bitmap, job_ptr->node_inx);
overlap = bit_overlap(loc_bitmap, nodes_req);
FREE_NULL_BITMAP(loc_bitmap);
if (!overlap)
continue;
}
if (job_ptr->node_inx[0] != -1) {
int j = 0;
job_ptr->num_nodes = 0;
while (job_ptr->node_inx[j] >= 0) {
job_ptr->num_nodes +=
(job_ptr->node_inx[j + 1] + 1) -
job_ptr->node_inx[j];
set_grid_inx(job_ptr->node_inx[j],
job_ptr->node_inx[j + 1], count);
j += 2;
}
if (!params.commandline) {
if ((count >= text_line_cnt) &&
(printed_jobs < (getmaxy(text_win) - 4))) {
job_ptr->num_cpus =
(int)letters[count%62];
wattron(text_win,
COLOR_PAIR(colors[count%6]));
_print_text_job(job_ptr);
wattroff(text_win,
COLOR_PAIR(colors[count%6]));
printed_jobs++;
}
} else {
//.........这里部分代码省略.........
开发者ID:jtfrey,项目名称:slurm,代码行数:101,代码来源:job_functions.c
示例19: slurm_sprint_job_info
//.........这里部分代码省略.........
job_ptr->requeue, job_ptr->restart_cnt, job_ptr->batch_flag);
xstrcat(out, tmp_line);
if (WIFSIGNALED(job_ptr->exit_code))
term_sig = WTERMSIG(job_ptr->exit_code);
exit_status = WEXITSTATUS(job_ptr->exit_code);
snprintf(tmp_line, sizeof(tmp_line),
"ExitCode=%u:%u", exit_status, term_sig);
xstrcat(out, tmp_line);
if (one_liner)
xstrcat(out, " ");
else
xstrcat(out, "\n ");
/****** Line 5a (optional) ******/
if (!(job_ptr->show_flags & SHOW_DETAIL))
goto line6;
if (WIFSIGNALED(job_ptr->derived_ec))
term_sig = WTERMSIG(job_ptr->derived_ec);
else
term_sig = 0;
exit_status = WEXITSTATUS(job_ptr->derived_ec);
snprintf(tmp_line, sizeof(tmp_line),
"DerivedExitCode=%u:%u", exit_status, term_sig);
xstrcat(out, tmp_line);
if (one_liner)
xstrcat(out, " ");
else
xstrcat(out, "\n ");
/****** Line 6 ******/
line6:
snprintf(tmp_line, sizeof(tmp_line), "RunTime=");
xstrcat(out, tmp_line);
if (IS_JOB_PENDING(job_ptr))
run_time = 0;
else if (IS_JOB_SUSPENDED(job_ptr))
run_time = job_ptr->pre_sus_time;
else {
time_t end_time;
if (IS_JOB_RUNNING(job_ptr) || (job_ptr->end_time == 0))
end_time = time(NULL);
else
end_time = job_ptr->end_time;
if (job_ptr->suspend_time) {
run_time = (time_t)
(difftime(end_time, job_ptr->suspend_time)
+ job_ptr->pre_sus_time);
} else
run_time = (time_t)
difftime(end_time, job_ptr->start_time);
}
secs2time_str(run_time, tmp1, sizeof(tmp1));
sprintf(tmp_line, "%s ", tmp1);
xstrcat(out, tmp_line);
snprintf(tmp_line, sizeof(tmp_line), "TimeLimit=");
xstrcat(out, tmp_line);
if (job_ptr->time_limit == NO_VAL)
sprintf(tmp_line, "Partition_Limit");
else {
mins2time_str(job_ptr->time_limit, tmp_line,
sizeof(tmp_line));
}
xstrcat(out, tmp_line);
snprintf(tmp_line, sizeof(tmp_line), " TimeMin=");
xstrcat(out, tmp_line);
开发者ID:IFCA,项目名称:slurm,代码行数:67,代码来源:job_info.c
示例20: _filter_job
//.........这里部分代码省略.........
return 2;
}
if (params.account_list) {
filter = 1;
iterator = list_iterator_create(params.account_list);
while ((account = list_next(iterator))) {
if ((job->account != NULL) &&
(strcasecmp(account, job->account) == 0)) {
filter = 0;
break;
}
}
list_iterator_destroy(iterator);
if (filter == 1)
return 2;
}
if (params.qos_list) {
filter = 1;
iterator = list_iterator_create(params.qos_list);
while ((qos = list_next(iterator))) {
if ((job->qos != NULL) &&
(strcasecmp(qos, job->qos) == 0)) {
filter = 0;
break;
}
}
list_iterator_destroy(iterator);
if (filter == 1)
return 2;
}
if (params.state_list) {
filter = 1;
iterator = list_iterator_create(params.state_list);
while ((state_id = list_next(iterator))) {
if ((*state_id == job->job_state) ||
((*state_id == JOB_COMPLETING) &&
(*state_id & job->job_state)) ||
((*state_id == JOB_CONFIGURING) &&
(*state_id & job->job_state))) {
filter = 0;
break;
}
}
list_iterator_destroy(iterator);
if (filter == 1)
return 3;
} else {
if (!IS_JOB_PENDING(job) &&
!IS_JOB_RUNNING(job) &&
!IS_JOB_SUSPENDED(job) &&
!IS_JOB_COMPLETING(job))
return 4;
}
if ((params.nodes)
&& ((job->nodes == NULL)
|| (!hostset_intersects(params.nodes, job->nodes))))
return 5;
if (params.user_list) {
filter = 1;
iterator = list_iterator_create(params.user_list);
while ((user = list_next(iterator))) {
if (*user == job->user_id) {
filter = 0;
break;
}
}
list_iterator_destroy(iterator);
if (filter == 1)
return 6;
}
if (params.reservation) {
if ((job->resv_name == NULL) ||
(strcmp(job->resv_name, params.reservation))) {
return 7;
}
}
if (params.name_list) {
filter = 1;
iterator = list_iterator_create(params.name_list);
while ((name = list_next(iterator))) {
if ((job->name != NULL) &&
(strcasecmp(name, job->name) == 0)) {
filter = 0;
break;
}
}
list_iterator_destroy(iterator);
if (filter == 1)
return 8;
}
return 0;
}
开发者ID:Cray,项目名称:slurm,代码行数:101,代码来源:print.c
注:本文中的IS_JOB_PENDING函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论