From 3a75b7333d071f8a51583904bc3defba77aa036a Mon Sep 17 00:00:00 2001 From: Moe Jette <jette1@llnl.gov> Date: Fri, 14 Jun 2002 01:27:39 +0000 Subject: [PATCH] Added more of the code needed for job submit APIs. Fixed some code for zero size memory allocates, and zero size messages. --- src/common/slurm_protocol_pack.c | 11 +++++-- .../slurm_protocol_socket_implementation.c | 3 +- src/common/xmalloc.c | 4 +-- src/slurmctld/controller.c | 30 ++++++++++++++++++- src/slurmctld/job_mgr.c | 5 +--- src/slurmctld/slurmctld.h | 6 ++++ 6 files changed, 48 insertions(+), 11 deletions(-) diff --git a/src/common/slurm_protocol_pack.c b/src/common/slurm_protocol_pack.c index b387cda8f34..c25f317e506 100644 --- a/src/common/slurm_protocol_pack.c +++ b/src/common/slurm_protocol_pack.c @@ -429,11 +429,9 @@ int unpack_job_info_msg ( job_info_msg_t ** msg , void ** buf_ptr , int * buffer if ( *msg == NULL ) return ENOMEM ; - /* load buffer's header (data structure version and time) */ unpack32 (&((*msg) -> record_count), buf_ptr, buffer_size); unpack32 (&((*msg) -> last_update ) , buf_ptr, buffer_size); - job = (*msg) -> job_array = xmalloc ( sizeof ( job_table_t ) * (*msg)->record_count ) ; /* load individual job info */ @@ -577,7 +575,14 @@ void pack_job_desc ( job_desc_msg_t * job_desc_ptr, void ** buf_ptr , int * buff packstr (job_desc_ptr->groups, buf_ptr, buffer_size); pack32 (job_desc_ptr->job_id, buf_ptr, buffer_size); packstr (job_desc_ptr->name, buf_ptr, buffer_size); - packmem (job_desc_ptr->partition_key, 32, buf_ptr, buffer_size); + if (job_desc_ptr->partition_key) + packmem (job_desc_ptr->partition_key, 32, buf_ptr, buffer_size); + else { + char *no_key; + no_key = xmalloc (32); + packmem (no_key, 32, buf_ptr, buffer_size); + xfree (no_key); + } pack32 (job_desc_ptr->min_procs, buf_ptr, buffer_size); pack32 (job_desc_ptr->min_memory, buf_ptr, buffer_size); diff --git a/src/common/slurm_protocol_socket_implementation.c b/src/common/slurm_protocol_socket_implementation.c index b87014d0849..e82785a9b25 100644 --- a/src/common/slurm_protocol_socket_implementation.c +++ b/src/common/slurm_protocol_socket_implementation.c @@ -68,7 +68,8 @@ ssize_t _slurm_msg_recvfrom ( slurm_fd open_fd, char *buffer , size_t size , uin */ if ( ( recv_len = _slurm_recv ( open_fd , size_buffer_temp , sizeof ( uint32_t ) , SLURM_PROTOCOL_NO_SEND_RECV_FLAGS ) ) != sizeof ( uint32_t ) ) { - info ( "Error receiving length of datagram. Total Bytes Sent %i \n", recv_len ) ; + info ( "Error receiving length of datagram. Total bytes received %i \n", recv_len ) ; + return 0 ; } unpack32 ( & transmit_size , ( void ** ) & size_buffer , & size_buffer_len ) ; diff --git a/src/common/xmalloc.c b/src/common/xmalloc.c index e331e727752..6c35908f615 100644 --- a/src/common/xmalloc.c +++ b/src/common/xmalloc.c @@ -55,7 +55,7 @@ void *_xmalloc(size_t size, const char *file, int line, const char *func) void *new; int *p; - xmalloc_assert(size > 0 && size <= INT_MAX); + xmalloc_assert(size >= 0 && size <= INT_MAX); MALLOC_LOCK(); p = (int *)malloc(size + 2*sizeof(int)); MALLOC_UNLOCK(); @@ -82,7 +82,7 @@ void *_try_xmalloc(size_t size, const char *file, int line, const char *func) void *new; int *p; - xmalloc_assert(size > 0 && size <= INT_MAX); + xmalloc_assert(size >= 0 && size <= INT_MAX); MALLOC_LOCK(); p = (int *)malloc(size + 2*sizeof(int)); MALLOC_UNLOCK(); diff --git a/src/slurmctld/controller.c b/src/slurmctld/controller.c index 1946aeb20b3..3abb3fe4d0a 100644 --- a/src/slurmctld/controller.c +++ b/src/slurmctld/controller.c @@ -53,7 +53,7 @@ inline static void slurm_rpc_dump_nodes ( slurm_msg_t * msg ) ; inline static void slurm_rpc_dump_partitions ( slurm_msg_t * msg ) ; inline static void slurm_rpc_dump_jobs ( slurm_msg_t * msg ) ; inline static void slurm_rpc_job_cancel ( slurm_msg_t * msg ) ; -inline static void slurm_rpc_job_will_run ( slurm_msg_t * msg ) ; +inline static void slurm_rpc_job_submit ( slurm_msg_t * msg ) ; inline static void slurm_rpc_reconfigure_controller ( slurm_msg_t * msg ) ; inline static void slurm_rpc_node_registration ( slurm_msg_t * msg ) ; @@ -149,6 +149,8 @@ slurmctld_req ( slurm_msg_t * msg ) slurm_free_job_id_msg ( msg -> data ) ; break; case REQUEST_SUBMIT_BATCH_JOB: +/* slurm_rpc_job_submit ( msg ) ; + slurm_free_??? ( msg -> data ) ; */ break; case REQUEST_NODE_REGISRATION_STATUS: break; @@ -356,6 +358,32 @@ slurm_rpc_job_cancel ( slurm_msg_t * msg ) } +void +slurm_rpc_job_submit ( slurm_msg_t * msg ) +{ + clock_t start_time; + char *dump; + int dump_size; + slurm_msg_t response_msg ; + job_desc_msg_t * job_desc_ptr = ( job_desc_msg_t * ) msg-> data ; + + start_time = clock (); + + pack_all_part (&dump, &dump_size, &last_update); + /* init response_msg structure */ + response_msg . address = msg -> address ; + response_msg . msg_type = RESPONSE_SUBMIT_BATCH_JOB ; +/* + response_msg . data = dump ; + response_msg . data_size = dump_size ; + + /* send message */ + slurm_send_node_msg( msg -> conn_fd , &response_msg ) ; + info ("slurmctld_req: job_submit, size=%d, time=%ld", + dump_size, (long) (clock () - start_time)); +*/ +} + /* UpdateNode - */ /* Update - modify node or partition configuration */ void diff --git a/src/slurmctld/job_mgr.c b/src/slurmctld/job_mgr.c index a1eda807ed8..b3af5264c95 100644 --- a/src/slurmctld/job_mgr.c +++ b/src/slurmctld/job_mgr.c @@ -39,8 +39,6 @@ static int max_hash_over = 0; void list_delete_job (void *job_entry); int list_find_job_id (void *job_entry, void *key); int list_find_job_old (void *job_entry, void *key); -void set_job_id (struct job_record *job_ptr); -void set_job_prio (struct job_record *job_ptr); int top_priority (struct job_record *job_ptr); int copy_job_desc_to_job_record ( job_desc_msg_t * job_desc , struct job_record ** job_ptr , struct part_record *part_ptr, bitstr_t *req_bitmap) ; int validate_job_desc ( job_desc_msg_t * job_desc_msg , int allocate ) ; @@ -1157,8 +1155,7 @@ reset_job_bitmaps () /* - * set_job_id - set a default job_id: partition name, ".", sequence number - * insure that the job_id is unique + * set_job_id - set a default job_id, insure that it is unique * input: job_ptr - pointer to the job_record */ void diff --git a/src/slurmctld/slurmctld.h b/src/slurmctld/slurmctld.h index 1f943bb0f61..172364a26fe 100644 --- a/src/slurmctld/slurmctld.h +++ b/src/slurmctld/slurmctld.h @@ -742,6 +742,12 @@ void schedule(); */ extern int select_nodes (struct job_record *job_ptr, int test_only); +/* set_job_id - set a default job_id, insure that it is unique */ +extern void set_job_id (struct job_record *job_ptr); + +/* set_job_prio - set a default job priority */ +extern void set_job_prio (struct job_record *job_ptr); + /* * slurm_parser - parse the supplied specification into keyword/value pairs * only the keywords supplied will be searched for. the supplied specification -- GitLab