From 0936bd91b41adf9b324abdb119b26e68df75dd6e Mon Sep 17 00:00:00 2001
From: Don Lipari <lipari1@llnl.gov>
Date: Sat, 27 Feb 2010 00:34:27 +0000
Subject: [PATCH] Updated hv_to_job_desc_msg() in alloc.c to match
 job_desc_msg_t def in slurm.h

---
 contribs/perlapi/libslurm-perl/alloc.c | 128 +++++++++++++++----------
 1 file changed, 75 insertions(+), 53 deletions(-)

diff --git a/contribs/perlapi/libslurm-perl/alloc.c b/contribs/perlapi/libslurm-perl/alloc.c
index 9b56206458f..c7372c2a92a 100644
--- a/contribs/perlapi/libslurm-perl/alloc.c
+++ b/contribs/perlapi/libslurm-perl/alloc.c
@@ -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);
 
+	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, 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 */
 	if((svp = hv_fetch(hv, "environment", 11, FALSE))) {
 		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)
 			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, 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, 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, pn_min_cpus, uint16_t, FALSE);
-	FETCH_FIELD(hv, job_desc_msg, pn_min_memory, uint16_t, FALSE);
-	FETCH_FIELD(hv, job_desc_msg, pn_min_tmp_disk, uint16_t, FALSE);
+	FETCH_FIELD(hv, job_desc_msg, network, charp, FALSE);
+	FETCH_FIELD(hv, job_desc_msg, nice, 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, plane_size, uint16_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, 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);
+	/* 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_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, max_cpus, 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)
 	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_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_socket, uint16_t, FALSE);
 	FETCH_FIELD(hv, job_desc_msg, ntasks_per_core, uint16_t, FALSE);
-	FETCH_FIELD(hv, job_desc_msg, script, charp, 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, 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);
+	FETCH_FIELD(hv, job_desc_msg, pn_min_cpus, uint16_t, FALSE);
+	FETCH_FIELD(hv, job_desc_msg, pn_min_memory, uint32_t, FALSE);
+	FETCH_FIELD(hv, job_desc_msg, pn_min_tmp_disk, uint32_t, FALSE);
+
+
 	/* geometry */
 #if SYSTEM_DIMENSIONS
 	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)
 	/* TODO: select_jobinfo */
 	/* 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. */
+
+	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;
 }
 
-- 
GitLab