Skip to content
Snippets Groups Projects
Commit 0936bd91 authored by Don Lipari's avatar Don Lipari
Browse files

Updated hv_to_job_desc_msg() in alloc.c to match job_desc_msg_t def in slurm.h

parent 43402f00
No related branches found
No related tags found
No related merge requests found
...@@ -29,8 +29,42 @@ hv_to_job_desc_msg(HV* hv, job_desc_msg_t* job_desc_msg) ...@@ -29,8 +29,42 @@ hv_to_job_desc_msg(HV* hv, job_desc_msg_t* job_desc_msg)
slurm_init_job_desc_msg(job_desc_msg); slurm_init_job_desc_msg(job_desc_msg);
FETCH_FIELD(hv, job_desc_msg, account, charp, FALSE);
FETCH_FIELD(hv, job_desc_msg, acctg_freq, uint16_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, alloc_node, charp, FALSE);
FETCH_FIELD(hv, job_desc_msg, alloc_resp_port, uint16_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, alloc_sid, uint32_t, FALSE);
/* argv, argc */
if((svp = hv_fetch(hv, "argv", 4, FALSE))) {
if(SvROK(*svp) && SvTYPE(SvRV(*svp)) == SVt_PVAV) {
argv_av = (AV*)SvRV(*svp);
job_desc_msg->argc = av_len(argv_av) + 1;
if (job_desc_msg->argc > 0) {
Newz(0, job_desc_msg->argv, (int32_t)(job_desc_msg->argc + 1), char*);
for(i = 0; i < job_desc_msg->argc; i ++) {
if((svp = av_fetch(argv_av, i, FALSE)))
*(job_desc_msg->argv + i) = (char*) SvPV_nolen(*svp);
else {
Perl_warn(aTHX_ "error fetching `argv' of job descriptor");
free_job_desc_msg_memory(job_desc_msg);
return -1;
}
}
}
} else {
Perl_warn(aTHX_ "`argv' of job descriptor is not an array reference, ignored");
}
}
FETCH_FIELD(hv, job_desc_msg, begin_time, time_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, ckpt_interval, uint16_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, ckpt_dir, charp, FALSE);
FETCH_FIELD(hv, job_desc_msg, comment, charp, FALSE);
FETCH_FIELD(hv, job_desc_msg, contiguous, uint16_t, FALSE); FETCH_FIELD(hv, job_desc_msg, contiguous, uint16_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, kill_on_node_fail, uint16_t, FALSE); FETCH_FIELD(hv, job_desc_msg, cpu_bind, charp, FALSE);
FETCH_FIELD(hv, job_desc_msg, cpu_bind_type, uint16_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, dependency, charp, FALSE);
FETCH_FIELD(hv, job_desc_msg, end_time, time_t, FALSE);
/* environment, env_size */ /* environment, env_size */
if((svp = hv_fetch(hv, "environment", 11, FALSE))) { if((svp = hv_fetch(hv, "environment", 11, FALSE))) {
if(SvROK(*svp) && SvTYPE(SvRV(*svp)) == SVt_PVHV) { if(SvROK(*svp) && SvTYPE(SvRV(*svp)) == SVt_PVHV) {
...@@ -52,20 +86,45 @@ hv_to_job_desc_msg(HV* hv, job_desc_msg_t* job_desc_msg) ...@@ -52,20 +86,45 @@ hv_to_job_desc_msg(HV* hv, job_desc_msg_t* job_desc_msg)
Perl_warn(aTHX_ "`environment' of job descriptor is not a hash reference, ignored"); Perl_warn(aTHX_ "`environment' of job descriptor is not a hash reference, ignored");
} }
} }
FETCH_FIELD(hv, job_desc_msg, exc_nodes, charp, FALSE);
FETCH_FIELD(hv, job_desc_msg, features, charp, FALSE); FETCH_FIELD(hv, job_desc_msg, features, charp, FALSE);
FETCH_FIELD(hv, job_desc_msg, reservation, charp, FALSE); FETCH_FIELD(hv, job_desc_msg, group_id, uint32_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, immediate, uint16_t, FALSE); FETCH_FIELD(hv, job_desc_msg, immediate, uint16_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, job_id, uint32_t, FALSE); FETCH_FIELD(hv, job_desc_msg, job_id, uint32_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, kill_on_node_fail, uint16_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, licenses, charp, FALSE);
FETCH_FIELD(hv, job_desc_msg, mail_type, uint16_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, mail_user, charp, FALSE);
FETCH_FIELD(hv, job_desc_msg, mem_bind, charp, FALSE);
FETCH_FIELD(hv, job_desc_msg, mem_bind_type, uint16_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, name, charp, FALSE); FETCH_FIELD(hv, job_desc_msg, name, charp, FALSE);
FETCH_FIELD(hv, job_desc_msg, pn_min_cpus, uint16_t, FALSE); FETCH_FIELD(hv, job_desc_msg, network, charp, FALSE);
FETCH_FIELD(hv, job_desc_msg, pn_min_memory, uint16_t, FALSE); FETCH_FIELD(hv, job_desc_msg, nice, uint16_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, pn_min_tmp_disk, uint16_t, FALSE); FETCH_FIELD(hv, job_desc_msg, num_tasks, uint32_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, open_mode, uint8_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, other_port, uint16_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, overcommit, uint16_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, partition, charp, FALSE); FETCH_FIELD(hv, job_desc_msg, partition, charp, FALSE);
FETCH_FIELD(hv, job_desc_msg, plane_size, uint16_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, priority, uint32_t, FALSE); FETCH_FIELD(hv, job_desc_msg, priority, uint32_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, qos, charp, FALSE);
FETCH_FIELD(hv, job_desc_msg, resp_host, charp, FALSE);
FETCH_FIELD(hv, job_desc_msg, req_nodes, charp, FALSE); FETCH_FIELD(hv, job_desc_msg, req_nodes, charp, FALSE);
FETCH_FIELD(hv, job_desc_msg, exc_nodes, charp, FALSE); FETCH_FIELD(hv, job_desc_msg, requeue, uint16_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, reservation, charp, FALSE);
FETCH_FIELD(hv, job_desc_msg, script, charp, FALSE);
FETCH_FIELD(hv, job_desc_msg, shared, uint16_t, FALSE); FETCH_FIELD(hv, job_desc_msg, shared, uint16_t, FALSE);
/* TODO: spank_job_env / spank_job_env_size */
FETCH_FIELD(hv, job_desc_msg, task_dist, uint16_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, time_limit, uint32_t, FALSE); FETCH_FIELD(hv, job_desc_msg, time_limit, uint32_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, time_min, uint32_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, user_id, uint32_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, warn_signal, uint16_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, warn_time, uint16_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, work_dir, charp, FALSE);
/* job constraints: */
FETCH_FIELD(hv, job_desc_msg, cpus_per_task, uint16_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, min_cpus, uint32_t, FALSE); FETCH_FIELD(hv, job_desc_msg, min_cpus, uint32_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, max_cpus, uint32_t, FALSE); FETCH_FIELD(hv, job_desc_msg, max_cpus, uint32_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, min_nodes, uint32_t, FALSE); FETCH_FIELD(hv, job_desc_msg, min_nodes, uint32_t, FALSE);
...@@ -73,56 +132,14 @@ hv_to_job_desc_msg(HV* hv, job_desc_msg_t* job_desc_msg) ...@@ -73,56 +132,14 @@ hv_to_job_desc_msg(HV* hv, job_desc_msg_t* job_desc_msg)
FETCH_FIELD(hv, job_desc_msg, min_sockets, uint16_t, FALSE); FETCH_FIELD(hv, job_desc_msg, min_sockets, uint16_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, min_cores, uint16_t, FALSE); FETCH_FIELD(hv, job_desc_msg, min_cores, uint16_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, min_threads, uint16_t, FALSE); FETCH_FIELD(hv, job_desc_msg, min_threads, uint16_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, cpus_per_task, uint16_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, ntasks_per_node, uint16_t, FALSE); FETCH_FIELD(hv, job_desc_msg, ntasks_per_node, uint16_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, ntasks_per_socket, uint16_t, FALSE); FETCH_FIELD(hv, job_desc_msg, ntasks_per_socket, uint16_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, ntasks_per_core, uint16_t, FALSE); FETCH_FIELD(hv, job_desc_msg, ntasks_per_core, uint16_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, script, charp, FALSE); FETCH_FIELD(hv, job_desc_msg, pn_min_cpus, uint16_t, FALSE);
/* argv, argc */ FETCH_FIELD(hv, job_desc_msg, pn_min_memory, uint32_t, FALSE);
if((svp = hv_fetch(hv, "argv", 4, FALSE))) { FETCH_FIELD(hv, job_desc_msg, pn_min_tmp_disk, uint32_t, FALSE);
if(SvROK(*svp) && SvTYPE(SvRV(*svp)) == SVt_PVAV) {
argv_av = (AV*)SvRV(*svp);
job_desc_msg->argc = av_len(argv_av) + 1;
if (job_desc_msg->argc > 0) {
Newz(0, job_desc_msg->argv, (int32_t)(job_desc_msg->argc + 1), char*);
for(i = 0; i < job_desc_msg->argc; i ++) {
if((svp = av_fetch(argv_av, i, FALSE)))
*(job_desc_msg->argv + i) = (char*) SvPV_nolen(*svp);
else {
Perl_warn(aTHX_ "error fetching `argv' of job descriptor");
free_job_desc_msg_memory(job_desc_msg);
return -1;
}
}
}
} else {
Perl_warn(aTHX_ "`argv' of job descriptor is not an array reference, ignored");
}
}
FETCH_FIELD(hv, job_desc_msg, std_err, charp, FALSE);
FETCH_FIELD(hv, job_desc_msg, std_in, charp, FALSE);
FETCH_FIELD(hv, job_desc_msg, std_out, charp, FALSE);
FETCH_FIELD(hv, job_desc_msg, user_id, uint32_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, group_id, uint32_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, work_dir, charp, FALSE);
FETCH_FIELD(hv, job_desc_msg, alloc_node, charp, FALSE);
FETCH_FIELD(hv, job_desc_msg, alloc_sid, uint32_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, resp_host, charp, FALSE);
FETCH_FIELD(hv, job_desc_msg, alloc_resp_port, uint16_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, other_port, uint16_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, dependency, charp, FALSE);
FETCH_FIELD(hv, job_desc_msg, overcommit, uint16_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, num_tasks, uint32_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, nice, uint16_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, account, charp, FALSE);
FETCH_FIELD(hv, job_desc_msg, network, charp, FALSE);
FETCH_FIELD(hv, job_desc_msg, comment, charp, FALSE);
FETCH_FIELD(hv, job_desc_msg, task_dist, uint16_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, plane_size, uint16_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, begin_time, time_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, mail_type, uint16_t, FALSE);
FETCH_FIELD(hv, job_desc_msg, mail_user, charp, FALSE);
FETCH_FIELD(hv, job_desc_msg, requeue, uint16_t, FALSE);
/* geometry */ /* geometry */
#if SYSTEM_DIMENSIONS #if SYSTEM_DIMENSIONS
if((svp = hv_fetch(hv, "geometry", 8, FALSE))) { if((svp = hv_fetch(hv, "geometry", 8, FALSE))) {
...@@ -153,6 +170,11 @@ hv_to_job_desc_msg(HV* hv, job_desc_msg_t* job_desc_msg) ...@@ -153,6 +170,11 @@ hv_to_job_desc_msg(HV* hv, job_desc_msg_t* job_desc_msg)
/* TODO: select_jobinfo */ /* TODO: select_jobinfo */
/* Don't know how to manage memory of select_jobinfo, since it's storage size is unknown. */ /* Don't know how to manage memory of select_jobinfo, since it's storage size is unknown. */
/* Maybe we can do it if select_g_copy_jobinfo and select_g_free_jobinfo are exported. */ /* Maybe we can do it if select_g_copy_jobinfo and select_g_free_jobinfo are exported. */
FETCH_FIELD(hv, job_desc_msg, std_err, charp, FALSE);
FETCH_FIELD(hv, job_desc_msg, std_in, charp, FALSE);
FETCH_FIELD(hv, job_desc_msg, std_out, charp, FALSE);
FETCH_FIELD(hv, job_desc_msg, wckey, charp, FALSE);
return 0; return 0;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment