In _do_power_work() in power_save.c i_first = bit_ffs(need_resume_bitmap); if (i_first >= 0) i_last = bit_fls(need_resume_bitmap); else i_last = i_first - 1; for (i = i_first; i <= i_last; i++) { if ((resume_rate == 0) || (resume_cnt < resume_rate)) { resume_cnt++; resume_cnt_f++; bit_set(job_power_node_bitmap, i); bit_set(to_resume_bitmap, i); } } This for loop obviously needs this check: if (!bit_test(need_resume_bitmap, i)) continue; Or else any non continuous set of nodes requested to resume could get nodes in between them resuming instead of the requested nodes.
Created attachment 25040 [details] v1
Reproducer: slurm.conf ResumeRate=2 srun --nodelist=node0,node3 hostname sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST debug up infinite 1 mix# node0 debug up infinite 1 idle# node1 debug up infinite 1 mix~ node3
Thanks Scott! Great find! fd1ea63a6d Fix resuming nodes not part of an allocation
*** Ticket 14138 has been marked as a duplicate of this ticket. ***