diff --git a/src/api/cancel.c b/src/api/cancel.c index 8c241e217995bd559a95624e8a9fdab7eb4df1f4..6fa0879912dac051d1b7667feb7f4a2916e7f043 100644 --- a/src/api/cancel.c +++ b/src/api/cancel.c @@ -14,14 +14,9 @@ #include <errno.h> #include <stdio.h> #include <stdlib.h> -#include <string.h> -#include <syslog.h> -#include <sys/socket.h> -#include <netinet/in.h> -#include <arpa/inet.h> -#include <unistd.h> -#include "slurmlib.h" +#include <src/api/slurm.h> +#include <src/common/slurm.h> #if DEBUG_MODULE /* main is used here for testing purposes only */ @@ -46,79 +41,44 @@ main (int argc, char *argv[]) } #endif - -/* - * slurm_cancel - cancel the specified job - * input: job_id - the job_id to be cancelled - * output: returns 0 if no error, EINVAL if the request is invalid, - * EAGAIN if the request can not be satisfied at present - */ -int -slurm_cancel (uint32_t job_id) +slurm_cancel_job ( uint32_t job_id ) { - int buffer_offset, buffer_size, in_size; - char *request_msg, *buffer, id_str[20]; - int sockfd; - struct sockaddr_in serv_addr; + int msg_size ; + int rc ; + slurm_fd sockfd ; + slurm_msg_t request_msg ; + slurm_msg_t response_msg ; + job_id_msg_t job_id_msg ; + return_code_msg_t * rc_msg ; - sprintf (id_str, "%u", job_id); - request_msg = malloc (strlen (id_str) + 11); - if (request_msg == NULL) - return EAGAIN; - strcpy (request_msg, "JobCancel "); - strcat (request_msg, id_str); + /* init message connection for message communication with controller */ + if ( ( sockfd = slurm_open_controller_conn ( SLURM_PORT ) ) == SLURM_SOCKET_ERROR ) + return SLURM_SOCKET_ERROR ; - if ((sockfd = socket (AF_INET, SOCK_STREAM, 0)) < 0) - return EINVAL; - serv_addr.sin_family = PF_INET; - serv_addr.sin_addr.s_addr = inet_addr (SLURMCTLD_HOST); - serv_addr.sin_port = htons (SLURMCTLD_PORT); - if (connect - (sockfd, (struct sockaddr *) &serv_addr, - sizeof (serv_addr)) < 0) { - close (sockfd); - return EAGAIN; - } - if (send (sockfd, request_msg, strlen (request_msg) + 1, 0) < - strlen (request_msg)) { - close (sockfd); - return EAGAIN; - } + /* send request message */ + job_id_msg . job_id = job_id ; + request_msg . msg_type = REQUEST_JOB_CANCEL ; + request_msg . data = &job_id_msg ; + if ( ( rc = slurm_send_controller_msg ( sockfd , & request_msg ) ) == SLURM_SOCKET_ERROR ) + return SLURM_SOCKET_ERROR ; - buffer = NULL; - buffer_offset = 0; - buffer_size = 8 * 1024; - while (1) { - buffer = realloc (buffer, buffer_size); - if (buffer == NULL) { - close (sockfd); - return EAGAIN; - } - in_size = - recv (sockfd, &buffer[buffer_offset], - (buffer_size - buffer_offset), 0); - if (in_size <= 0) { /* end of input */ - in_size = 0; - break; - } - buffer_offset += in_size; - buffer_size += in_size; - } - close (sockfd); - buffer_size = buffer_offset + in_size; - buffer = realloc (buffer, buffer_size); - if (buffer == NULL) - return EAGAIN; + /* receive message */ + if ( ( msg_size = slurm_receive_msg ( sockfd , & response_msg ) ) == SLURM_SOCKET_ERROR ) + return SLURM_SOCKET_ERROR ; + /* shutdown message connection */ + if ( ( rc = slurm_shutdown_msg_conn ( sockfd ) ) == SLURM_SOCKET_ERROR ) + return SLURM_SOCKET_ERROR ; - if (strcmp (buffer, "EAGAIN") == 0) { - free (buffer); - return EAGAIN; - } - if (strcmp (buffer, "EINVAL") == 0) { - free (buffer); - return EINVAL; - } - printf ("%s\n", buffer); - free (buffer); - return 0; + switch ( response_msg . msg_type ) + { + case RESPONSE_SLURM_RC: + rc_msg = ( return_code_msg_t * ) response_msg . data ; + return rc_msg -> return_code ; + break ; + default: + return SLURM_UNEXPECTED_MSG_ERROR ; + break ; + } + + return SLURM_SUCCESS ; } diff --git a/src/api/config_info.c b/src/api/config_info.c index d2acf1ff5db9b125ca3a2d047c825a7d36946c50..8b4b6327a4b5b8ea87cb930b211dd756b92c17f8 100644 --- a/src/api/config_info.c +++ b/src/api/config_info.c @@ -46,6 +46,7 @@ slurm_load_build (time_t update_time, struct build_table **build_table_ptr ) slurm_msg_t request_msg ; slurm_msg_t response_msg ; last_update_msg_t last_time_msg ; + return_code_msg_t * rc_msg ; /* init message connection for message communication with controller */ @@ -77,7 +78,8 @@ slurm_load_build (time_t update_time, struct build_table **build_table_ptr ) return SLURM_SUCCESS ; break ; case RESPONSE_SLURM_RC: - return SLURM_NO_CHANGE_IN_DATA ; + rc_msg = ( return_code_msg_t * ) response_msg . data ; + return rc_msg->return_code ; break ; default: return SLURM_UNEXPECTED_MSG_ERROR ; diff --git a/src/api/job_info.c b/src/api/job_info.c index 0aa3fce95901a9172775f4000957a18227796e3d..5a537ca928dc65d21ee4cc08132825246054931b 100644 --- a/src/api/job_info.c +++ b/src/api/job_info.c @@ -126,7 +126,7 @@ slurm_load_jobs (time_t update_time, job_info_msg_t **job_info_msg_pptr) slurm_msg_t request_msg ; slurm_msg_t response_msg ; last_update_msg_t last_time_msg ; - return_code_msg_t * slurm_rc_msg ; + return_code_msg_t * rc_msg ; /* init message connection for message communication with controller */ if ( ( sockfd = slurm_open_controller_conn ( SLURM_PORT ) ) == SLURM_SOCKET_ERROR ) @@ -153,7 +153,8 @@ slurm_load_jobs (time_t update_time, job_info_msg_t **job_info_msg_pptr) *job_info_msg_pptr = ( job_info_msg_t * ) response_msg . data ; break ; case RESPONSE_SLURM_RC: - slurm_rc_msg = ( return_code_msg_t * ) response_msg . data ; + rc_msg = ( return_code_msg_t * ) response_msg . data ; + return rc_msg -> return_code ; break ; default: return SLURM_UNEXPECTED_MSG_ERROR ; diff --git a/src/api/slurm.h b/src/api/slurm.h index e748d3427d65ca9aa9e58f5a2728edc387922397..66c381ac2092e397f764eb75e79920b82cb20459 100644 --- a/src/api/slurm.h +++ b/src/api/slurm.h @@ -264,4 +264,4 @@ extern int slurm_reconfigure (); * input: a line containing configuration information per the configuration file format * output: returns 0 on success, errno otherwise */ -extern int update_config (char *spec); +extern int slurm_update_config (char *spec); diff --git a/src/api/update_config.c b/src/api/update_config.c index 953a9a610e782a0815e0bcc9581c30a80911fed9..4911f4a33c3b5d42773148b29dc38f473a3772ed 100644 --- a/src/api/update_config.c +++ b/src/api/update_config.c @@ -11,14 +11,8 @@ #include <errno.h> #include <stdio.h> #include <stdlib.h> -#include <string.h> -#include <syslog.h> -#include <sys/socket.h> -#include <netinet/in.h> -#include <arpa/inet.h> -#include <unistd.h> - -#include "slurm.h" +#include <src/api/slurm.h> +#include <src/common/slurm_protocol_api.h> #if DEBUG_MODULE /* main is used here for module testing purposes only */ @@ -54,62 +48,46 @@ main (int argc, char *argv[]) { * output: returns 0 on success, errno otherwise */ int -update_config (char *spec) { - static int error_code; - int buffer_offset, buffer_size, in_size; - char *request_msg, *buffer; - int sockfd; - struct sockaddr_in serv_addr; - - if ((sockfd = socket (AF_INET, SOCK_STREAM, 0)) < 0) - return EINVAL; - serv_addr.sin_family = PF_INET; - serv_addr.sin_addr.s_addr = inet_addr (SLURMCTLD_HOST); - serv_addr.sin_port = htons (SLURMCTLD_PORT); - if (connect - (sockfd, (struct sockaddr *) &serv_addr, - sizeof (serv_addr)) < 0) { - close (sockfd); - return EINVAL; - } - request_msg = malloc (strlen (spec) + 10); - if (request_msg == NULL) { - close (sockfd); - return ENOMEM; - } - sprintf (request_msg, "Update %s", spec); - if (send (sockfd, request_msg, strlen (request_msg) + 1, 0) < - strlen (request_msg)) { - close (sockfd); - free (request_msg); - return EINVAL; - } - free (request_msg); - buffer = NULL; - buffer_offset = 0; - buffer_size = 1024; - while (1) { - buffer = realloc (buffer, buffer_size); - if (buffer == NULL) { - close (sockfd); - return ENOMEM; - } - in_size = - recv (sockfd, &buffer[buffer_offset], - (buffer_size - buffer_offset), 0); - if (in_size <= 0) { /* end if input */ - in_size = 0; - break; - } - buffer_offset += in_size; - buffer_size += in_size; - } - close (sockfd); - buffer_size = buffer_offset + in_size; - buffer = realloc (buffer, buffer_size); - if (buffer == NULL) - return ENOMEM; - error_code = atoi (buffer); - free (buffer); - return error_code; +slurm_update_config (char *spec) { + int msg_size ; + int rc ; + slurm_fd sockfd ; + slurm_msg_t request_msg ; + slurm_msg_t response_msg ; + return_code_msg_t * rc_msg ; + + /* init message connection for message communication with controller */ + + if ( ( sockfd = slurm_open_controller_conn ( SLURM_PORT ) ) == SLURM_SOCKET_ERROR ) + return SLURM_SOCKET_ERROR ; + + + /* send request message */ + /* pack32 ( update_time , &buf_ptr , &buffer_size ); */ + /*request_msg . msg_type = REQUEST_UPDATE_CONFIG_INFO ;*/ + request_msg . data = NULL ; + + if ( ( rc = slurm_send_controller_msg ( sockfd , & request_msg ) ) == SLURM_SOCKET_ERROR ) + return SLURM_SOCKET_ERROR ; + + + /* receive message */ + if ( ( msg_size = slurm_receive_msg ( sockfd , & response_msg ) ) == SLURM_SOCKET_ERROR ) + return SLURM_SOCKET_ERROR ; + /* shutdown message connection */ + if ( ( rc = slurm_shutdown_msg_conn ( sockfd ) ) == SLURM_SOCKET_ERROR ) + return SLURM_SOCKET_ERROR ; + + switch ( response_msg . msg_type ) + { + case RESPONSE_SLURM_RC: + rc_msg = ( return_code_msg_t * ) response_msg . data ; + return rc_msg->return_code ; + break ; + default: + return SLURM_UNEXPECTED_MSG_ERROR ; + break ; + } + + return SLURM_SUCCESS ; }