From 38f15b0666346618c550b10d443b3c0e289ed7d1 Mon Sep 17 00:00:00 2001 From: Moe Jette <jette1@llnl.gov> Date: Fri, 7 Nov 2008 21:50:51 +0000 Subject: [PATCH] Fix logic in setting default job priority, was resetting base priority to 1 after "scontrol reconfig" if there was a job in the system with a priority of 1. --- src/plugins/priority/basic/priority_basic.c | 8 +++----- src/slurmctld/job_mgr.c | 14 +++++++++----- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/plugins/priority/basic/priority_basic.c b/src/plugins/priority/basic/priority_basic.c index fe471ade8a4..fee48b2057b 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 43ab8238e84..ed65f7578fc 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; -- GitLab