diff --git a/src/common/assoc_mgr.c b/src/common/assoc_mgr.c index 4398b4f9df8613d5b921db85d49fea0f903b9548..0dc099b420a2b6718182bf636a4e3d7947d2bfed 100644 --- a/src/common/assoc_mgr.c +++ b/src/common/assoc_mgr.c @@ -296,7 +296,7 @@ static int _set_assoc_parent_and_user(acct_association_rec_t *assoc, return SLURM_SUCCESS; } - + static int _post_association_list(List assoc_list) { acct_association_rec_t *assoc = NULL; @@ -341,7 +341,7 @@ static int _post_association_list(List assoc_list) //END_TIMER2("load_associations"); return SLURM_SUCCESS; } - + static int _post_user_list(List user_list) { acct_user_rec_t *user = NULL; @@ -1517,7 +1517,11 @@ extern List assoc_mgr_get_shares(void *db_conn, share->user = 1; } else { share->name = xstrdup(assoc->acct); - share->parent = xstrdup(assoc->parent_acct); + if(!assoc->parent_acct && assoc->parent_assoc_ptr) + share->parent = + xstrdup(assoc->parent_assoc_ptr->acct); + else + share->parent = xstrdup(assoc->parent_acct); } share->usage_norm = (double)assoc->usage_norm; share->usage_efctv = (double)assoc->usage_efctv; @@ -1743,7 +1747,7 @@ extern int assoc_mgr_update_assocs(acct_update_object_t *update) ListIterator itr2 = NULL; if(!object->childern_list || !list_count(object->childern_list)) - continue; + goto is_user; itr2 = list_iterator_create( object->childern_list); while((rec = list_next(itr2))) @@ -1753,7 +1757,7 @@ extern int assoc_mgr_update_assocs(acct_update_object_t *update) rec->level_shares = count; list_iterator_destroy(itr2); } - + is_user: if(!object->user) continue; @@ -1776,7 +1780,7 @@ extern int assoc_mgr_update_assocs(acct_update_object_t *update) list_iterator_reset(itr); while((object = list_next(itr))) { _normalize_assoc_shares(object); - log_assoc_rec(rec, assoc_mgr_qos_list); + log_assoc_rec(object, assoc_mgr_qos_list); } slurm_mutex_unlock(&assoc_mgr_qos_lock); } @@ -2570,3 +2574,4 @@ extern int assoc_mgr_refresh_lists(void *db_conn, assoc_init_args_t *args) return SLURM_SUCCESS; } + diff --git a/src/common/slurm_accounting_storage.c b/src/common/slurm_accounting_storage.c index bc21fcea150de158bd0e6d475e45bacfd0038f23..bc56ddc0ecfee5d914d0212e12aece81009ff935 100644 --- a/src/common/slurm_accounting_storage.c +++ b/src/common/slurm_accounting_storage.c @@ -7017,6 +7017,8 @@ extern char *get_qos_complete_str(List qos_list, List num_qos_list) extern void log_assoc_rec(acct_association_rec_t *assoc_ptr, List qos_list) { + xassert(assoc_ptr); + debug2("association rec id : %u", assoc_ptr->id); debug2(" acct : %s", assoc_ptr->acct); debug2(" cluster : %s", assoc_ptr->cluster); diff --git a/src/plugins/priority/multifactor/priority_multifactor.c b/src/plugins/priority/multifactor/priority_multifactor.c index 92eadc46b618543ae14bae4a011c8853e5fcb810..c9201a03eb1906dfc98e96949ac2e104955e382c 100644 --- a/src/plugins/priority/multifactor/priority_multifactor.c +++ b/src/plugins/priority/multifactor/priority_multifactor.c @@ -486,12 +486,12 @@ static void *_decay_thread(void *no_data) } if(!last_ran) - goto sleep_now; + goto get_usage; else run_delta = (start_time - last_ran); if(run_delta <= 0) - goto sleep_now; + goto get_usage; real_decay = pow(decay_factor, (double)run_delta); @@ -583,12 +583,12 @@ static void *_decay_thread(void *no_data) list_iterator_destroy(itr); unlock_slurmctld(job_write_lock); + get_usage: /* now calculate all the normalized usage here */ slurm_mutex_lock(&assoc_mgr_association_lock); _set_children_usage_efctv(assoc_mgr_root_assoc->childern_list); slurm_mutex_unlock(&assoc_mgr_association_lock); - sleep_now: last_ran = start_time; _write_last_decay_ran(last_ran);