diff --git a/src/slurmctld/acct_policy.c b/src/slurmctld/acct_policy.c index 59e15c205dd0a7546cdfbe35ab3a185362a6ec18..c50b8fe59bbdf68845e4e8a5256c5f67a7f15ea6 100644 --- a/src/slurmctld/acct_policy.c +++ b/src/slurmctld/acct_policy.c @@ -475,38 +475,11 @@ static void _qos_adjust_limit_usage(int type, struct job_record *job_ptr, if (!qos_ptr || !assoc_ptr) return; - if (!qos_ptr->usage->acct_limit_list) - qos_ptr->usage->acct_limit_list = - list_create(slurmdb_destroy_used_limits); + used_limits_a = _get_acct_used_limits(&qos_ptr->usage->acct_limit_list, + assoc_ptr->acct); - if (!(used_limits_a = list_find_first(qos_ptr->usage->acct_limit_list, - _find_used_limits_for_acct, - assoc_ptr->acct))) { - used_limits_a = xmalloc(sizeof(slurmdb_used_limits_t)); - used_limits_a->acct = xstrdup(assoc_ptr->acct); - - i = sizeof(uint64_t) * slurmctld_tres_cnt; - used_limits_a->tres = xmalloc(i); - used_limits_a->tres_run_mins = xmalloc(i); - - list_append(qos_ptr->usage->acct_limit_list, used_limits_a); - } - - if (!qos_ptr->usage->user_limit_list) - qos_ptr->usage->user_limit_list = - list_create(slurmdb_destroy_used_limits); - if (!(used_limits = list_find_first(qos_ptr->usage->user_limit_list, - _find_used_limits_for_user, - &job_ptr->user_id))) { - used_limits = xmalloc(sizeof(slurmdb_used_limits_t)); - used_limits->uid = job_ptr->user_id; - - i = sizeof(uint64_t) * slurmctld_tres_cnt; - used_limits->tres = xmalloc(i); - used_limits->tres_run_mins = xmalloc(i); - - list_append(qos_ptr->usage->user_limit_list, used_limits); - } + used_limits = _get_user_used_limits(&qos_ptr->usage->user_limit_list, + job_ptr->user_id); switch(type) { case ACCT_POLICY_ADD_SUBMIT: @@ -1549,7 +1522,6 @@ static int _qos_job_runnable_pre_select(struct job_record *job_ptr, uint32_t time_limit = NO_VAL; int rc = true; slurmdb_used_limits_t *used_limits = NULL, *used_limits_a = NULL; - bool free_used_limits = false, free_used_limits_a = false; bool safe_limits = false; slurmdb_assoc_rec_t *assoc_ptr = job_ptr->assoc_ptr; @@ -1564,32 +1536,12 @@ static int _qos_job_runnable_pre_select(struct job_record *job_ptr, wall_mins = qos_ptr->usage->grp_used_wall / 60; - /* - * Try to get the used limits for the account or initialise a local - * nullified one if not available. - */ - if (!qos_ptr->usage->acct_limit_list || - !(used_limits_a = list_find_first(qos_ptr->usage->acct_limit_list, - _find_used_limits_for_acct, - assoc_ptr->acct))) { - used_limits_a = xmalloc(sizeof(slurmdb_used_limits_t)); - used_limits_a->acct = assoc_ptr->acct; /* Just point to - it, don't copy. */ - free_used_limits_a = true; - } + used_limits_a = _get_acct_used_limits(&qos_ptr->usage->acct_limit_list, + assoc_ptr->acct); + + used_limits = _get_user_used_limits(&qos_ptr->usage->user_limit_list, + job_ptr->user_id); - /* - * Try to get the used limits for the user or initialise a local - * nullified one if not available. - */ - if (!qos_ptr->usage->user_limit_list || - !(used_limits = list_find_first(qos_ptr->usage->user_limit_list, - _find_used_limits_for_user, - &job_ptr->user_id))) { - used_limits = xmalloc(sizeof(slurmdb_used_limits_t)); - used_limits->uid = job_ptr->user_id; - free_used_limits = true; - } /* we don't need to check grp_tres_mins here */ @@ -1754,12 +1706,6 @@ static int _qos_job_runnable_pre_select(struct job_record *job_ptr, } end_it: - if (free_used_limits) - xfree(used_limits); - - if (free_used_limits_a) - xfree(used_limits_a); - return rc; } @@ -1772,7 +1718,6 @@ static int _qos_job_runnable_post_select(struct job_record *job_ptr, uint64_t tres_usage_mins[slurmctld_tres_cnt]; uint64_t tres_run_mins[slurmctld_tres_cnt]; slurmdb_used_limits_t *used_limits = NULL, *used_limits_a = NULL; - bool free_used_limits = false, free_used_limits_a = false; bool safe_limits = false; int rc = true; int i, tres_pos = 0; @@ -1797,33 +1742,11 @@ static int _qos_job_runnable_post_select(struct job_record *job_ptr, (uint64_t)(qos_ptr->usage->usage_tres_raw[i] / 60.0); } - /* - * Try to get the used limits for the account or initialise a local - * nullified one if not available. - */ - if (!qos_ptr->usage->acct_limit_list || - !(used_limits_a = list_find_first(qos_ptr->usage->acct_limit_list, - _find_used_limits_for_acct, - assoc_ptr->acct))) { - used_limits_a = xmalloc(sizeof(slurmdb_used_limits_t)); - used_limits_a->acct = assoc_ptr->acct; /* Just point to - it, don't copy. */ - free_used_limits_a = true; - } + used_limits_a = _get_acct_used_limits(&qos_ptr->usage->acct_limit_list, + assoc_ptr->acct); - - /* - * Try to get the used limits for the user or initialize a local - * nullified one if not available. - */ - if (!qos_ptr->usage->user_limit_list || - !(used_limits = list_find_first(qos_ptr->usage->user_limit_list, - _find_used_limits_for_user, - &job_ptr->user_id))) { - used_limits = xmalloc(sizeof(slurmdb_used_limits_t)); - used_limits->uid = job_ptr->user_id; - free_used_limits = true; - } + used_limits = _get_user_used_limits(&qos_ptr->usage->user_limit_list, + job_ptr->user_id); i = _validate_tres_usage_limits_for_qos( &tres_pos, qos_ptr->grp_tres_mins_ctld, @@ -2213,18 +2136,13 @@ static int _qos_job_runnable_post_select(struct job_record *job_ptr, /* We do not need to check max_jobs_pu here */ -end_it: /* we don't need to check submit_jobs_pa here */ /* we don't need to check submit_jobs_pu here */ /* we don't need to check max_wall_pj here */ - if (free_used_limits) - xfree(used_limits); - - if (free_used_limits_a) - xfree(used_limits_a); +end_it: return rc; }