From d026422d6704ece9fa69a44de3e0f08165351be9 Mon Sep 17 00:00:00 2001 From: Phil Eckert <eckert2@llnl.gov> Date: Thu, 12 Aug 2010 21:10:03 +0000 Subject: [PATCH] Added to the reservation module, can now do updates, creates and deletions. --- contribs/perlapi/libslurm/perl/Slurm.xs | 36 +++++++++++++++ contribs/perlapi/libslurm/perl/reservation.c | 47 ++++++++++++++++++++ contribs/perlapi/libslurm/perl/slurm-perl.h | 2 + 3 files changed, 85 insertions(+) diff --git a/contribs/perlapi/libslurm/perl/Slurm.xs b/contribs/perlapi/libslurm/perl/Slurm.xs index 31ac7b7dafa..f53a75621da 100644 --- a/contribs/perlapi/libslurm/perl/Slurm.xs +++ b/contribs/perlapi/libslurm/perl/Slurm.xs @@ -427,6 +427,42 @@ slurm_load_reservations(slurm_t self = NULL) OUTPUT: RETVAL +char * +slurm_create_reservation(slurm_t self, HV* res_info = NULL) + PREINIT: + resv_desc_msg_t resv_msg; + CODE: + if(hv_to_update_reservation_msg(res_info, &resv_msg) < 0) { + XSRETURN_UNDEF; + } + RETVAL = slurm_create_reservation(&resv_msg); + OUTPUT: + RETVAL + +int +slurm_update_reservation(slurm_t self, HV* res_info = NULL) + PREINIT: + resv_desc_msg_t resv_msg; + CODE: + if(hv_to_update_reservation_msg(res_info, &resv_msg) < 0) { + XSRETURN_UNDEF; + } + RETVAL = slurm_update_reservation(&resv_msg); + OUTPUT: + RETVAL + +int +slurm_delete_reservation(slurm_t self, HV* res_info = NULL) + PREINIT: + reservation_name_msg_t resv_name; + CODE: + if(hv_to_delete_reservation_msg(res_info, &resv_name) < 0) { + XSRETURN_UNDEF; + } + RETVAL = slurm_delete_reservation(&resv_name); + OUTPUT: + RETVAL + # To be implemented in perl code # slurm_print_reservation_info_msg # slurm_print_reservation_info diff --git a/contribs/perlapi/libslurm/perl/reservation.c b/contribs/perlapi/libslurm/perl/reservation.c index 2efd4063895..ab4ded3e5de 100644 --- a/contribs/perlapi/libslurm/perl/reservation.c +++ b/contribs/perlapi/libslurm/perl/reservation.c @@ -82,3 +82,50 @@ reserve_info_msg_to_hv(reserve_info_msg_t* reserve_info_msg, HV* hv) return 0; } +/* + * convert perl HV to resv_desc_msg_t. + */ +int +hv_to_update_reservation_msg(HV* hv, resv_desc_msg_t* resv_msg) +{ + resv_msg->accounts = NULL; + resv_msg->duration = (uint32_t) NO_VAL; + resv_msg->end_time = (time_t) NO_VAL; + resv_msg->features = NULL; + resv_msg->flags = (uint16_t) NO_VAL; + resv_msg->licenses = NULL; + resv_msg->name = NULL; + resv_msg->node_cnt = (uint32_t) NO_VAL; + resv_msg->node_list = NULL; + resv_msg->partition = NULL; + resv_msg->start_time = (time_t) NO_VAL; + resv_msg->users = NULL; + + FETCH_FIELD(hv, resv_msg, accounts, charp, FALSE); + FETCH_FIELD(hv, resv_msg, duration, uint32_t, FALSE); + FETCH_FIELD(hv, resv_msg, end_time, time_t, FALSE); + FETCH_FIELD(hv, resv_msg, features, charp, FALSE); + FETCH_FIELD(hv, resv_msg, flags, uint16_t, FALSE); + FETCH_FIELD(hv, resv_msg, licenses, charp, FALSE); + FETCH_FIELD(hv, resv_msg, name, charp, FALSE); + FETCH_FIELD(hv, resv_msg, node_cnt, uint32_t, FALSE); + FETCH_FIELD(hv, resv_msg, node_list, charp, FALSE); + FETCH_FIELD(hv, resv_msg, partition, charp, FALSE); + FETCH_FIELD(hv, resv_msg, start_time, time_t, FALSE); + FETCH_FIELD(hv, resv_msg, users, charp, FALSE); + + return 0; +} + +/* + * convert perl HV to reservation_name_msg_t. + */ +int +hv_to_delete_reservation_msg(HV* hv, reservation_name_msg_t* resv_name) +{ + resv_name->name = NULL; + + FETCH_FIELD(hv, resv_name, name, charp, FALSE); + + return 0; +} diff --git a/contribs/perlapi/libslurm/perl/slurm-perl.h b/contribs/perlapi/libslurm/perl/slurm-perl.h index 5e6a6d625a7..7aca3ed9d50 100644 --- a/contribs/perlapi/libslurm/perl/slurm-perl.h +++ b/contribs/perlapi/libslurm/perl/slurm-perl.h @@ -30,6 +30,8 @@ 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 hv_to_update_reservation_msg(HV* hv, resv_desc_msg_t* resv_msg); +extern int hv_to_delete_reservation_msg(HV* hv, reservation_name_msg_t* resv_name); 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); -- GitLab