From 635c0da5900163c9e545203da2d3cbad43b798e7 Mon Sep 17 00:00:00 2001 From: Moe Jette <jette1@llnl.gov> Date: Tue, 20 Jul 2010 20:01:09 +0000 Subject: [PATCH] prevent scontrol hold/release commands for non-pending jobs --- src/scontrol/update_job.c | 20 ++++++++++---------- src/slurmctld/job_mgr.c | 21 ++++++++------------- 2 files changed, 18 insertions(+), 23 deletions(-) diff --git a/src/scontrol/update_job.c b/src/scontrol/update_job.c index 8c76f99c476..d210192f9fb 100644 --- a/src/scontrol/update_job.c +++ b/src/scontrol/update_job.c @@ -207,6 +207,7 @@ scontrol_hold(char *op, char *job_id_str) int rc = SLURM_SUCCESS; char *next_str; job_desc_msg_t job_msg; + uint16_t job_state; slurm_init_job_desc_msg (&job_msg); @@ -223,19 +224,18 @@ scontrol_hold(char *op, char *job_id_str) return 0; } + job_state = scontrol_get_job_state(job_msg.job_id); + if (job_state == (uint16_t) NO_VAL) + return SLURM_ERROR; + if ((job_state & JOB_STATE_BASE) != JOB_PENDING) { + slurm_seterrno(ESLURM_JOB_NOT_PENDING); + return ESLURM_JOB_NOT_PENDING; + } + if (strncasecmp(op, "hold", MAX(strlen(op), 4)) == 0) job_msg.priority = 0; - else { - uint16_t job_state = scontrol_get_job_state(job_msg.job_id); - if (job_state == (uint16_t) NO_VAL) - return SLURM_ERROR; - if ((job_state & JOB_STATE_BASE) != JOB_PENDING) { - slurm_seterrno(ESLURM_JOB_NOT_PENDING); - return ESLURM_JOB_NOT_PENDING; - } + else job_msg.priority = 1; - } - if (slurm_update_job(&job_msg)) return slurm_get_errno(); return rc; diff --git a/src/slurmctld/job_mgr.c b/src/slurmctld/job_mgr.c index 8f476cdfc15..8b1962b90ed 100644 --- a/src/slurmctld/job_mgr.c +++ b/src/slurmctld/job_mgr.c @@ -6041,10 +6041,12 @@ int update_job(job_desc_msg_t * job_specs, uid_t uid) */ if (IS_JOB_FINISHED(job_ptr) || (detail_ptr == NULL)) error_code = ESLURM_DISABLED; + else if (job_ptr->priority == job_specs->priority) + debug("update_job: setting priority to current value"); else if (super_user || (job_ptr->priority > job_specs->priority)) { job_ptr->details->nice = NICE_OFFSET; - if(job_specs->priority == INFINITE) { + if (job_specs->priority == INFINITE) { job_ptr->direct_set_prio = 0; _set_job_prio(job_ptr); } else { @@ -6056,18 +6058,11 @@ int update_job(job_desc_msg_t * job_specs, uid_t uid) job_specs->job_id); update_accounting = true; if (job_ptr->priority == 0) { - if (!IS_JOB_PENDING(job_ptr)) { - error_code = ESLURM_JOB_NOT_PENDING; - } else { - if (super_user) { - job_ptr->state_reason = - WAIT_HELD; - } else { - job_ptr->state_reason = - WAIT_HELD_USER; - } - xfree(job_ptr->state_desc); - } + if (super_user) + job_ptr->state_reason = WAIT_HELD; + else + job_ptr->state_reason = WAIT_HELD_USER; + xfree(job_ptr->state_desc); } } else if ((job_ptr->priority == 0) && (job_ptr->state_reason == WAIT_HELD_USER)) { -- GitLab