diff --git a/src/common/slurm_protocol_api.c b/src/common/slurm_protocol_api.c index ad10196d41a612f821a416ef4bfa011fbeaf27e7..c8198c6abac5cae8cfaf53ae57f8f2213e995757 100644 --- a/src/common/slurm_protocol_api.c +++ b/src/common/slurm_protocol_api.c @@ -39,23 +39,18 @@ slurm_protocol_config_t * slurm_get_api_config ( ) int slurm_api_set_default_config ( ) { - if ( proto_conf == NULL ) - { - slurm_set_addr ( & proto_conf_default . primary_controller , SLURM_PROTOCOL_DEFAULT_PORT , SLURM_PROTOCOL_DEFAULT_PRIMARY_CONTROLLER ) ; - slurm_set_addr ( & proto_conf_default . secondary_controller , SLURM_PROTOCOL_DEFAULT_PORT , SLURM_PROTOCOL_DEFAULT_SECONDARY_CONTROLLER ) ; + slurm_set_addr ( & proto_conf_default . primary_controller , SLURM_PROTOCOL_DEFAULT_PORT , SLURM_PROTOCOL_DEFAULT_PRIMARY_CONTROLLER ) ; + slurm_set_addr ( & proto_conf_default . secondary_controller , SLURM_PROTOCOL_DEFAULT_PORT , SLURM_PROTOCOL_DEFAULT_SECONDARY_CONTROLLER ) ; + proto_conf = & proto_conf_default ; - } return SLURM_SUCCESS ; } int slurm_set_default_controllers ( char * primary_controller_hostname , char * secondary_controller_hostnme, uint16_t pri_port , uint16_t sec_port ) { - if ( proto_conf == NULL ) - { - slurm_set_addr ( & proto_conf_default . primary_controller , pri_port , primary_controller_hostname ) ; - slurm_set_addr ( & proto_conf_default . secondary_controller , sec_port , secondary_controller_hostnme ) ; + slurm_set_addr ( & proto_conf_default . primary_controller , pri_port , primary_controller_hostname ) ; + slurm_set_addr ( & proto_conf_default . secondary_controller , sec_port , secondary_controller_hostnme ) ; - } return SLURM_SUCCESS ; } @@ -121,7 +116,7 @@ slurm_fd slurm_open_msg_conn ( slurm_addr * slurm_address ) slurm_fd slurm_open_controller_conn ( ) { slurm_fd connection_fd ; - + slurm_api_set_default_config ( ) ; /* try to send to primary first then secondary */ if ( ( connection_fd = slurm_open_msg_conn ( & proto_conf -> primary_controller ) ) == SLURM_SOCKET_ERROR ) { @@ -453,7 +448,7 @@ int slurm_send_recv_controller_msg ( slurm_msg_t * request_msg , slurm_msg_t * r slurm_fd sockfd ; /* init message connection for message communication with controller */ - if ( ( sockfd = slurm_open_controller_conn ( SLURM_PORT ) ) == SLURM_SOCKET_ERROR ) + if ( ( sockfd = slurm_open_controller_conn ( ) ) == SLURM_SOCKET_ERROR ) return SLURM_SOCKET_ERROR ; /* send request message */ @@ -476,7 +471,7 @@ int slurm_send_only_controller_msg ( slurm_msg_t * request_msg ) slurm_fd sockfd ; /* init message connection for message communication with controller */ - if ( ( sockfd = slurm_open_controller_conn ( SLURM_PORT ) ) == SLURM_SOCKET_ERROR ) + if ( ( sockfd = slurm_open_controller_conn ( ) ) == SLURM_SOCKET_ERROR ) return SLURM_SOCKET_ERROR ; /* send request message */ @@ -496,7 +491,7 @@ int slurm_send_only_node_msg ( slurm_msg_t * request_msg ) slurm_fd sockfd ; /* init message connection for message communication with controller */ - if ( ( sockfd = slurm_open_controller_conn ( SLURM_PORT ) ) == SLURM_SOCKET_ERROR ) + if ( ( sockfd = slurm_open_controller_conn ( ) ) == SLURM_SOCKET_ERROR ) return SLURM_SOCKET_ERROR ; /* send request message */ diff --git a/src/common/slurm_protocol_defs.c b/src/common/slurm_protocol_defs.c index 235a0c7c3c6702e07933f8958dc2e13e1fbeae39..c35468633a5b7f834a70e99f8f8f445d0f18c0b7 100644 --- a/src/common/slurm_protocol_defs.c +++ b/src/common/slurm_protocol_defs.c @@ -224,11 +224,40 @@ void slurm_free_update_node_msg ( update_node_msg_t * msg ) xfree ( msg ) ; } } + +void slurm_free_launch_tasks_msg ( launch_tasks_msg_t * msg ) +{ + if ( msg ) + { + if ( msg -> credentials ) + xfree ( msg -> credentials ); + if ( msg -> env ) + xfree ( msg -> env ); + if ( msg -> cwd ) + xfree ( msg -> cwd ); + if ( msg -> cmd_line ) + xfree ( msg -> cmd_line ); + xfree ( msg ) ; + } + /*stdin location*/ + /*stdout location*/ + /*stderr location*/ + /*task completion location*/ +} + +void slurm_free_kill_tasks_msg ( kill_tasks_msg_t * msg ) +{ + if ( msg ) + { + xfree ( msg ) ; + } +} + /********************** -*********************** -Init functions -*********************** -**********************/ + *********************** + Init functions + *********************** + **********************/ void slurm_init_job_desc_msg ( job_desc_msg_t * job_desc_msg ) diff --git a/src/common/slurm_protocol_defs.h b/src/common/slurm_protocol_defs.h index 7478b801f0b248415253f5e58a3b126b9d87f21a..108dd577eed8c5d7e928d5b586b7531757b9680d 100644 --- a/src/common/slurm_protocol_defs.h +++ b/src/common/slurm_protocol_defs.h @@ -81,6 +81,7 @@ typedef enum { test1, test2 #define REQUEST_LAUNCH_TASKS 6001 #define RESPONSE_LAUNCH_TASKS 6002 #define MESSAGE_TASK_EXIT 6003 +#define REQUEST_KILL_TASKS 6004 /*DPCS get key to sign submissions*/ #define REQUEST_GET_KEY 8001 @@ -142,6 +143,30 @@ typedef struct slurm_node_registration_status_msg uint32_t temporary_disk_space ; } slurm_node_registration_status_msg_t ; +typedef struct launch_tasks_msg +{ + uint32_t job_id ; + uint32_t job_step_id ; + uint32_t uid ; + uint32_t gid ; + char * credentials ; + uint32_t tasks_to_launch ; + char * env ; + char * cwd ; + char * cmd_line ; + /*stdin location*/ + /*stdout location*/ + /*stderr location*/ + /*task completion location*/ +} launch_tasks_msg_t ; + +typedef struct kill_tasks_msg +{ + uint32_t job_id ; + uint32_t job_step_id ; +} kill_tasks_msg_t ; + + typedef struct slurm_job_allocation_response_msg { uint32_t job_id; @@ -311,6 +336,8 @@ void inline slurm_free_node_info ( node_info_msg_t * msg ) ; void inline slurm_free_node_table ( node_table_t * node ) ; void inline slurm_free_node_table_msg ( node_table_t * node ) ; void inline slurm_free_update_node_msg ( update_node_msg_t * msg ) ; +void inline slurm_free_launch_tasks_msg ( launch_tasks_msg_t * msg ) ; +void inline slurm_free_kill_tasks_msg ( kill_tasks_msg_t * msg ) ; /* stuct init functions */ #define SLURM_JOB_DESC_NONCONTIGUOUS 0 diff --git a/src/common/slurm_protocol_pack.c b/src/common/slurm_protocol_pack.c index a6a11988b8d9334754d1aff07f987d919d25ce8d..c7dfe87fbb996d10bf79f9fcdc6c3b4612b83e1c 100644 --- a/src/common/slurm_protocol_pack.c +++ b/src/common/slurm_protocol_pack.c @@ -68,7 +68,7 @@ int pack_msg ( slurm_msg_t const * msg , char ** buffer , uint32_t * buf_len ) pack_node_info_msg ( ( slurm_msg_t * ) msg , (void ** ) buffer , buf_len ) ; break ; case MESSAGE_NODE_REGISTRATION_STATUS : - pack_node_registration_status_msg ( ( slurm_node_registration_status_msg_t * ) msg , ( void ** ) buffer , buf_len ); + pack_node_registration_status_msg ( ( slurm_node_registration_status_msg_t * ) msg -> data , ( void ** ) buffer , buf_len ); break ; case REQUEST_RESOURCE_ALLOCATION : case REQUEST_SUBMIT_BATCH_JOB : @@ -85,13 +85,20 @@ int pack_msg ( slurm_msg_t const * msg , char ** buffer , uint32_t * buf_len ) case RESPONSE_JOB_WILL_RUN : pack_job_allocation_response_msg ( ( job_allocation_response_msg_t * ) msg -> data , ( void ** ) buffer , buf_len ) ; break ; - - case REQUEST_UPDATE_NODE : pack_update_node_msg ( ( update_node_msg_t * ) msg-> data , ( void ** ) buffer , buf_len ) ; break ; case REQUEST_UPDATE_PARTITION : + //pack_partition_table_msg ( ( partition_desc_msg_t * ) msg->data , ( void ** ) buffer , buf_len ) ; + break ; + case REQUEST_LAUNCH_TASKS : + pack_launch_tasks_msg ( ( launch_tasks_msg_t * ) msg->data , ( void ** ) buffer , buf_len ) ; break ; + case REQUEST_KILL_TASKS : + pack_kill_tasks_msg ( ( kill_tasks_msg_t * ) msg->data , ( void ** ) buffer , buf_len ) ; + break ; + + case REQUEST_CANCEL_JOB : break ; case REQUEST_CANCEL_JOB_STEP : @@ -110,8 +117,6 @@ int pack_msg ( slurm_msg_t const * msg , char ** buffer , uint32_t * buf_len ) break ; case RESPONSE_JOB_ATTACH : break ; - case REQUEST_LAUNCH_TASKS : - break ; case REQUEST_GET_JOB_STEP_INFO : break ; case RESPONSE_GET_JOB_STEP_INFO : @@ -197,8 +202,16 @@ int unpack_msg ( slurm_msg_t * msg , char ** buffer , uint32_t * buf_len ) case REQUEST_UPDATE_NODE : unpack_update_node_msg ( ( update_node_msg_t ** ) & ( msg-> data ) , ( void ** ) buffer , buf_len ) ; + break ; case REQUEST_UPDATE_PARTITION : + unpack_partition_table_msg ( ( partition_desc_msg_t ** ) & ( msg->data ) , ( void ** ) buffer , buf_len ) ; + break ; + case REQUEST_LAUNCH_TASKS : + unpack_launch_tasks_msg ( ( launch_tasks_msg_t ** ) & ( msg->data ) , ( void ** ) buffer , buf_len ) ; + break ; + case REQUEST_KILL_TASKS : + unpack_kill_tasks_msg ( ( kill_tasks_msg_t ** ) & ( msg->data ) , ( void ** ) buffer , buf_len ) ; break ; case REQUEST_CANCEL_JOB : break ; @@ -218,8 +231,6 @@ int unpack_msg ( slurm_msg_t * msg , char ** buffer , uint32_t * buf_len ) break ; case RESPONSE_JOB_ATTACH : break ; - case REQUEST_LAUNCH_TASKS : - break ; case REQUEST_GET_JOB_STEP_INFO : break ; case RESPONSE_GET_JOB_STEP_INFO : @@ -766,26 +777,100 @@ int unpack_return_code ( return_code_msg_t ** msg , void ** buffer , uint32_t * return 0 ; } +void pack_launch_tasks_msg ( launch_tasks_msg_t * msg , void ** buffer , uint32_t * length ) +{ + + pack32 ( msg -> job_id , buffer , length ) ; + pack32 ( msg -> job_step_id , buffer , length ) ; + pack32 ( msg -> uid , buffer , length ) ; + pack32 ( msg -> gid , buffer , length ) ; + packstr ( msg -> credentials , buffer , length ) ; + pack32 ( msg -> tasks_to_launch , buffer , length ) ; + packstr ( msg -> env , buffer , length ) ; + packstr ( msg -> cwd , buffer , length ) ; + packstr ( msg -> cmd_line , buffer , length ) ; + /*stdin location*/ + /*stdout location*/ + /*stderr location*/ + /*task completion location*/ +} + +int unpack_launch_tasks_msg ( launch_tasks_msg_t ** msg_ptr , void ** buffer , uint32_t * length ) +{ + uint16_t uint16_tmp; + launch_tasks_msg_t * msg ; + + msg = xmalloc ( sizeof ( job_desc_msg_t ) ) ; + if (msg == NULL) + { + *msg_ptr = NULL ; + return ENOMEM ; + } + + unpack32 ( & msg -> job_id , buffer , length ) ; + unpack32 ( & msg -> job_step_id , buffer , length ) ; + unpack32 ( & msg -> uid , buffer , length ) ; + unpack32 ( & msg -> gid , buffer , length ) ; + unpackstr_xmalloc ( & msg -> credentials , & uint16_tmp , buffer , length ) ; + unpack32 ( & msg -> tasks_to_launch , buffer , length ) ; + unpackstr_xmalloc ( & msg -> env , & uint16_tmp , buffer , length ) ; + unpackstr_xmalloc ( & msg -> cwd , & uint16_tmp , buffer , length ) ; + unpackstr_xmalloc ( & msg -> cmd_line , & uint16_tmp , buffer , length ) ; + /*stdin location*/ + /*stdout location*/ + /*stderr location*/ + /*task completion location*/ + *msg_ptr = msg ; + return 0 ; +} + +void pack_kill_tasks_msg ( kill_tasks_msg_t * msg , void ** buffer , uint32_t * length ) +{ + pack32 ( msg -> job_id , buffer , length ) ; + pack32 ( msg -> job_step_id , buffer , length ) ; +} + +int unpack_kill_tasks_msg ( kill_tasks_msg_t ** msg_ptr , void ** buffer , uint32_t * length ) +{ + kill_tasks_msg_t * msg ; + + msg = xmalloc ( sizeof ( job_desc_msg_t ) ) ; + if ( msg == NULL) + { + *msg_ptr = NULL ; + return ENOMEM ; + } + + unpack32 ( & msg -> job_id , buffer , length ) ; + unpack32 ( & msg -> job_step_id , buffer , length ) ; + *msg_ptr = msg ; + return 0 ; +} + /* template void pack_ ( * msg , void ** buffer , uint32_t * length ) { pack16 ( msg -> , buffer , length ) ; pack32 ( msg -> , buffer , length ) ; + packstr ( msg -> , buffer , length ) ; } -void unpack_ ( ** msg , void char ** buffer , uint32_t * length ) +void unpack_ ( ** msg_ptr , void ** buffer , uint32_t * length ) { uint16_t uint16_tmp; - job_desc_msg_t * job_desc_ptr ; + * msg ; - job_desc_ptr = xmalloc ( sizeof ( job_desc_msg_t ) ) ; - if (job_desc_ptr== NULL) + msg = xmalloc ( sizeof ( job_desc_msg_t ) ) ; + if (msg == NULL) { - *msg = NULL ; + *msg_ptr = NULL ; return ; } unpack16 ( & msg -> , buffer , length ) ; unpack32 ( & msg -> , buffer , length ) ; + unpackstr_xmalloc ( & msg -> , & uint16_tmp , buffer , length ) ; + *msg_ptr = msg ; } */ + diff --git a/src/common/slurm_protocol_pack.h b/src/common/slurm_protocol_pack.h index dc2a7069bcf0ce32c3666ccec4f312866615569e..e70fc0eba1aa0b1bfc5dedd4036065c6b2d5c6e9 100644 --- a/src/common/slurm_protocol_pack.h +++ b/src/common/slurm_protocol_pack.h @@ -17,52 +17,59 @@ #include <src/common/slurm_protocol_defs.h> /* Pack / Unpack methods for slurm protocol header */ -void pack_header ( header_t * header , char ** buffer , uint32_t * length ) ; +void pack_header ( header_t * header , char ** buffer , uint32_t * length ); -void unpack_header ( header_t * header , char ** buffer , uint32_t * length ) ; +void unpack_header ( header_t * header , char ** buffer , uint32_t * length ); /* generic case statement Pack / Unpack methods for slurm protocol bodies */ -int pack_msg ( slurm_msg_t const * msg , char ** buffer , uint32_t * buf_len ) ; +int pack_msg ( slurm_msg_t const * msg , char ** buffer , uint32_t * buf_len ); -int unpack_msg ( slurm_msg_t * msgi , char ** buffer , uint32_t * buf_len ) ; +int unpack_msg ( slurm_msg_t * msgi , char ** buffer , uint32_t * buf_len ); /* specific Pack / Unpack methods for slurm protocol bodies */ -void pack_node_registration_status_msg ( slurm_node_registration_status_msg_t * msg , void ** buffer , uint32_t * length ) ; +void pack_node_registration_status_msg ( slurm_node_registration_status_msg_t * msg , void ** buffer , uint32_t * length ); -int unpack_node_registration_status_msg ( slurm_node_registration_status_msg_t ** msg , void ** buffer , uint32_t * length ) ; +int unpack_node_registration_status_msg ( slurm_node_registration_status_msg_t ** msg , void ** buffer , uint32_t * length ); -void pack_job_desc ( job_desc_msg_t *job_desc_msg_ptr, void ** buffer , int * buf_len ) ; -int unpack_job_desc ( job_desc_msg_t **job_desc_msg_ptr, void ** buffer , int * buffer_size ) ; +void pack_job_desc ( job_desc_msg_t *job_desc_msg_ptr, void ** buffer , int * buf_len ); +int unpack_job_desc ( job_desc_msg_t **job_desc_msg_ptr, void ** buffer , int * buffer_size ); -void pack_last_update ( last_update_msg_t * msg , void ** buffer , uint32_t * length ) ; -int unpack_last_update ( last_update_msg_t ** msg , void ** buffer , uint32_t * length ) ; +void pack_last_update ( last_update_msg_t * msg , void ** buffer , uint32_t * length ); +int unpack_last_update ( last_update_msg_t ** msg , void ** buffer , uint32_t * length ); void pack_return_code ( return_code_msg_t * msg , void ** buffer , uint32_t * length ); int unpack_return_code ( return_code_msg_t ** msg , void ** buffer , uint32_t * length ); -void pack_slurm_ctl_conf ( slurm_ctl_conf_info_msg_t * build_ptr, void ** buffer , int * buffer_size ) ; -int unpack_slurm_ctl_conf ( slurm_ctl_conf_info_msg_t **build_buffer_ptr, void ** buffer , int * buffer_size ) ; +void pack_slurm_ctl_conf ( slurm_ctl_conf_info_msg_t * build_ptr, void ** buffer , int * buffer_size ); +int unpack_slurm_ctl_conf ( slurm_ctl_conf_info_msg_t **build_buffer_ptr, void ** buffer , int * buffer_size ); -void pack_job_info_msg ( slurm_msg_t * msg , void ** buffer , int * buffer_size ) ; -int unpack_job_info_msg ( job_info_msg_t ** msg , void ** buffer , int * buffer_size ) ; -int unpack_job_table_msg ( job_table_t ** job , void ** buf_ptr , int * buffer_size ) ; -int unpack_job_table ( job_table_t * job , void ** buf_ptr , int * buffer_size ) ; +void pack_job_info_msg ( slurm_msg_t * msg , void ** buffer , int * buffer_size ); +int unpack_job_info_msg ( job_info_msg_t ** msg , void ** buffer , int * buffer_size ); +int unpack_job_table_msg ( job_table_t ** job , void ** buf_ptr , int * buffer_size ); +int unpack_job_table ( job_table_t * job , void ** buf_ptr , int * buffer_size ); -void pack_partition_info_msg ( slurm_msg_t * msg, void ** buf_ptr , int * buffer_size ) ; -int unpack_partition_info_msg ( partition_info_msg_t ** , void ** buffer , int * buffer_size ) ; -int unpack_partition_table_msg ( partition_table_msg_t ** part , void ** buf_ptr , int * buffer_size ) ; -int unpack_partition_table ( partition_table_msg_t * part , void ** buf_ptr , int * buffer_size ) ; +void pack_partition_info_msg ( slurm_msg_t * msg, void ** buf_ptr , int * buffer_size ); +int unpack_partition_info_msg ( partition_info_msg_t ** , void ** buffer , int * buffer_size ); +int unpack_partition_table_msg ( partition_table_msg_t ** part , void ** buf_ptr , int * buffer_size ); +int unpack_partition_table ( partition_table_msg_t * part , void ** buf_ptr , int * buffer_size ); -void pack_node_info_msg ( slurm_msg_t * msg, void ** buf_ptr , int * buffer_size ) ; -int unpack_node_info_msg ( node_info_msg_t ** msg , void ** buf_ptr , int * buffer_size ) ; -int unpack_node_table_msg ( node_table_msg_t ** node , void ** buf_ptr , int * buffer_size ) ; -int unpack_node_table ( node_table_msg_t * node , void ** buf_ptr , int * buffer_size ) ; +void pack_node_info_msg ( slurm_msg_t * msg, void ** buf_ptr , int * buffer_size ); +int unpack_node_info_msg ( node_info_msg_t ** msg , void ** buf_ptr , int * buffer_size ); +int unpack_node_table_msg ( node_table_msg_t ** node , void ** buf_ptr , int * buffer_size ); +int unpack_node_table ( node_table_msg_t * node , void ** buf_ptr , int * buffer_size ); -void pack_job_allocation_response_msg ( job_allocation_response_msg_t * msg, void ** buffer , uint32_t * length ) ; +void pack_job_allocation_response_msg ( job_allocation_response_msg_t * msg, void ** buffer , uint32_t * length ); +int unpack_job_allocation_response_msg ( job_allocation_response_msg_t ** msg , void ** buffer , uint32_t * length ); -int unpack_job_allocation_response_msg ( job_allocation_response_msg_t ** msg , void ** buffer , uint32_t * length ) ; +void pack_update_node_msg ( update_node_msg_t * msg, void ** buffer , uint32_t * length ); +int unpack_update_node_msg ( update_node_msg_t ** msg , void ** buffer , uint32_t * length ); -void pack_update_node_msg ( update_node_msg_t * msg, void ** buffer , uint32_t * length ) ; +void pack_partition_table_msg ( partition_desc_msg_t * msg , void ** buffer , int * buf_len ); +int unpack_partition_table_msg ( partition_desc_msg_t ** msg_ptr , void ** buffer , int * buf_len ); -int unpack_update_node_msg ( update_node_msg_t ** msg , void ** buffer , uint32_t * length ) ; +void pack_launch_tasks_msg ( launch_tasks_msg_t * msg , void ** buffer , uint32_t * length ); +int unpack_launch_tasks_msg ( launch_tasks_msg_t ** msg_ptr , void ** buffer , uint32_t * length ); + +void pack_kill_tasks_msg ( kill_tasks_msg_t * msg , void ** buffer , uint32_t * length ); +int unpack_kill_tasks_msg ( kill_tasks_msg_t ** msg_ptr , void ** buffer , uint32_t * length ); #endif diff --git a/src/common/xstring.c b/src/common/xstring.c index e7acfd610f885fc9d6e3b1f8e892932ccc1c83e6..49e7594d3405f8485dc21d0efc01411c59f258da 100644 --- a/src/common/xstring.c +++ b/src/common/xstring.c @@ -19,7 +19,7 @@ #include <string.h> #include <stdio.h> #if HAVE_STRERROR_R && !HAVE_DECL_STRERROR_R -char *strerror_r(int, char *, int); +//char *strerror_r(int, char *, int); #endif #include <errno.h> #if HAVE_UNISTD_H