diff --git a/NEWS b/NEWS index 4f31eac5d832c9a284698555b462cbb5269f3182..664d2ab7113a9937b351a1f5664e8ba246a20a9b 100644 --- a/NEWS +++ b/NEWS @@ -294,6 +294,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 16fd1298f1ca282af22f397aa580e0f864ade302..65ec5a79fa418bc02836415c4cd497d1ca871015 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 617303a158e1c621f30c7dd510c1f2fef0315648..5843b6d788d5ccd3bcd173d5fc30ffa1f3897ebe 100644 --- a/src/plugins/priority/multifactor/priority_multifactor.c +++ b/src/plugins/priority/multifactor/priority_multifactor.c @@ -445,8 +445,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, @@ -455,7 +454,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; @@ -467,8 +471,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);