diff --git a/src/slurmctld/job_scheduler.c b/src/slurmctld/job_scheduler.c index 6c682fdce8f1fe53398c07317734aa4fe1ed2f73..1a0513f68420bef9bb74ff1f792323d11c6b6a86 100644 --- a/src/slurmctld/job_scheduler.c +++ b/src/slurmctld/job_scheduler.c @@ -641,6 +641,30 @@ send_reply: return pending_jobs; } +/* Return true of all partitions have the same priority, otherwise false. */ +static bool _all_partition_priorities_same(void) +{ + struct part_record *part_ptr; + ListIterator iter; + bool part_priority_set = false; + uint32_t part_priority = 0; + bool result = true; + + iter = list_iterator_create(part_list); + while ((part_ptr = (struct part_record *) list_next(iter))) { + if (!part_priority_set) { + part_priority = part_ptr->priority; + part_priority_set = true; + } else if (part_priority != part_ptr->priority) { + result = false; + break; + } + } + list_iterator_destroy(iter); + + return result; +} + /* * schedule - attempt to schedule all pending jobs * pending jobs for each partition will be scheduled in priority @@ -692,8 +716,11 @@ extern int schedule(uint32_t job_limit) backfill_sched = true; #endif if ((strcmp(sched_type, "sched/builtin") == 0) && - (strcmp(prio_type, "priority/basic") == 0)) + (strcmp(prio_type, "priority/basic") == 0) && + _all_partition_priorities_same()) fifo_sched = true; + else + fifo_sched = false; /* Disable avoiding of fragmentation with sched/wiki */ if ((strcmp(sched_type, "sched/wiki") == 0) || (strcmp(sched_type, "sched/wiki2") == 0))