diff --git a/src/plugins/priority/basic/priority_basic.c b/src/plugins/priority/basic/priority_basic.c index fe471ade8a4863cf36ab7e4b6b663ed473df7974..fee48b2057b05d9a953220bf62d3930e1fd468c2 100644 --- a/src/plugins/priority/basic/priority_basic.c +++ b/src/plugins/priority/basic/priority_basic.c @@ -110,13 +110,11 @@ extern uint32_t priority_p_set(uint32_t last_prio, struct job_record *job_ptr) if(job_ptr->direct_set_prio) return job_ptr->priority; - if (last_prio >= 2) + if(last_prio >= 2) new_prio = (last_prio - 1); - if(!job_ptr->details) - return new_prio; - - new_prio -= (job_ptr->details->nice - NICE_OFFSET); + if(job_ptr->details) + new_prio -= (job_ptr->details->nice - NICE_OFFSET); if(new_prio < 1) new_prio = 1; diff --git a/src/slurmctld/job_mgr.c b/src/slurmctld/job_mgr.c index 43ab8238e848257728b36313bd8e074a086390c3..ed65f7578fce9941101ab9e173f76a36d108412a 100644 --- a/src/slurmctld/job_mgr.c +++ b/src/slurmctld/job_mgr.c @@ -3918,9 +3918,11 @@ static void _set_job_prio(struct job_record *job_ptr) { xassert(job_ptr); xassert (job_ptr->magic == JOB_MAGIC); + if (IS_JOB_FINISHED(job_ptr)) + return; job_ptr->priority = slurm_sched_initial_priority(maximum_prio, job_ptr); - if (job_ptr->priority > 0) + if ((job_ptr->priority > 1) && (job_ptr->direct_set_prio == 0)) maximum_prio = MIN(job_ptr->priority, maximum_prio); } @@ -3935,7 +3937,7 @@ void reset_job_priority(void) job_iterator = list_iterator_create(job_list); while ((job_ptr = (struct job_record *) list_next(job_iterator))) { - if (job_ptr->priority == 1) { + if ((job_ptr->priority == 1) && (!IS_JOB_FINISHED(job_ptr))) { _set_job_prio(job_ptr); count++; } @@ -4086,8 +4088,10 @@ int update_job(job_desc_msg_t * job_specs, uid_t uid) } if (job_specs->priority != NO_VAL) { - if (super_user - || (job_ptr->priority > job_specs->priority)) { + if (IS_JOB_FINISHED(job_ptr)) + error_code = ESLURM_DISABLED; + else if (super_user || + (job_ptr->priority > job_specs->priority)) { if(job_specs->priority == INFINITE) { job_ptr->direct_set_prio = 0; _set_job_prio(job_ptr); @@ -4106,7 +4110,7 @@ int update_job(job_desc_msg_t * job_specs, uid_t uid) } if (job_specs->nice != NICE_OFFSET) { - if (!IS_JOB_PENDING(job_ptr)) + if (IS_JOB_FINISHED(job_ptr)) error_code = ESLURM_DISABLED; else if (super_user || (job_specs->nice < NICE_OFFSET)) { job_ptr->details->nice = job_specs->nice;