diff --git a/src/slurmctld/job_mgr.c b/src/slurmctld/job_mgr.c index d9f8bf8133b739dc5fadb779e68a842d7eea7291..92f218971e40c3b9b567a775c2a762e14881fea7 100644 --- a/src/slurmctld/job_mgr.c +++ b/src/slurmctld/job_mgr.c @@ -2293,7 +2293,6 @@ extern int kill_job_by_front_end_name(char *node_name) } if (job_ptr->node_cnt == 0) { job_ptr->job_state &= (~JOB_COMPLETING); - job_hold_requeue(job_ptr); delete_step_records(job_ptr); slurm_sched_g_schedule(); } @@ -2520,7 +2519,6 @@ extern int kill_running_job_by_node_name(char *node_name) } if (job_ptr->node_cnt == 0) { job_ptr->job_state &= (~JOB_COMPLETING); - job_hold_requeue(job_ptr); delete_step_records(job_ptr); slurm_sched_g_schedule(); } @@ -10396,12 +10394,12 @@ extern int job_requeue(uid_t uid, goto reply; } - if (IS_JOB_COMPLETING(job_ptr)) { - if (IS_JOB_PENDING(job_ptr)) - goto reply; /* already requeued */ - rc = ESLURM_TRANSITION_STATE_NO_UPDATE; + /* In the process of completing or + * already requeued. + */ + if (IS_JOB_COMPLETING(job_ptr) + || (IS_JOB_PENDING(job_ptr))) goto reply; - } /* nothing else to do if pending */ if (IS_JOB_PENDING(job_ptr)) @@ -11431,7 +11429,6 @@ extern void build_cg_bitmap(struct job_record *job_ptr) job_ptr->node_bitmap_cg = bit_alloc(node_record_count); job_ptr->job_state &= (~JOB_COMPLETING); } - job_hold_requeue(job_ptr); } /* job_hold_requeue() @@ -11447,6 +11444,7 @@ void job_hold_requeue(struct job_record *job_ptr) { uint32_t state; + uint32_t flags; xassert(job_ptr); @@ -11463,7 +11461,8 @@ job_hold_requeue(struct job_record *job_ptr) * we are not requeueing the job from * job_requeue() but from job_epilog_complete(). */ - job_ptr->job_state = JOB_PENDING; + flags = job_ptr->job_state & JOB_STATE_FLAGS; + job_ptr->job_state = JOB_PENDING | flags; /* Test if user wants to requeue the job * in hold or with a special exit value. diff --git a/src/slurmctld/node_scheduler.c b/src/slurmctld/node_scheduler.c index 4f56e59baf78c5032e4484bf0577c26b5f38df8a..0b3bff92a9949fd7af7ab29d6dc0c09faae88c90 100644 --- a/src/slurmctld/node_scheduler.c +++ b/src/slurmctld/node_scheduler.c @@ -511,7 +511,6 @@ extern void deallocate_nodes(struct job_record *job_ptr, bool timeout, if ((agent_args->node_count - down_node_cnt) == 0) { job_ptr->job_state &= (~JOB_COMPLETING); - job_hold_requeue(job_ptr); delete_step_records(job_ptr); slurm_sched_g_schedule(); } @@ -2514,7 +2513,6 @@ extern void re_kill_job(struct job_record *job_ptr) ((--job_ptr->node_cnt) == 0)) { last_node_update = time(NULL); job_ptr->job_state &= (~JOB_COMPLETING); - job_hold_requeue(job_ptr); delete_step_records(job_ptr); slurm_sched_g_schedule(); } @@ -2542,7 +2540,6 @@ extern void re_kill_job(struct job_record *job_ptr) if ((job_ptr->node_cnt > 0) && ((--job_ptr->node_cnt) == 0)) { job_ptr->job_state &= (~JOB_COMPLETING); - job_hold_requeue(job_ptr); delete_step_records(job_ptr); slurm_sched_g_schedule(); last_node_update = time(NULL);