From 281ae5e61b012c711887e57f11b665a6c42a0ca5 Mon Sep 17 00:00:00 2001
From: Phil Eckert <eckert2@llnl.gov>
Date: Fri, 18 Jun 2010 19:15:21 +0000
Subject: [PATCH] Added support for getting reservation info.

---
 contribs/perlapi/libslurm/Makefile.am       |  3 +-
 contribs/perlapi/libslurm/perl/Slurm.xs     | 39 ++++++++++++++++++++-
 contribs/perlapi/libslurm/perl/slurm-perl.h |  5 +--
 3 files changed, 43 insertions(+), 4 deletions(-)

diff --git a/contribs/perlapi/libslurm/Makefile.am b/contribs/perlapi/libslurm/Makefile.am
index 98e81857ee1..e185a94e061 100644
--- a/contribs/perlapi/libslurm/Makefile.am
+++ b/contribs/perlapi/libslurm/Makefile.am
@@ -1,4 +1,4 @@
-AUTOMAKE_OPTIONS = foreign
+ AUTOMAKE_OPTIONS = foreign
 # copied from pidgin
 #
 perl_dir = perl
@@ -16,6 +16,7 @@ perl_sources = \
 	       $(perl_dir)/launch.c \
 	       $(perl_dir)/node.c \
 	       $(perl_dir)/partition.c \
+	       $(perl_dir)/reservation.c \
 	       $(perl_dir)/trigger.c
 
 $(perl_dir)/Makefile:	$(perl_dir)/Makefile.PL
diff --git a/contribs/perlapi/libslurm/perl/Slurm.xs b/contribs/perlapi/libslurm/perl/Slurm.xs
index 896919ed90b..31ac7b7dafa 100644
--- a/contribs/perlapi/libslurm/perl/Slurm.xs
+++ b/contribs/perlapi/libslurm/perl/Slurm.xs
@@ -23,6 +23,7 @@ extern void slurm_xfree(void **, const char *, int, const char *);
 struct slurm {
 	node_info_msg_t *node_info_msg;
 	partition_info_msg_t *part_info_msg;
+	reserve_info_msg_t *reserve_info_msg;
 	slurm_ctl_conf_t *ctl_conf;
 	job_info_msg_t *job_info_msg;
 	job_step_info_response_msg_t *job_step_info_msg;
@@ -42,6 +43,10 @@ free_slurm(void)
 		slurm_free_partition_info_msg(slurm.part_info_msg);
 		slurm.part_info_msg = NULL;
 	}
+	if(slurm.reserve_info_msg) {
+		slurm_free_reservation_info_msg(slurm.reserve_info_msg);
+		slurm.reserve_info_msg = NULL;
+	}
 	if(slurm.ctl_conf) {
 		slurm_free_ctl_conf(slurm.ctl_conf);
 		slurm.ctl_conf = NULL;
@@ -395,6 +400,39 @@ slurm_load_ctl_conf(slurm_t self = NULL)
 #void
 #slurm_print_ctl_conf(slurm_t self, HV* conf)
 
+######################################################################
+#	SLURM RESERVATION CONFIGURATION READ/PRINT/UPDATE FUNCTIONS
+######################################################################
+HV*
+slurm_load_reservations(slurm_t self = NULL)
+	PREINIT:
+		reserve_info_msg_t* new_reserve_info_msg = NULL;
+		int rc;
+	CODE:
+                rc = slurm_load_reservations(
+			self->reserve_info_msg ?
+			self->reserve_info_msg->last_update : 0,
+			&new_reserve_info_msg);
+		if(rc == SLURM_SUCCESS) {
+			slurm_free_reservation_info_msg(self->reserve_info_msg);
+			self->reserve_info_msg = new_reserve_info_msg;
+		} else if(slurm_get_errno() == SLURM_NO_CHANGE_IN_DATA) {
+			/* nothing to do */
+		} else {
+			XSRETURN_UNDEF;
+		}
+		RETVAL = newHV();
+		sv_2mortal((SV*)RETVAL);
+                reserve_info_msg_to_hv(self->reserve_info_msg, RETVAL);
+	OUTPUT:
+		RETVAL
+
+# To be implemented in perl code
+# slurm_print_reservation_info_msg
+# slurm_print_reservation_info
+# slurm_sprint_reservation_info
+
+
 ######################################################################
 #	SLURM JOB CONTROL CONFIGURATION READ/PRINT/UPDATE FUNCTIONS
 ######################################################################
@@ -723,7 +761,6 @@ slurm_delete_partition(slurm_t self, char* part_name)
                 &delete_msg
 
 
-
 ######################################################################
 #	SLURM PING/RECONFIGURE/SHUTDOWN FUNCTIONS
 ######################################################################
diff --git a/contribs/perlapi/libslurm/perl/slurm-perl.h b/contribs/perlapi/libslurm/perl/slurm-perl.h
index 60c0ac6dfc0..5e6a6d625a7 100644
--- a/contribs/perlapi/libslurm/perl/slurm-perl.h
+++ b/contribs/perlapi/libslurm/perl/slurm-perl.h
@@ -24,12 +24,13 @@ extern int slurm_step_layout_to_hv(slurm_step_layout_t* step_layout, HV* hv);
 extern int node_info_msg_to_hv(node_info_msg_t* node_info_msg, HV* hv);
 extern int hv_to_update_node_msg(HV* hv, update_node_msg_t *update_msg);
 
-extern int partition_info_msg_to_hv(partition_info_msg_t* part_info_msg,
-				    HV* hv);
+extern int partition_info_msg_to_hv(partition_info_msg_t* part_info_msg, HV *hv);
 extern int hv_to_update_part_msg(HV* hv, update_part_msg_t* part_msg);
 
 extern int slurm_ctl_conf_to_hv(slurm_ctl_conf_t* conf, HV* hv);
 
+extern int reserve_info_msg_to_hv(reserve_info_msg_t* conf, HV* hv);
+
 extern int trigger_info_to_hv(trigger_info_t *info, HV* hv);
 extern int trigger_info_msg_to_hv(trigger_info_msg_t *msg, HV* hv);
 extern int hv_to_trigger_info(HV* hv, trigger_info_t* info);
-- 
GitLab