diff --git a/NEWS b/NEWS index 1afd980e89176a62d9afc0aa496a157ade8d443b..e115339b7027f7255269898f4930912fa9138955 100644 --- a/NEWS +++ b/NEWS @@ -304,6 +304,9 @@ documents those changes that are of interest to users and administrators. can work on a BGAS node. -- Prevent job stuck in configuring state if slurmctld daemon restarted while PrologSlurmctld is running. + -- Handle association correctly if using FAIR_TREE as well as shares=Parent + -- Fix race condition when setting priority of a job and the association + doesn't have a parent. * Changes in Slurm 15.08.12 =========================== diff --git a/src/common/assoc_mgr.c b/src/common/assoc_mgr.c index 622320750723c165fd6ca864345e35ee12aa86e2..707063badd139332db2e04a9714afae5a45b73f4 100644 --- a/src/common/assoc_mgr.c +++ b/src/common/assoc_mgr.c @@ -315,8 +315,11 @@ static void _normalize_assoc_shares_fair_tree( { slurmdb_assoc_rec_t *fs_assoc = assoc; double shares_norm = 0.0; - if (assoc->shares_raw == SLURMDB_FS_USE_PARENT) + + if ((assoc->shares_raw == SLURMDB_FS_USE_PARENT) + && assoc->usage->fs_assoc_ptr) fs_assoc = assoc->usage->fs_assoc_ptr; + if (fs_assoc->usage->level_shares) shares_norm = (double)fs_assoc->shares_raw / diff --git a/src/plugins/priority/multifactor/priority_multifactor.c b/src/plugins/priority/multifactor/priority_multifactor.c index cc7c4d71ab0b6c193e9f2b16e1727b1896a3f4c5..d8c0a72db39ccf92e944dfbfa324f92e59925167 100644 --- a/src/plugins/priority/multifactor/priority_multifactor.c +++ b/src/plugins/priority/multifactor/priority_multifactor.c @@ -430,8 +430,7 @@ static int _set_children_usage_efctv(List children_list) */ static double _get_fairshare_priority(struct job_record *job_ptr) { - slurmdb_assoc_rec_t *job_assoc = - (slurmdb_assoc_rec_t *)job_ptr->assoc_ptr; + slurmdb_assoc_rec_t *job_assoc; slurmdb_assoc_rec_t *fs_assoc = NULL; double priority_fs = 0.0; assoc_mgr_lock_t locks = { READ_LOCK, NO_LOCK, NO_LOCK, NO_LOCK, @@ -440,7 +439,12 @@ static double _get_fairshare_priority(struct job_record *job_ptr) if (!calc_fairshare) return 0; + assoc_mgr_lock(&locks); + + job_assoc = (slurmdb_assoc_rec_t *)job_ptr->assoc_ptr; + if (!job_assoc) { + assoc_mgr_unlock(&locks); error("Job %u has no association. Unable to " "compute fairshare.", job_ptr->job_id); return 0; @@ -452,8 +456,6 @@ static double _get_fairshare_priority(struct job_record *job_ptr) else fs_assoc = job_assoc; - assoc_mgr_lock(&locks); - if (fuzzy_equal(fs_assoc->usage->usage_efctv, NO_VAL)) priority_p_set_assoc_usage(fs_assoc);