static bool _valid_job_assoc(struct job_record *job_ptr) { slurmdb_association_rec_t assoc_rec, *assoc_ptr; assoc_ptr = (slurmdb_association_rec_t *)job_ptr->assoc_ptr; if ((assoc_ptr == NULL) || (assoc_ptr->id != job_ptr->assoc_id) || (assoc_ptr->uid != job_ptr->user_id)) { error("Invalid assoc_ptr for jobid=%u", job_ptr->job_id); memset(&assoc_rec, 0, sizeof(slurmdb_association_rec_t)); if(job_ptr->assoc_id) assoc_rec.id = job_ptr->assoc_id; else { assoc_rec.uid = job_ptr->user_id; assoc_rec.partition = job_ptr->partition; assoc_rec.acct = job_ptr->account; } if (assoc_mgr_fill_in_assoc(acct_db_conn, &assoc_rec, accounting_enforce, (slurmdb_association_rec_t **) &job_ptr->assoc_ptr)) { info("_validate_job_assoc: invalid account or " "partition for uid=%u jobid=%u", job_ptr->user_id, job_ptr->job_id); return false; } job_ptr->assoc_id = assoc_rec.id; } return true; }
/* Get the default QOS for an association (or NULL if not present) */ static char *_get_default_qos(uint32_t user_id, char *account, char *partition) { slurmdb_assoc_rec_t assoc; slurmdb_assoc_rec_t *assoc_ptr; slurmdb_qos_rec_t qos; uint32_t qos_id; memset(&assoc, 0, sizeof(slurmdb_assoc_rec_t)); assoc.uid = user_id; assoc.partition = partition; if (account) { assoc.acct = account; } else { assoc.acct = _get_default_account(user_id); } if (assoc_mgr_fill_in_assoc(acct_db_conn, &assoc, 0, &assoc_ptr, false) != SLURM_ERROR) { qos_id = assoc_ptr->def_qos_id; } else { return NULL; } if (!qos_id) { return NULL; } memset(&qos, 0, sizeof(slurmdb_qos_rec_t)); qos.id = qos_id; if (assoc_mgr_fill_in_qos(acct_db_conn, &qos, 0, NULL, false) != SLURM_ERROR) { return qos.name; } else { return NULL; } }
/* * mcs_p_check_mcs_label() is called to check mcs_label. */ extern int mcs_p_check_mcs_label(uint32_t user_id, char *mcs_label) { slurmdb_assoc_rec_t assoc_rec; int rc = SLURM_SUCCESS; memset(&assoc_rec, 0, sizeof(slurmdb_assoc_rec_t)); assoc_rec.acct = mcs_label; assoc_rec.uid = user_id; if (mcs_label != NULL) { if (!assoc_mgr_fill_in_assoc(acct_db_conn, &assoc_rec, accounting_enforce, (slurmdb_assoc_rec_t **) NULL, false)) rc = SLURM_SUCCESS; else rc = SLURM_ERROR; } return rc; }