From 5de236db69b8bef5eda2c2a39684fdcb4e12c18d Mon Sep 17 00:00:00 2001 From: tewk <tewk@unknown> Date: Thu, 30 May 2002 17:27:24 +0000 Subject: [PATCH] Added pack routines for job_desc and continued clean up --- src/common/slurm_protocol_defs.h | 37 +++++- src/common/slurm_protocol_pack.c | 196 +++++++++++++++++++++++++++++++ 2 files changed, 231 insertions(+), 2 deletions(-) diff --git a/src/common/slurm_protocol_defs.h b/src/common/slurm_protocol_defs.h index 816adb4146c..a6fcf600e30 100644 --- a/src/common/slurm_protocol_defs.h +++ b/src/common/slurm_protocol_defs.h @@ -18,6 +18,7 @@ #define true -1 #define false 0 +#include <src/common/slurm_protocol_common.h> /* for sendto and recvfrom commands */ #define NO_SEND_RECV_FLAGS 0 @@ -96,7 +97,8 @@ typedef enum { REQUEST_RUN_JOB_STEP = 48, RESPONSE_RUN_JOB_STEP = 49 */ -} slurm_msg_type_t ; +} SLURM_MSG_TYPE_T ; +typedef uint16_t slurm_msg_type_t ; #define REQUEST_NODE_REGISRATION_STATUS 1 #define MESSAGE_NODE_REGISRATION_STATUS 2 @@ -161,9 +163,40 @@ typedef struct slurm_node_registration_status_msg uint32_t temporary_disk_space ; } node_registration_status_msg_t ; +typedef struct job_desc { /* Job descriptor for submit, allocate, and update requests */ + uint16_t contiguous; /* 1 if job requires contiguous nodes, 0 otherwise, + * default=0 */ + char *features; /* comma separated list of required features, default NONE */ + char *groups; /* comma separated list of groups the user can access, + * default set output of "/usr/bin/groups" by API, + * can only be set if user is root */ + uint32_t job_id; /* job ID, default set by SLURM */ + char *name; /* name of the job, default "" */ + void *partition_key; /* root key to submit job, format TBD, default NONE */ + uint32_t min_procs; /* minimum processors required per node, default=0 */ + uint32_t min_memory; /* minimum real memory required per node, default=0 */ + uint32_t min_tmp_disk; /* minimum temporary disk required per node, default=0 */ + char *partition; /* name of requested partition, default in SLURM config */ + uint32_t priority; /* relative priority of the job, default set by SLURM, + * can only be explicitly set if user is root, maximum + * * value is #fffffffe */ + char *req_nodes; /* comma separated list of required nodes, default NONE */ + char *job_script; /* pathname of required script, default NONE */ + uint16_t shared; /* 1 if job can share nodes with other jobs, 0 otherwise, + * default in SLURM configuration */ + uint32_t time_limit; /* maximum run time in minutes, default is partition + * limit as defined in SLURM configuration, maximum + * * value is #fffffffe */ + uint32_t num_procs; /* number of processors required by job, default=0 */ + uint32_t num_nodes; /* number of nodes required by job, default=0 */ + uint32_t user_id; /* set only if different from current UID, default set + * to UID by API, can only be set if user is root */ +} job_desc_t ; + typedef struct slurm_msg { - uint16_t msg_type ; + slurm_msg_type_t msg_type ; + slurm_addr address ; void * msg ; } slurm_msg_t ; #endif diff --git a/src/common/slurm_protocol_pack.c b/src/common/slurm_protocol_pack.c index b984e8bc139..b15fd47c46b 100644 --- a/src/common/slurm_protocol_pack.c +++ b/src/common/slurm_protocol_pack.c @@ -1,6 +1,11 @@ #include <stdlib.h> +#include <errno.h> +#include <string.h> + #include <src/common/slurm_protocol_pack.h> #include <src/common/pack.h> +#include <src/common/log.h> +#include <src/slurmctld/slurmctld.h> void pack_header ( char ** buffer , uint32_t * length , header_t * header ) { @@ -90,6 +95,67 @@ void unpack_msg ( char ** buffer , uint32_t * buf_len , slurm_msg_t * msg ) { switch ( msg -> msg_type ) { + case REQUEST_NODE_REGISRATION_STATUS : + break ; + case MESSAGE_NODE_REGISRATION_STATUS : + break ; + case REQUEST_RESOURCE_ALLOCATION : + case REQUEST_SUBMIT_BATCH_JOB : + break ; + case RESPONSE_RESOURCE_ALLOCATION : + break ; + case RESPONSE_SUBMIT_BATCH_JOB : + break ; + case REQUEST_CANCEL_JOB : + break ; + case REQUEST_CANCEL_JOB_STEP : + break ; + case REQUEST_SIGNAL_JOB : + break ; + case REQUEST_SIGNAL_JOB_STEP : + break ; + case REQUEST_RECONFIGURE : + break ; + case RESPONSE_CANCEL_JOB : + case RESPONSE_RECONFIGURE : + case RESPONSE_CANCEL_JOB_STEP : + case RESPONSE_SIGNAL_JOB : + case RESPONSE_SIGNAL_JOB_STEP : + break ; + case REQUEST_JOB_INFO : + break ; + case REQUEST_JOB_ATTACH : + break ; + case RESPONSE_JOB_ATTACH : + break ; + case REQUEST_LAUNCH_TASKS : + break ; + case REQUEST_GET_JOB_STEP_INFO : + break ; + case RESPONSE_GET_JOB_STEP_INFO : + break ; + case REQUEST_JOB_RESOURCE : + break ; + case RESPONSE_JOB_RESOURCE : + break ; + case REQUEST_RUN_JOB_STEP : + break ; + case RESPONSE_RUN_JOB_STEP: + break ; + case REQUEST_GET_KEY : + break ; + case RESPONSE_GET_KEY : + break ; + case MESSAGE_TASK_EXIT : + break ; + case REQUEST_BATCH_JOB_LAUNCH : + break ; + case MESSAGE_UPLOAD_ACCOUNTING_INFO : + break ; + default : + debug ( "No pack method for msg type %i", msg -> msg_type ) ; + break; + } } @@ -107,6 +173,136 @@ void unpack_node_registration_status_msg ( char ** buffer , uint32_t * length , unpack32 ( & msg -> temporary_disk_space , ( void ** ) buffer , length ) ; } + +int unpack_build_info ( struct build_buffer **build_buffer_ptr, void * buffer , int buffer_size ) +{ + uint16_t uint16_tmp; + uint32_t uint32_time; + struct build_table * build_ptr ; + void * buf_ptr; + + /* alloc memory for structure */ + build_ptr = malloc ( sizeof ( struct build_table ) ) ; + if (build_ptr == NULL) + { + return ENOMEM; + } + + /* load the data values */ + /* unpack timestamp of snapshot */ + buf_ptr = buffer ; + unpack32 (&uint32_time, &buf_ptr, &buffer_size); + + unpack16 (&build_ptr->backup_interval, &buf_ptr, &buffer_size); + unpackstr_ptr (&build_ptr->backup_location, &uint16_tmp, &buf_ptr, &buffer_size); + unpackstr_ptr (&build_ptr->backup_machine, &uint16_tmp, &buf_ptr, &buffer_size); + unpackstr_ptr (&build_ptr->control_daemon, &uint16_tmp, &buf_ptr, &buffer_size); + unpackstr_ptr (&build_ptr->control_machine, &uint16_tmp, &buf_ptr, &buffer_size); + unpack16 (&build_ptr->controller_timeout, &buf_ptr, &buffer_size); + unpackstr_ptr (&build_ptr->epilog, &uint16_tmp, &buf_ptr, &buffer_size); + unpack16 (&build_ptr->fast_schedule, &buf_ptr, &buffer_size); + unpack16 (&build_ptr->hash_base, &buf_ptr, &buffer_size); + unpack16 (&build_ptr->heartbeat_interval, &buf_ptr, &buffer_size); + unpackstr_ptr (&build_ptr->init_program, &uint16_tmp, &buf_ptr, &buffer_size); + unpack16 (&build_ptr->kill_wait, &buf_ptr, &buffer_size); + unpackstr_ptr (&build_ptr->prioritize, &uint16_tmp, &buf_ptr, &buffer_size); + unpackstr_ptr (&build_ptr->prolog, &uint16_tmp, &buf_ptr, &buffer_size); + unpackstr_ptr (&build_ptr->server_daemon, &uint16_tmp, &buf_ptr, &buffer_size); + unpack16 (&build_ptr->server_timeout, &buf_ptr, &buffer_size); + unpackstr_ptr (&build_ptr->slurm_conf, &uint16_tmp, &buf_ptr, &buffer_size); + unpackstr_ptr (&build_ptr->tmp_fs, &uint16_tmp, &buf_ptr, &buffer_size); + + *build_buffer_ptr = malloc (sizeof (struct build_buffer)); + if (*build_buffer_ptr == NULL) { + free (build_ptr); + return ENOMEM; + } + (*build_buffer_ptr)->last_update = (time_t) uint32_time; + (*build_buffer_ptr)->raw_buffer_ptr = buffer; + (*build_buffer_ptr)->build_table_ptr = build_ptr; + return 0; +} + +int pack_job_desc ( job_desc_t *job_desc_ptr, void * buffer , int buf_len ) +{ + void * buf_ptr; + int buffer_size = buf_len ; + + /* load the data values */ + /* unpack timestamp of snapshot */ + buf_ptr = buffer ; + + pack16 (job_desc_ptr->contiguous, &buf_ptr, &buffer_size); + packstr (job_desc_ptr->features, &buf_ptr, &buffer_size); + 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); + + pack32 (job_desc_ptr->min_procs, &buf_ptr, &buffer_size); + pack32 (job_desc_ptr->min_memory, &buf_ptr, &buffer_size); + pack32 (job_desc_ptr->min_tmp_disk, &buf_ptr, &buffer_size); + + packstr (job_desc_ptr->partition, &buf_ptr, &buffer_size); + pack32 (job_desc_ptr->priority, &buf_ptr, &buffer_size); + + packstr (job_desc_ptr->partition, &buf_ptr, &buffer_size); + packstr (job_desc_ptr->partition, &buf_ptr, &buffer_size); + pack16 (job_desc_ptr->shared, &buf_ptr, &buffer_size); + + pack32 (job_desc_ptr->time_limit, &buf_ptr, &buffer_size); + + pack32 (job_desc_ptr->num_procs, &buf_ptr, &buffer_size); + pack32 (job_desc_ptr->num_nodes, &buf_ptr, &buffer_size); + pack32 (job_desc_ptr->user_id, &buf_ptr, &buffer_size); + + return buf_len - buffer_size ; +} + +int unpack_job_desc ( job_desc_t **job_desc_buffer_ptr, void * buffer , int buffer_size ) +{ + uint16_t uint16_tmp; + void * buf_ptr; + job_desc_t * job_desc_ptr ; + + /* alloc memory for structure */ + job_desc_ptr = malloc ( sizeof ( job_desc_t ) ) ; + if (job_desc_ptr== NULL) + { + return ENOMEM; + } + + /* load the data values */ + /* unpack timestamp of snapshot */ + buf_ptr = buffer ; + + unpack16 (&job_desc_ptr->contiguous, &buf_ptr, &buffer_size); + unpackstr_ptr (&job_desc_ptr->features, &uint16_tmp, &buf_ptr, &buffer_size); + unpackstr_ptr (&job_desc_ptr->groups, &uint16_tmp, &buf_ptr, &buffer_size); + unpack32 (&job_desc_ptr->job_id, &buf_ptr, &buffer_size); + unpackstr_ptr (&job_desc_ptr->name, &uint16_tmp, &buf_ptr, &buffer_size); + unpackmem_ptr ( ( char ** ) &job_desc_ptr->partition_key, &uint16_tmp, &buf_ptr, &buffer_size); + + unpack32 (&job_desc_ptr->min_procs, &buf_ptr, &buffer_size); + unpack32 (&job_desc_ptr->min_memory, &buf_ptr, &buffer_size); + unpack32 (&job_desc_ptr->min_tmp_disk, &buf_ptr, &buffer_size); + + unpackstr_ptr (&job_desc_ptr->partition, &uint16_tmp, &buf_ptr, &buffer_size); + unpack32 (&job_desc_ptr->priority, &buf_ptr, &buffer_size); + + unpackstr_ptr (&job_desc_ptr->partition, &uint16_tmp, &buf_ptr, &buffer_size); + unpackstr_ptr (&job_desc_ptr->partition, &uint16_tmp, &buf_ptr, &buffer_size); + unpack16 (&job_desc_ptr->shared, &buf_ptr, &buffer_size); + + unpack32 (&job_desc_ptr->time_limit, &buf_ptr, &buffer_size); + + unpack32 (&job_desc_ptr->num_procs, &buf_ptr, &buffer_size); + unpack32 (&job_desc_ptr->num_nodes, &buf_ptr, &buffer_size); + unpack32 (&job_desc_ptr->user_id, &buf_ptr, &buffer_size); + + return 0; +} + /* template void pack_ ( char ** buffer , uint32_t * length , * msg ) { -- GitLab