diff --git a/src/api/config_info.c b/src/api/config_info.c index 8c47fe5d76f9c7b58d71fe341c6d962f2ede8b89..96ab894f9c43dfc970f6e6a3f1684456ee473214 100644 --- a/src/api/config_info.c +++ b/src/api/config_info.c @@ -37,22 +37,20 @@ void slurm_print_ctl_conf ( FILE* out, slurm_ctl_conf_info_msg_t * slurm_ctl_con if ( slurm_ctl_conf_ptr == NULL ) return ; fprintf(out, "Build updated at %lx\n", (time_t)slurm_ctl_conf_ptr->last_update); - fprintf(out, "BACKUP_INTERVAL = %u\n", slurm_ctl_conf_ptr->backup_interval); - fprintf(out, "BACKUP_LOCATION = %s\n", slurm_ctl_conf_ptr->backup_location); - fprintf(out, "BACKUP_MACHINE = %s\n", slurm_ctl_conf_ptr->backup_machine); - fprintf(out, "CONTROL_DAEMON = %s\n", slurm_ctl_conf_ptr->control_daemon); - fprintf(out, "CONTROL_MACHINE = %s\n", slurm_ctl_conf_ptr->control_machine); - fprintf(out, "EPILOG = %s\n", slurm_ctl_conf_ptr->epilog); - fprintf(out, "FAST_SCHEDULE = %u\n", slurm_ctl_conf_ptr->fast_schedule); - fprintf(out, "HASH_BASE = %u\n", slurm_ctl_conf_ptr->hash_base); - fprintf(out, "HEARTBEAT_INTERVAL = %u\n", slurm_ctl_conf_ptr->heartbeat_interval); - fprintf(out, "KILL_WAIT = %u\n", slurm_ctl_conf_ptr->kill_wait); - fprintf(out, "PRIORITIZE = %s\n", slurm_ctl_conf_ptr->prioritize); - fprintf(out, "PROLOG = %s\n", slurm_ctl_conf_ptr->prolog); - fprintf(out, "SERVER_DAEMON = %s\n", slurm_ctl_conf_ptr->server_daemon); - fprintf(out, "SERVER_TIMEOUT = %u\n", slurm_ctl_conf_ptr->server_timeout); - fprintf(out, "SLURM_CONF = %s\n", slurm_ctl_conf_ptr->slurm_conf); - fprintf(out, "TMP_FS = %s\n", slurm_ctl_conf_ptr->tmp_fs); + fprintf(out, "BackupController = %s\n", slurm_ctl_conf_ptr->backup_controller); + fprintf(out, "ControlMachine = %s\n", slurm_ctl_conf_ptr->control_machine); + fprintf(out, "Epilog = %s\n", slurm_ctl_conf_ptr->epilog); + fprintf(out, "FastSchedule = %u\n", slurm_ctl_conf_ptr->fast_schedule); + fprintf(out, "NodeHashBase = %u\n", slurm_ctl_conf_ptr->hash_base); + fprintf(out, "HeartbeatInterval = %u\n", slurm_ctl_conf_ptr->heartbeat_interval); + fprintf(out, "KillWait = %u\n", slurm_ctl_conf_ptr->kill_wait); + fprintf(out, "Prioritize = %s\n", slurm_ctl_conf_ptr->prioritize); + fprintf(out, "Prolog = %s\n", slurm_ctl_conf_ptr->prolog); + fprintf(out, "SlurmctldTimeout = %u\n", slurm_ctl_conf_ptr->slurmctld_timeout); + fprintf(out, "SlurmdTimeout = %u\n", slurm_ctl_conf_ptr->slurmd_timeout); + fprintf(out, "SLURM_CONFIG_FILE = %s\n", slurm_ctl_conf_ptr->slurm_conf); + fprintf(out, "StateSaveLocation = %s\n", slurm_ctl_conf_ptr->state_save_location); + fprintf(out, "TmpFS = %s\n", slurm_ctl_conf_ptr->tmp_fs); } int diff --git a/src/common/Makefile.am b/src/common/Makefile.am index 0df2e7f2b70233225193677af8aa65a2d5966b84..f9385383a7c4708b01496c116605b0a6b1f324a2 100644 --- a/src/common/Makefile.am +++ b/src/common/Makefile.am @@ -28,6 +28,7 @@ libcommon_la_SOURCES = xmalloc.c \ pack.c \ xerrno.c \ hostlist.c \ + parse_spec.c \ slurm_protocol_api.c \ slurm_protocol_pack.c \ slurm_protocol_util.c \ @@ -49,6 +50,7 @@ noinst_HEADERS = xmalloc.h \ pack.h \ xerrno.h \ hostlist.h \ + parse_spec.h \ slurm_protocol_api.h \ slurm_protocol_pack.h \ slurm_protocol_util.h \ diff --git a/src/common/slurm_protocol_api.c b/src/common/slurm_protocol_api.c index 945afdd58fe506ac6e9786c040060b61b463de93..5629f7e15d447025eadd779aa3fdf9a1b0e1d056 100644 --- a/src/common/slurm_protocol_api.c +++ b/src/common/slurm_protocol_api.c @@ -5,8 +5,8 @@ #include <stdio.h> /* PROJECT INCLUDES */ +#include <src/common/parse_spec.h> #include <src/common/slurm_protocol_interface.h> -#include <src/common/slurm_protocol_defs.h> #include <src/common/slurm_protocol_api.h> #include <src/common/slurm_protocol_common.h> #include <src/common/slurm_protocol_pack.h> @@ -17,11 +17,12 @@ /* EXTERNAL VARIABLES */ /* #DEFINES */ +#define BUF_SIZE 1024 /* STATIC VARIABLES */ static slurm_protocol_config_t proto_conf_default ; static slurm_protocol_config_t * proto_conf = & proto_conf_default ; - +static slurm_ctl_conf_t slurmctld_conf; /************************/ /***** API init functions */ @@ -39,13 +40,92 @@ slurm_protocol_config_t * slurm_get_api_config ( ) int slurm_api_set_default_config ( ) { - 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 ) ; + if ( (slurmctld_conf . control_machine == NULL) || + (slurmctld_conf . backup_controller == NULL) || + (slurmctld_conf . slurmctld_port == 0) ) + read_slurm_port_config ( ); + + slurm_set_addr ( & proto_conf_default . primary_controller , + slurmctld_conf . slurmctld_port , + slurmctld_conf . control_machine ) ; + slurm_set_addr ( & proto_conf_default . secondary_controller , + slurmctld_conf . slurmctld_port , + slurmctld_conf . backup_controller ) ; proto_conf = & proto_conf_default ; return SLURM_SUCCESS ; } +int read_slurm_port_config ( ) +{ + FILE *slurm_spec_file; /* pointer to input data file */ + char in_line[BUF_SIZE]; /* input line */ + char * control_machine = NULL; + char * backup_controller = NULL; + int error_code, i, j, line_num = 0; + int slurmctld_port = 0, slurmd_port = 0; + + slurm_spec_file = fopen (SLURM_CONFIG_FILE, "r"); + if (slurm_spec_file == NULL) { + fprintf (stderr, "read_slurm_conf error %d opening file %s", + errno, SLURM_CONFIG_FILE); + exit (1); + } + + while (fgets (in_line, BUF_SIZE, slurm_spec_file) != NULL) { + line_num++; + if (strlen (in_line) >= (BUF_SIZE - 1)) { + error ("read_slurm_conf line %d, of input file %s too long\n", + line_num, SLURM_CONFIG_FILE); + fclose (slurm_spec_file); + return E2BIG; + break; + } + + + /* everything after a non-escaped "#" is a comment */ + /* replace comment flag "#" with an end of string (NULL) */ + for (i = 0; i < BUF_SIZE; i++) { + if (in_line[i] == (char) NULL) + break; + if (in_line[i] != '#') + continue; + if ((i > 0) && (in_line[i - 1] == '\\')) { /* escaped "#" */ + for (j = i; j < BUF_SIZE; j++) { + in_line[j - 1] = in_line[j]; + } + continue; + } + in_line[i] = (char) NULL; + break; + } + + /* parse what is left */ + /* overall slurm configuration parameters */ + error_code = slurm_parser(in_line, + "ControlMachine=", 's', &control_machine, + "BackupController=", 's', &backup_controller, + "SlurmctldPort=", 'd', &slurmctld_port, + "SlurmdPort=", 'd', &slurmd_port, + "END"); + if (error_code) { + fclose (slurm_spec_file); + return error_code; + } + + if ( slurmctld_conf.control_machine == NULL ) + slurmctld_conf.control_machine = control_machine; + if ( slurmctld_conf.backup_controller == NULL ) + slurmctld_conf.backup_controller = backup_controller; + if (slurmctld_port) + slurmctld_conf.slurmctld_port = slurmctld_port; + if (slurmd_port) + slurmctld_conf.slurmd_port = slurmd_port; + } + fclose (slurm_spec_file); + return SLURM_SUCCESS; +} + int slurm_set_default_controllers ( char * primary_controller_hostname , char * secondary_controller_hostname, uint16_t pri_port , uint16_t sec_port ) { slurm_set_addr ( & proto_conf_default . primary_controller , pri_port , primary_controller_hostname ) ; diff --git a/src/common/slurm_protocol_api.h b/src/common/slurm_protocol_api.h index a71f03b75509847e00ee671abec8d31406538bb5..b17668fcb6e46f64b99ee33ec0851b8d73f1fb60 100644 --- a/src/common/slurm_protocol_api.h +++ b/src/common/slurm_protocol_api.h @@ -21,12 +21,8 @@ #include <src/common/slurm_protocol_defs.h> #include <src/common/slurm_protocol_errno.h> - -#define SLURM_PORT 7002 -#define SLURM_PROTOCOL_DEFAULT_PORT 7002 -#define SLURM_PROTOCOL_DEFAULT_PRIMARY_CONTROLLER "localhost" -#define SLURM_PROTOCOL_DEFAULT_SECONDARY_CONTROLLER "localhost" - +/* slurmctld_conf must be loaded with port numbers and controller names */ +extern slurm_ctl_conf_t slurmctld_conf; /* high level routines */ /* API init routines */ @@ -150,6 +146,9 @@ void inline slurm_get_addr ( slurm_addr * slurm_address , uint16_t * port , char void inline slurm_pack_slurm_addr ( slurm_addr * slurm_address , void ** buffer , int * length ) ; void inline slurm_unpack_slurm_addr_no_alloc ( slurm_addr * slurm_address , void ** buffer , int * length ) ; +/* function to read hostname and port numbers from configuration file */ +int read_slurm_port_config ( ); + /* Slurm message functions */ void slurm_free_msg ( slurm_msg_t * msg ) ; diff --git a/src/common/slurm_protocol_defs.c b/src/common/slurm_protocol_defs.c index 0e3c6cfb8e79bcab691f26c9ddc2c34a9b40e653..f84ccf79375496eafec785d7274e85ea5989fa42 100644 --- a/src/common/slurm_protocol_defs.c +++ b/src/common/slurm_protocol_defs.c @@ -53,12 +53,8 @@ void slurm_free_ctl_conf ( slurm_ctl_conf_info_msg_t * build_ptr ) { if ( build_ptr ) { - if ( build_ptr->backup_location ) - xfree ( build_ptr->backup_location ) ; - if ( build_ptr->backup_machine ) - xfree ( build_ptr->backup_machine ) ; - if ( build_ptr->control_daemon ) - xfree ( build_ptr->control_daemon ) ; + if ( build_ptr->backup_controller ) + xfree ( build_ptr->backup_controller ) ; if ( build_ptr->control_machine ) xfree ( build_ptr->control_machine ) ; if ( build_ptr->epilog ) @@ -67,14 +63,12 @@ void slurm_free_ctl_conf ( slurm_ctl_conf_info_msg_t * build_ptr ) xfree ( build_ptr->prioritize ) ; if ( build_ptr->prolog ) xfree ( build_ptr->prolog ) ; - if ( build_ptr->server_daemon ) - xfree ( build_ptr->server_daemon ) ; if ( build_ptr->slurm_conf ) xfree ( build_ptr->slurm_conf ) ; + if ( build_ptr->state_save_location ) + xfree ( build_ptr->state_save_location ) ; if ( build_ptr->tmp_fs ) xfree ( build_ptr->tmp_fs ) ; - if ( build_ptr->server_daemon ) - xfree ( build_ptr->server_daemon ) ; xfree ( build_ptr ) ; } } diff --git a/src/common/slurm_protocol_defs.h b/src/common/slurm_protocol_defs.h index 9f35cfc53533ee72bfa1ab37caab779856359446..ebf3bef9ab6d4d23e6e8067d14eeb8a6bc4ce1a5 100644 --- a/src/common/slurm_protocol_defs.h +++ b/src/common/slurm_protocol_defs.h @@ -322,13 +322,10 @@ typedef struct job_desc_msg { /* Job descriptor for submit, allocate, and upda struct slurm_ctl_conf { uint32_t last_update; /* last update time of the build parameters*/ - uint16_t backup_interval;/* slurmctld save state interval, seconds */ - char *backup_location; /* pathname of state save directory */ - char *backup_machine; /* name of slurmctld secondary server */ - char *control_daemon; /* pathname of slurmctld */ + char *backup_controller;/* name of slurmctld secondary server */ char *control_machine; /* name of slurmctld primary server */ - uint16_t controller_timeout; /* seconds for secondary slurmctld to take over */ char *epilog; /* pathname of job epilog */ + uint32_t first_job_id; /* first slurm generated job_id to assign */ uint16_t fast_schedule; /* 1 to *not* check configurations by node * (only check configuration file, faster) */ uint16_t hash_base; /* base used for hashing node table */ @@ -336,9 +333,12 @@ struct slurm_ctl_conf { uint16_t kill_wait; /* seconds from SIGXCPU to SIGKILL on job termination */ char *prioritize; /* pathname of program to set initial job priority */ char *prolog; /* pathname of job prolog */ - char *server_daemon; /* pathame of slurmd */ - uint16_t server_timeout;/* how long slurmctld waits for setting node DOWN */ + uint32_t slurmctld_port;/* default communications port to slurmctld */ + uint16_t slurmctld_timeout; /* how long backup waits for primarly slurmctld */ + uint32_t slurmd_port; /* default communications port to slurmd */ + uint16_t slurmd_timeout;/* how long slurmctld waits for slurmd before setting down */ char *slurm_conf; /* pathname of slurm config file */ + char *state_save_location; /* pathname of state save directory */ char *tmp_fs; /* pathname of temporary file system */ } ; typedef struct slurm_ctl_conf slurm_ctl_conf_t ; diff --git a/src/common/slurm_protocol_pack.c b/src/common/slurm_protocol_pack.c index d0663484203e5f1e5bff56de8c3f0f1c78e0ebc9..1ca3f92ff2ccaf12206a147086360eb32a58485a 100644 --- a/src/common/slurm_protocol_pack.c +++ b/src/common/slurm_protocol_pack.c @@ -834,12 +834,8 @@ int unpack_job_table ( job_table_t * job , void ** buf_ptr , int * buffer_size ) void pack_slurm_ctl_conf ( slurm_ctl_conf_info_msg_t * build_ptr, void ** buf_ptr , int * buffer_size ) { pack32 (build_ptr->last_update, buf_ptr, buffer_size); - pack16 (build_ptr->backup_interval, buf_ptr, buffer_size); - packstr (build_ptr->backup_location, buf_ptr, buffer_size); - packstr (build_ptr->backup_machine, buf_ptr, buffer_size); - packstr (build_ptr->control_daemon, buf_ptr, buffer_size); + packstr (build_ptr->backup_controller, buf_ptr, buffer_size); packstr (build_ptr->control_machine, buf_ptr, buffer_size); - pack16 (build_ptr->controller_timeout, buf_ptr, buffer_size); packstr (build_ptr->epilog, buf_ptr, buffer_size); pack16 (build_ptr->fast_schedule, buf_ptr, buffer_size); pack16 (build_ptr->hash_base, buf_ptr, buffer_size); @@ -847,9 +843,10 @@ void pack_slurm_ctl_conf ( slurm_ctl_conf_info_msg_t * build_ptr, void ** buf_pt pack16 (build_ptr->kill_wait, buf_ptr, buffer_size); packstr (build_ptr->prioritize, buf_ptr, buffer_size); packstr (build_ptr->prolog, buf_ptr, buffer_size); - packstr (build_ptr->server_daemon, buf_ptr, buffer_size); - pack16 (build_ptr->server_timeout, buf_ptr, buffer_size); + pack16 (build_ptr->slurmctld_timeout, buf_ptr, buffer_size); + pack16 (build_ptr->slurmd_timeout, buf_ptr, buffer_size); packstr (build_ptr->slurm_conf, buf_ptr, buffer_size); + packstr (build_ptr->state_save_location, buf_ptr, buffer_size); packstr (build_ptr->tmp_fs, buf_ptr, buffer_size); } @@ -867,12 +864,8 @@ int unpack_slurm_ctl_conf ( slurm_ctl_conf_info_msg_t **build_buffer_ptr, void * /* load the data values */ /* unpack timestamp of snapshot */ unpack32 (&build_ptr->last_update, buffer, buffer_size); - unpack16 (&build_ptr->backup_interval, buffer, buffer_size); - unpackstr_xmalloc (&build_ptr->backup_location, &uint16_tmp, buffer, buffer_size); - unpackstr_xmalloc (&build_ptr->backup_machine, &uint16_tmp, buffer, buffer_size); - unpackstr_xmalloc (&build_ptr->control_daemon, &uint16_tmp, buffer, buffer_size); + unpackstr_xmalloc (&build_ptr->backup_controller, &uint16_tmp, buffer, buffer_size); unpackstr_xmalloc (&build_ptr->control_machine, &uint16_tmp, buffer, buffer_size); - unpack16 (&build_ptr->controller_timeout, buffer, buffer_size); unpackstr_xmalloc (&build_ptr->epilog, &uint16_tmp, buffer, buffer_size); unpack16 (&build_ptr->fast_schedule, buffer, buffer_size); unpack16 (&build_ptr->hash_base, buffer, buffer_size); @@ -880,9 +873,10 @@ int unpack_slurm_ctl_conf ( slurm_ctl_conf_info_msg_t **build_buffer_ptr, void * unpack16 (&build_ptr->kill_wait, buffer, buffer_size); unpackstr_xmalloc (&build_ptr->prioritize, &uint16_tmp, buffer, buffer_size); unpackstr_xmalloc (&build_ptr->prolog, &uint16_tmp, buffer, buffer_size); - unpackstr_xmalloc (&build_ptr->server_daemon, &uint16_tmp, buffer, buffer_size); - unpack16 (&build_ptr->server_timeout, buffer, buffer_size); + unpack16 (&build_ptr->slurmctld_timeout, buffer, buffer_size); + unpack16 (&build_ptr->slurmd_timeout, buffer, buffer_size); unpackstr_xmalloc (&build_ptr->slurm_conf, &uint16_tmp, buffer, buffer_size); + unpackstr_xmalloc (&build_ptr->state_save_location, &uint16_tmp, buffer, buffer_size); unpackstr_xmalloc (&build_ptr->tmp_fs, &uint16_tmp, buffer, buffer_size); *build_buffer_ptr = build_ptr ; return 0 ; diff --git a/src/scontrol/scontrol.c b/src/scontrol/scontrol.c index 2b1740e7548ff8c8762394eb05827a507c1eacb7..cb6c2d6550590f54cfaa3f7a1173bbce5722c29f 100644 --- a/src/scontrol/scontrol.c +++ b/src/scontrol/scontrol.c @@ -252,68 +252,7 @@ print_config (char *config_param) } old_slurm_ctl_conf_ptr = slurm_ctl_conf_ptr; - if (config_param == NULL || - strcmp_i (config_param, "BACKUP_INTERVAL") == 0) - printf ("BACKUP_INTERVAL = %u\n", - slurm_ctl_conf_ptr->backup_interval); - if (config_param == NULL || - strcmp_i (config_param, "BACKUP_LOCATION") == 0) - printf ("BACKUP_LOCATION = %s\n", - slurm_ctl_conf_ptr->backup_location); - if (config_param == NULL || - strcmp_i (config_param, "BACKUP_MACHINE") == 0) - printf ("BACKUP_MACHINE = %s\n", - slurm_ctl_conf_ptr->backup_machine); - if (config_param == NULL || - strcmp_i (config_param, "CONTROL_DAEMON") == 0) - printf ("CONTROL_DAEMON = %s\n", - slurm_ctl_conf_ptr->control_daemon); - if (config_param == NULL || - strcmp_i (config_param, "CONTROL_MACHINE") == 0) - printf ("CONTROL_MACHINE = %s\n", - slurm_ctl_conf_ptr->control_machine); - if (config_param == NULL || - strcmp_i (config_param, "CONTROLLER_TIMEOUT") == 0) - printf ("CONTROLLER_TIMEOUT = %u\n", - slurm_ctl_conf_ptr->controller_timeout); - if (config_param == NULL || - strcmp_i (config_param, "EPILOG") == 0) - printf ("EPILOG = %s\n", slurm_ctl_conf_ptr->epilog); - if (config_param == NULL || - strcmp_i (config_param, "FAST_SCHEDULE") == 0) - printf ("FAST_SCHEDULE = %u\n", - slurm_ctl_conf_ptr->fast_schedule); - if (config_param == NULL || - strcmp_i (config_param, "HASH_BASE") == 0) - printf ("HASH_BASE = %u\n", - slurm_ctl_conf_ptr->hash_base); - if (config_param == NULL || - strcmp_i (config_param, "HEARTBEAT_INTERVAL") == 0) - printf ("HEARTBEAT_INTERVAL = %u\n", - slurm_ctl_conf_ptr->heartbeat_interval); - if (config_param == NULL || - strcmp_i (config_param, "KILL_WAIT") == 0) - printf ("KILL_WAIT = %u\n", slurm_ctl_conf_ptr->kill_wait); - if (config_param == NULL || - strcmp_i (config_param, "PRIORITIZE") == 0) - printf ("PRIORITIZE = %s\n", slurm_ctl_conf_ptr->prioritize); - if (config_param == NULL || - strcmp_i (config_param, "PROLOG") == 0) - printf ("PROLOG = %s\n", slurm_ctl_conf_ptr->prolog); - if (config_param == NULL || - strcmp_i (config_param, "SERVER_DAEMON") == 0) - printf ("SERVER_DAEMON = %s\n", - slurm_ctl_conf_ptr->server_daemon); - if (config_param == NULL || - strcmp_i (config_param, "SERVER_TIMEOUT") == 0) - printf ("SERVER_TIMEOUT = %u\n", - slurm_ctl_conf_ptr->server_timeout); - if (config_param == NULL || - strcmp_i (config_param, "SLURM_CONF") == 0) - printf ("SLURM_CONF = %s\n", slurm_ctl_conf_ptr->slurm_conf); - if (config_param == NULL || - strcmp_i (config_param, "TMP_FS") == 0) - printf ("TMP_FS = %s\n", slurm_ctl_conf_ptr->tmp_fs); + slurm_print_ctl_conf (stdout, slurm_ctl_conf_ptr) ; }