/* 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; } }
/* Get fields in the job request record on job submit or modify */ static int _get_job_req_field (lua_State *L) { const struct job_descriptor *job_desc = lua_touserdata(L, 1); const char *name = luaL_checkstring(L, 2); if (job_desc == NULL) { error("_get_job_req_field: job_desc is NULL"); lua_pushnil (L); } else if (!strcmp(name, "account")) { lua_pushstring (L, job_desc->account); } else if (!strcmp(name, "acctg_freq")) { lua_pushstring (L, job_desc->acctg_freq); } else if (!strcmp(name, "begin_time")) { lua_pushnumber (L, job_desc->begin_time); } else if (!strcmp(name, "comment")) { lua_pushstring (L, job_desc->comment); } else if (!strcmp(name, "contiguous")) { lua_pushnumber (L, job_desc->contiguous); } else if (!strcmp(name, "cores_per_socket")) { lua_pushnumber (L, job_desc->cores_per_socket); } else if (!strcmp(name, "default_account")) { lua_pushstring (L, _get_default_account(job_desc->user_id)); } else if (!strcmp(name, "dependency")) { lua_pushstring (L, job_desc->dependency); } else if (!strcmp(name, "end_time")) { lua_pushnumber (L, job_desc->end_time); } else if (!strcmp(name, "exc_nodes")) { lua_pushstring (L, job_desc->exc_nodes); } else if (!strcmp(name, "features")) { lua_pushstring (L, job_desc->features); } else if (!strcmp(name, "gres")) { lua_pushstring (L, job_desc->gres); } else if (!strcmp(name, "group_id")) { lua_pushnumber (L, job_desc->group_id); } else if (!strcmp(name, "licenses")) { lua_pushstring (L, job_desc->licenses); } else if (!strcmp(name, "max_cpus")) { lua_pushnumber (L, job_desc->max_cpus); } else if (!strcmp(name, "max_nodes")) { lua_pushnumber (L, job_desc->max_nodes); } else if (!strcmp(name, "min_cpus")) { lua_pushnumber (L, job_desc->min_cpus); } else if (!strcmp(name, "min_nodes")) { lua_pushnumber (L, job_desc->min_nodes); } else if (!strcmp(name, "name")) { lua_pushstring (L, job_desc->name); } else if (!strcmp(name, "nice")) { lua_pushnumber (L, job_desc->nice); } else if (!strcmp(name, "ntasks_per_node")) { lua_pushnumber (L, job_desc->ntasks_per_node); } else if (!strcmp(name, "num_tasks")) { lua_pushnumber (L, job_desc->num_tasks); } else if (!strcmp(name, "partition")) { lua_pushstring (L, job_desc->partition); } else if (!strcmp(name, "pn_min_cpus")) { lua_pushnumber (L, job_desc->pn_min_cpus); } else if (!strcmp(name, "pn_min_memory")) { lua_pushnumber (L, job_desc->pn_min_memory); } else if (!strcmp(name, "pn_min_tmp_disk")) { lua_pushnumber (L, job_desc->pn_min_tmp_disk); } else if (!strcmp(name, "priority")) { lua_pushnumber (L, job_desc->priority); } else if (!strcmp(name, "qos")) { lua_pushstring (L, job_desc->qos); } else if (!strcmp(name, "req_nodes")) { lua_pushstring (L, job_desc->req_nodes); } else if (!strcmp(name, "req_switch")) { lua_pushnumber (L, job_desc->req_switch); } else if (!strcmp(name, "requeue")) { lua_pushnumber (L, job_desc->requeue); } else if (!strcmp(name, "reservation")) { lua_pushstring (L, job_desc->reservation); } else if (!strcmp(name, "shared")) { lua_pushnumber (L, job_desc->shared); } else if (!strcmp(name, "sockets_per_node")) { lua_pushnumber (L, job_desc->sockets_per_node); } else if (!strcmp(name, "std_err")) { lua_pushstring (L, job_desc->std_err); } else if (!strcmp(name, "std_in")) { lua_pushstring (L, job_desc->std_in); } else if (!strcmp(name, "std_out")) { lua_pushstring (L, job_desc->std_out); } else if (!strcmp(name, "threads_per_core")) { lua_pushnumber (L, job_desc->threads_per_core); } else if (!strcmp(name, "time_limit")) { lua_pushnumber (L, job_desc->time_limit); } else if (!strcmp(name, "time_min")) { lua_pushnumber (L, job_desc->time_min); } else if (!strcmp(name, "user_id")) { lua_pushnumber (L, job_desc->user_id); } else if (!strcmp(name, "wait4switch")) { lua_pushnumber (L, job_desc->wait4switch); } else if (!strcmp(name, "work_dir")) { lua_pushstring (L, job_desc->work_dir); } else if (!strcmp(name, "wckey")) { lua_pushstring (L, job_desc->wckey); } else if (!strcmp(name, "ntasks_per_core")) { lua_pushnumber (L, job_desc->ntasks_per_core); } else if (!strcmp(name, "boards_per_node")) { lua_pushnumber (L, job_desc->boards_per_node); } else if (!strcmp(name, "ntasks_per_board")) { lua_pushnumber (L, job_desc->ntasks_per_board); } else if (!strcmp(name, "ntasks_per_socket")) { lua_pushnumber (L, job_desc->ntasks_per_socket); } else if (!strcmp(name, "sockets_per_board")) { lua_pushnumber (L, job_desc->sockets_per_board); } else { lua_pushnil (L); } return 1; }
static int _get_job_req_field(const struct job_descriptor *job_desc, const char *name) { int i; if (job_desc == NULL) { error("%s: job_desc is NULL", __func__); lua_pushnil (L); } else if (!strcmp(name, "account")) { lua_pushstring (L, job_desc->account); } else if (!strcmp(name, "acctg_freq")) { lua_pushstring (L, job_desc->acctg_freq); } else if (!strcmp(name, "alloc_node")) { lua_pushstring (L, job_desc->alloc_node); } else if (!strcmp(name, "begin_time")) { lua_pushnumber (L, job_desc->begin_time); } else if (!strcmp(name, "boards_per_node")) { lua_pushnumber (L, job_desc->boards_per_node); } else if (!strcmp(name, "burst_buffer")) { lua_pushstring (L, job_desc->burst_buffer); } else if (!strcmp(name, "clusters")) { lua_pushstring (L, job_desc->clusters); } else if (!strcmp(name, "comment")) { lua_pushstring (L, job_desc->comment); } else if (!strcmp(name, "contiguous")) { lua_pushnumber (L, job_desc->contiguous); } else if (!strcmp(name, "cores_per_socket")) { lua_pushnumber (L, job_desc->cores_per_socket); } else if (!strcmp(name, "cpu_freq_min")) { lua_pushnumber (L, job_desc->cpu_freq_min); } else if (!strcmp(name, "cpu_freq_max")) { lua_pushnumber (L, job_desc->cpu_freq_max); } else if (!strcmp(name, "cpu_freq_gov")) { lua_pushnumber (L, job_desc->cpu_freq_gov); } else if (!strcmp(name, "cpus_per_task")) { lua_pushnumber (L, job_desc->cpus_per_task); } else if (!strcmp(name, "default_account")) { lua_pushstring (L, _get_default_account(job_desc->user_id)); } else if (!strcmp(name, "default_qos")) { lua_pushstring (L, _get_default_qos(job_desc->user_id, job_desc->account, job_desc->partition)); } else if (!strcmp(name, "dependency")) { lua_pushstring (L, job_desc->dependency); } else if (!strcmp(name, "end_time")) { lua_pushnumber (L, job_desc->end_time); } else if (!strcmp(name, "environment")) { _push_job_env ((struct job_descriptor *)job_desc); // No const } else if (!strcmp(name, "exc_nodes")) { lua_pushstring (L, job_desc->exc_nodes); } else if (!strcmp(name, "features")) { lua_pushstring (L, job_desc->features); } else if (!strcmp(name, "gres")) { lua_pushstring (L, job_desc->gres); } else if (!strcmp(name, "group_id")) { lua_pushnumber (L, job_desc->group_id); } else if (!strcmp(name, "licenses")) { lua_pushstring (L, job_desc->licenses); } else if (!strcmp(name, "mail_type")) { lua_pushnumber (L, job_desc->mail_type); } else if (!strcmp(name, "mail_user")) { lua_pushstring (L, job_desc->mail_user); } else if (!strcmp(name, "max_cpus")) { lua_pushnumber (L, job_desc->max_cpus); } else if (!strcmp(name, "max_nodes")) { lua_pushnumber (L, job_desc->max_nodes); } else if (!strcmp(name, "min_cpus")) { lua_pushnumber (L, job_desc->min_cpus); } else if (!strcmp(name, "min_nodes")) { lua_pushnumber (L, job_desc->min_nodes); } else if (!strcmp(name, "name")) { lua_pushstring (L, job_desc->name); } else if (!strcmp(name, "nice")) { lua_pushnumber (L, job_desc->nice); } else if (!strcmp(name, "ntasks_per_board")) { lua_pushnumber (L, job_desc->ntasks_per_board); } else if (!strcmp(name, "ntasks_per_core")) { lua_pushnumber (L, job_desc->ntasks_per_core); } else if (!strcmp(name, "ntasks_per_node")) { lua_pushnumber (L, job_desc->ntasks_per_node); } else if (!strcmp(name, "ntasks_per_socket")) { lua_pushnumber (L, job_desc->ntasks_per_socket); } else if (!strcmp(name, "num_tasks")) { lua_pushnumber (L, job_desc->num_tasks); } else if (!strcmp(name, "partition")) { lua_pushstring (L, job_desc->partition); } else if (!strcmp(name, "power_flags")) { lua_pushnumber (L, job_desc->power_flags); } else if (!strcmp(name, "pn_min_cpus")) { lua_pushnumber (L, job_desc->pn_min_cpus); } else if (!strcmp(name, "pn_min_memory")) { lua_pushnumber (L, job_desc->pn_min_memory); } else if (!strcmp(name, "pn_min_tmp_disk")) { lua_pushnumber (L, job_desc->pn_min_tmp_disk); } else if (!strcmp(name, "priority")) { lua_pushnumber (L, job_desc->priority); } else if (!strcmp(name, "qos")) { lua_pushstring (L, job_desc->qos); } else if (!strcmp(name, "req_nodes")) { lua_pushstring (L, job_desc->req_nodes); } else if (!strcmp(name, "req_switch")) { lua_pushnumber (L, job_desc->req_switch); } else if (!strcmp(name, "requeue")) { lua_pushnumber (L, job_desc->requeue); } else if (!strcmp(name, "reservation")) { lua_pushstring (L, job_desc->reservation); } else if (!strcmp(name, "script")) { lua_pushstring (L, job_desc->script); } else if (!strcmp(name, "shared")) { lua_pushnumber (L, job_desc->shared); } else if (!strcmp(name, "sockets_per_board")) { lua_pushnumber (L, job_desc->sockets_per_board); } else if (!strcmp(name, "sockets_per_node")) { lua_pushnumber (L, job_desc->sockets_per_node); } else if (!strcmp(name, "spank_job_env")) { if ((job_desc->spank_job_env_size == 0) || (job_desc->spank_job_env == NULL)) { lua_pushnil (L); } else { lua_newtable(L); for (i = 0; i < job_desc->spank_job_env_size; i++) { if (job_desc->spank_job_env[i] != NULL) { lua_pushnumber (L, i); lua_pushstring (L, job_desc->spank_job_env[i]); lua_settable (L, -3); } } } } else if (!strcmp(name, "spank_job_env_size")) { lua_pushnumber (L, job_desc->spank_job_env_size); } else if (!strcmp(name, "std_err")) { lua_pushstring (L, job_desc->std_err); } else if (!strcmp(name, "std_in")) { lua_pushstring (L, job_desc->std_in); } else if (!strcmp(name, "std_out")) { lua_pushstring (L, job_desc->std_out); } else if (!strcmp(name, "threads_per_core")) { lua_pushnumber (L, job_desc->threads_per_core); } else if (!strcmp(name, "time_limit")) { lua_pushnumber (L, job_desc->time_limit); } else if (!strcmp(name, "time_min")) { lua_pushnumber (L, job_desc->time_min); } else if (!strcmp(name, "user_id")) { lua_pushnumber (L, job_desc->user_id); } else if (!strcmp(name, "wait4switch")) { lua_pushnumber (L, job_desc->wait4switch); } else if (!strcmp(name, "work_dir")) { lua_pushstring (L, job_desc->work_dir); } else if (!strcmp(name, "wckey")) { lua_pushstring (L, job_desc->wckey); } else { lua_pushnil (L); } return 1; }