diff --git a/src/plugins/priority/multifactor/priority_multifactor.c b/src/plugins/priority/multifactor/priority_multifactor.c index 72803acafd77fa55fcd33273ed23f5b65fef4545..08c82075cdad797e4c501ea281613b8dd6974ef5 100644 --- a/src/plugins/priority/multifactor/priority_multifactor.c +++ b/src/plugins/priority/multifactor/priority_multifactor.c @@ -935,19 +935,27 @@ static void _init_grp_used_cpu_run_secs(time_t last_ran) assoc = (slurmdb_association_rec_t *) job_ptr->assoc_ptr; if (qos) { - if (priority_debug) + if (priority_debug) { info("Subtracting %"PRIu64" from qos " - "%u grp_used_cpu_run_secs " + "%s grp_used_cpu_run_secs " "%"PRIu64" = %"PRIu64"", delta, - qos->id, + qos->name, qos->usage->grp_used_cpu_run_secs, qos->usage->grp_used_cpu_run_secs - delta); - qos->usage->grp_used_cpu_run_secs -= delta; + } + if (qos->usage->grp_used_cpu_run_secs >= delta) { + qos->usage->grp_used_cpu_run_secs -= delta; + } else { + error("qos %s grp_used_cpu_run_secs underflow", + qos->name); + qos->usage->grp_used_cpu_run_secs = 0; + } } + while (assoc) { - if (priority_debug) + if (priority_debug) { info("Subtracting %"PRIu64" from assoc %u " "grp_used_cpu_run_secs " "%"PRIu64" = %"PRIu64"", @@ -956,7 +964,14 @@ static void _init_grp_used_cpu_run_secs(time_t last_ran) assoc->usage->grp_used_cpu_run_secs, assoc->usage->grp_used_cpu_run_secs - delta); - assoc->usage->grp_used_cpu_run_secs -= delta; + } + if (assoc->usage->grp_used_cpu_run_secs >= delta) { + assoc->usage->grp_used_cpu_run_secs -= delta; + } else { + error("assoc %u grp_used_cpu_run_secs " + "underflow", assoc->id); + assoc->usage->grp_used_cpu_run_secs = 0; + } assoc = assoc->usage->parent_assoc_ptr; } }