diff --git a/NEWS b/NEWS index 24e44c7b9f856d50607fbda089546e3004ec71d5..7103445631c5759a723f130e5850f2a9bffe34b8 100644 --- a/NEWS +++ b/NEWS @@ -67,9 +67,11 @@ documents those changes that are of interest to users and admins. is greater than 1 and select/cons_res is used. -- Fix scontrol show config for accounting information when values are not set in the slurm.conf. --- Added a set of SBATCH_CPU_BIND* and SBATCH_MEM_BIND* env variables to keep + -- Added a set of SBATCH_CPU_BIND* and SBATCH_MEM_BIND* env variables to keep jobsteps launched from within a batch script from inheriting the CPU and memory affinity that was applied to the batch script. + -- Ignore the extra processors on a node above configured size if either + sched/gang or select/cons_res is configured. * Changes in SLURM 2.0.1 ======================== diff --git a/src/api/config_info.c b/src/api/config_info.c index 143241e8f397a1742ae9d87cf66a6e67b5076527..c645df051f14f3b72876d538481bfdcf366d6648 100644 --- a/src/api/config_info.c +++ b/src/api/config_info.c @@ -152,6 +152,8 @@ void slurm_print_ctl_conf ( FILE* out, slurm_ctl_conf_ptr->accounting_storage_host); fprintf(out, "AccountingStorageLoc = %s\n", slurm_ctl_conf_ptr->accounting_storage_loc); + fprintf(out, "AccountingStoragePass = %s\n", + slurm_ctl_conf_ptr->accounting_storage_pass); fprintf(out, "AccountingStoragePort = %u\n", slurm_ctl_conf_ptr->accounting_storage_port); fprintf(out, "AccountingStorageType = %s\n", @@ -239,6 +241,8 @@ void slurm_print_ctl_conf ( FILE* out, slurm_ctl_conf_ptr->job_comp_host); fprintf(out, "JobCompLoc = %s\n", slurm_ctl_conf_ptr->job_comp_loc); + fprintf(out, "JobCompPass = %s\n", + slurm_ctl_conf_ptr->job_comp_pass); fprintf(out, "JobCompPort = %u\n", slurm_ctl_conf_ptr->job_comp_port); fprintf(out, "JobCompType = %s\n", diff --git a/src/common/read_config.c b/src/common/read_config.c index 574b5b4f518b749a1f23dd94ad8bfc4bcf06a383..e6ba2eb5aea57ce87aed2bfdbfb818912df43b1a 100644 --- a/src/common/read_config.c +++ b/src/common/read_config.c @@ -1872,6 +1872,9 @@ validate_and_set_defaults(slurm_ctl_conf_t *conf, s_p_hashtbl_t *hashtbl) if (!s_p_get_string(&conf->job_comp_loc, "JobCompLoc", hashtbl)) { if(default_storage_loc) conf->job_comp_loc = xstrdup(default_storage_loc); + else if(!strcmp(conf->job_comp_type, "job_comp/mysql") + || !strcmp(conf->job_comp_type, "job_comp/pgsql")) + conf->job_comp_loc = xstrdup(DEFAULT_JOB_COMP_DB); else conf->job_comp_loc = xstrdup(DEFAULT_JOB_COMP_LOC); } @@ -2030,9 +2033,6 @@ validate_and_set_defaults(slurm_ctl_conf_t *conf, s_p_hashtbl_t *hashtbl) if(default_storage_loc) conf->accounting_storage_loc = xstrdup(default_storage_loc); - else - conf->accounting_storage_loc = - xstrdup(DEFAULT_STORAGE_LOC); } if (!s_p_get_string(&conf->accounting_storage_user, "AccountingStorageUser", hashtbl)) { @@ -2070,13 +2070,22 @@ validate_and_set_defaults(slurm_ctl_conf_t *conf, s_p_hashtbl_t *hashtbl) "accounting_storage/mysql")) { if(conf->accounting_storage_port == NO_VAL) conf->accounting_storage_port = 3306; + if(!conf->accounting_storage_loc) + conf->accounting_storage_loc = + xstrdup(DEFAULT_ACCOUNTING_DB); } else if(!strcmp(conf->accounting_storage_type, "accounting_storage/pgsql")) { if(conf->accounting_storage_port == NO_VAL) conf->accounting_storage_port = 5432; + if(!conf->accounting_storage_loc) + conf->accounting_storage_loc = + xstrdup(DEFAULT_ACCOUNTING_DB); } else { if(conf->accounting_storage_port == NO_VAL) conf->accounting_storage_port = DEFAULT_STORAGE_PORT; + if(!conf->accounting_storage_loc) + conf->accounting_storage_loc = + xstrdup(DEFAULT_STORAGE_LOC); } s_p_get_uint16(&conf->over_time_limit, "OverTimeLimit", hashtbl); diff --git a/src/common/read_config.h b/src/common/read_config.h index f5f740a70a6702832f380fb766f7ec1a231c031a..ce0973684c5b605deadfa47568f8f7854df0b60c 100644 --- a/src/common/read_config.h +++ b/src/common/read_config.h @@ -55,6 +55,7 @@ extern char *default_plugstack; #define ACCOUNTING_ENFORCE_LIMITS 0x0002 #define ACCOUNTING_ENFORCE_WCKEYS 0x0004 +#define DEFAULT_ACCOUNTING_DB "slurm_acct_db" #define DEFAULT_ACCOUNTING_ENFORCE 0 #define DEFAULT_ACCOUNTING_STORAGE_TYPE "accounting_storage/none" #define DEFAULT_AUTH_TYPE "auth/munge" @@ -77,6 +78,7 @@ extern char *default_plugstack; #define DEFAULT_JOB_CKPT_DIR "/var/slurm/checkpoint" #define DEFAULT_JOB_COMP_TYPE "jobcomp/none" #define DEFAULT_JOB_COMP_LOC "/var/log/slurm_jobcomp.log" +#define DEFAULT_JOB_COMP_DB "slurm_jobcomp_db" #define DEFAULT_KILL_ON_BAD_EXIT 0 #define DEFAULT_KILL_TREE 0 #define DEFAULT_KILL_WAIT 30 diff --git a/src/plugins/accounting_storage/mysql/accounting_storage_mysql.c b/src/plugins/accounting_storage/mysql/accounting_storage_mysql.c index 9a2986ca3b174e0176a8889e1333119272e6ce12..5f2be55ddf1b84bb55b0c228ed628c9781110c91 100644 --- a/src/plugins/accounting_storage/mysql/accounting_storage_mysql.c +++ b/src/plugins/accounting_storage/mysql/accounting_storage_mysql.c @@ -93,11 +93,8 @@ static char *mysql_db_name = NULL; static time_t global_last_rollup = 0; static pthread_mutex_t rollup_lock = PTHREAD_MUTEX_INITIALIZER; -#define DEFAULT_ACCT_DB "slurm_acct_db" #define DELETE_SEC_BACK 86400 - - char *acct_coord_table = "acct_coord_table"; char *acct_table = "acct_table"; char *assoc_day_table = "assoc_day_usage_table"; @@ -3400,20 +3397,20 @@ extern int init ( void ) location = slurm_get_accounting_storage_loc(); if(!location) - mysql_db_name = xstrdup(DEFAULT_ACCT_DB); + mysql_db_name = xstrdup(DEFAULT_ACCOUNTING_DB); else { int i = 0; while(location[i]) { if(location[i] == '.' || location[i] == '/') { debug("%s doesn't look like a database " "name using %s", - location, DEFAULT_ACCT_DB); + location, DEFAULT_ACCOUNTING_DB); break; } i++; } if(location[i]) { - mysql_db_name = xstrdup(DEFAULT_ACCT_DB); + mysql_db_name = xstrdup(DEFAULT_ACCOUNTING_DB); xfree(location); } else mysql_db_name = location; diff --git a/src/plugins/accounting_storage/pgsql/accounting_storage_pgsql.c b/src/plugins/accounting_storage/pgsql/accounting_storage_pgsql.c index 34d27b4b2f276b6b6a54de46a75279e940bc9c8a..3b6b3659c616a569ff2d3e60bed28546a3c98441 100644 --- a/src/plugins/accounting_storage/pgsql/accounting_storage_pgsql.c +++ b/src/plugins/accounting_storage/pgsql/accounting_storage_pgsql.c @@ -77,7 +77,6 @@ const uint32_t plugin_version = 100; #ifndef HAVE_PGSQL typedef void PGconn; #else -#define DEFAULT_ACCT_DB "slurm_acct_db" static pgsql_db_info_t *pgsql_db_info = NULL; static char *pgsql_db_name = NULL; @@ -732,20 +731,20 @@ extern int init ( void ) location = slurm_get_accounting_storage_loc(); if(!location) - pgsql_db_name = xstrdup(DEFAULT_ACCT_DB); + pgsql_db_name = xstrdup(DEFAULT_ACCOUNTING_DB); else { int i = 0; while(location[i]) { if(location[i] == '.' || location[i] == '/') { debug("%s doesn't look like a database " "name using %s", - location, DEFAULT_ACCT_DB); + location, DEFAULT_ACCOUNTING_DB); break; } i++; } if(location[i]) { - pgsql_db_name = xstrdup(DEFAULT_ACCT_DB); + pgsql_db_name = xstrdup(DEFAULT_ACCOUNTING_DB); xfree(location); } else pgsql_db_name = location; diff --git a/src/plugins/jobcomp/mysql/jobcomp_mysql.c b/src/plugins/jobcomp/mysql/jobcomp_mysql.c index 09990470f7f9006981ca91c6af1c6814f2463183..8e3182c83c7a4728b12143fd7b84062ccbb1c522 100644 --- a/src/plugins/jobcomp/mysql/jobcomp_mysql.c +++ b/src/plugins/jobcomp/mysql/jobcomp_mysql.c @@ -79,7 +79,6 @@ const char plugin_name[] = "Job completion MYSQL plugin"; const char plugin_type[] = "jobcomp/mysql"; const uint32_t plugin_version = 100; -#define DEFAULT_JOBCOMP_DB "slurm_jobcomp_db" MYSQL *jobcomp_mysql_db = NULL; @@ -250,19 +249,19 @@ extern int slurm_jobcomp_set_location(char *location) return SLURM_SUCCESS; if(!location) - db_name = DEFAULT_JOBCOMP_DB; + db_name = DEFAULT_JOB_COMP_DB; else { while(location[i]) { if(location[i] == '.' || location[i] == '/') { debug("%s doesn't look like a database " "name using %s", - location, DEFAULT_JOBCOMP_DB); + location, DEFAULT_JOB_COMP_DB); break; } i++; } if(location[i]) - db_name = DEFAULT_JOBCOMP_DB; + db_name = DEFAULT_JOB_COMP_DB; else db_name = location; } diff --git a/src/plugins/jobcomp/pgsql/jobcomp_pgsql.c b/src/plugins/jobcomp/pgsql/jobcomp_pgsql.c index b8cafeade3308087a9d194e7ba325404369dffa4..56df166c3b2858faac1243bd896c62d0b14beaed 100644 --- a/src/plugins/jobcomp/pgsql/jobcomp_pgsql.c +++ b/src/plugins/jobcomp/pgsql/jobcomp_pgsql.c @@ -79,8 +79,6 @@ const char plugin_name[] = "Job completion POSTGRESQL plugin"; const char plugin_type[] = "jobcomp/pgsql"; const uint32_t plugin_version = 100; -#define DEFAULT_JOBCOMP_DB "slurm_jobcomp_db" - PGconn *jobcomp_pgsql_db = NULL; char *jobcomp_table = "jobcomp_table"; @@ -273,19 +271,19 @@ extern int slurm_jobcomp_set_location(char *location) return SLURM_SUCCESS; if(!location) - db_name = DEFAULT_JOBCOMP_DB; + db_name = DEFAULT_JOB_COMP_DB; else { while(location[i]) { if(location[i] == '.' || location[i] == '/') { debug("%s doesn't look like a database " "name using %s", - location, DEFAULT_JOBCOMP_DB); + location, DEFAULT_JOB_COMP_DB); break; } i++; } if(location[i]) - db_name = DEFAULT_JOBCOMP_DB; + db_name = DEFAULT_JOB_COMP_DB; else db_name = location; } diff --git a/src/slurmctld/job_mgr.c b/src/slurmctld/job_mgr.c index b287816d2db5a728e00afa1b03d0e3c1e28f678f..89139ef9d3a1363ff4601e289c06b82b8efe97fa 100644 --- a/src/slurmctld/job_mgr.c +++ b/src/slurmctld/job_mgr.c @@ -2329,7 +2329,7 @@ static int _job_create(job_desc_msg_t * job_desc, int allocate, int will_run, if ((job_desc->time_limit == NO_VAL) && (part_ptr->default_time != NO_VAL)) - job_desc->time_limit = part_ptr->default_time; + job_desc->time_limit = part_ptr->default_time; if ((job_desc->time_limit != NO_VAL) && (job_desc->time_limit > part_ptr->max_time) && diff --git a/src/slurmctld/node_mgr.c b/src/slurmctld/node_mgr.c index 262a2c21f3cc67da30fcdd7a59efe562bbf67953..386d5948cfc04865a8f9bc84d16dcd4174f074f7 100644 --- a/src/slurmctld/node_mgr.c +++ b/src/slurmctld/node_mgr.c @@ -1642,22 +1642,25 @@ extern int validate_node_specs(slurm_node_registration_status_msg_t *reg_msg) } if (slurmctld_conf.fast_schedule != 2) { - int tot1, tot2; - tot1 = reg_msg->sockets * reg_msg->cores * reg_msg->threads; - tot2 = config_ptr->sockets * config_ptr->cores * - config_ptr->threads; - if (tot1 < tot2) { + int cores1, cores2; /* total cores on node */ + int threads1, threads2; /* total threads on node */ + cores1 = reg_msg->sockets * reg_msg->cores; + threads1 = cores1 * reg_msg->threads; + cores2 = config_ptr->sockets * config_ptr->cores; + threads2 = cores2 * config_ptr->threads; + if ((cores1 < cores2) || (threads1 < threads2)) { error("Node %s has low socket*core*thread count %u", - reg_msg->node_name, tot1); + reg_msg->node_name, threads1); error_code = EINVAL; reason_down = "Low socket*core*thread count"; } else if ((slurmctld_conf.fast_schedule == 0) && ((cr_flag == 1) || (gang_flag == 1)) && - (tot1 > tot2)) { + ((cores1 > cores2) || (threads1 > threads2))) { error("Node %s has high socket*core*thread count %u, " "extra resources ignored", - reg_msg->node_name, tot1); + reg_msg->node_name, threads1); /* Preserve configured values */ + reg_msg->cpus = config_ptr->cpus; reg_msg->sockets = config_ptr->sockets; reg_msg->cores = config_ptr->cores; reg_msg->threads = config_ptr->threads; @@ -1668,15 +1671,24 @@ extern int validate_node_specs(slurm_node_registration_status_msg_t *reg_msg) node_ptr->threads = reg_msg->threads; #endif - if ((slurmctld_conf.fast_schedule != 2) - && (reg_msg->cpus < config_ptr->cpus)) { - error ("Node %s has low cpu count %u", - reg_msg->node_name, reg_msg->cpus); - error_code = EINVAL; - reason_down = "Low CPUs"; + if (slurmctld_conf.fast_schedule != 2) { + if (reg_msg->cpus < config_ptr->cpus) { + error ("Node %s has low cpu count %u", + reg_msg->node_name, reg_msg->cpus); + error_code = EINVAL; + reason_down = "Low CPUs"; + } else if ((slurmctld_conf.fast_schedule == 0) && + ((cr_flag == 1) || (gang_flag == 1)) && + (reg_msg->cpus > config_ptr->cpus)) { + error("Node %s has high CPU count %u, " + "extra resources ignored", + reg_msg->node_name, reg_msg->cpus); + reg_msg->cpus = config_ptr->cpus; + } } - if ((node_ptr->cpus != reg_msg->cpus) - && (slurmctld_conf.fast_schedule == 0)) { + + if ((node_ptr->cpus != reg_msg->cpus) && + (slurmctld_conf.fast_schedule == 0)) { for (i=0; i<node_ptr->part_cnt; i++) { node_ptr->part_pptr[i]->total_cpus += (reg_msg->cpus - node_ptr->cpus); @@ -1684,8 +1696,8 @@ extern int validate_node_specs(slurm_node_registration_status_msg_t *reg_msg) } node_ptr->cpus = reg_msg->cpus; - if ((slurmctld_conf.fast_schedule != 2) - && (reg_msg->real_memory < config_ptr->real_memory)) { + if ((slurmctld_conf.fast_schedule != 2) && + (reg_msg->real_memory < config_ptr->real_memory)) { error ("Node %s has low real_memory size %u", reg_msg->node_name, reg_msg->real_memory); error_code = EINVAL; @@ -1693,8 +1705,8 @@ extern int validate_node_specs(slurm_node_registration_status_msg_t *reg_msg) } node_ptr->real_memory = reg_msg->real_memory; - if ((slurmctld_conf.fast_schedule != 2) - && (reg_msg->tmp_disk < config_ptr->tmp_disk)) { + if ((slurmctld_conf.fast_schedule != 2) && + (reg_msg->tmp_disk < config_ptr->tmp_disk)) { error ("Node %s has low tmp_disk size %u", reg_msg->node_name, reg_msg->tmp_disk); error_code = EINVAL; diff --git a/src/slurmdbd/read_config.c b/src/slurmdbd/read_config.c index edac834022efbdf9783fb5245e5cc3695893b040..4e6c88d13503e428330b6ffff601632213e8d6a7 100644 --- a/src/slurmdbd/read_config.c +++ b/src/slurmdbd/read_config.c @@ -310,9 +310,28 @@ extern int read_slurmdbd_conf(void) slurmdbd_conf->slurm_user_name = xstrdup("root"); slurmdbd_conf->slurm_user_id = 0; } + if (slurmdbd_conf->storage_type == NULL) fatal("StorageType must be specified"); - + + if(!strcmp(slurmdbd_conf->storage_type, + "accounting_storage/mysql")) { + if(!slurmdbd_conf->storage_port) + slurmdbd_conf->storage_port = 3306; + if(!slurmdbd_conf->storage_loc) + slurmdbd_conf->storage_loc = + xstrdup(DEFAULT_ACCOUNTING_DB); + } else if(!strcmp(slurmdbd_conf->storage_type, + "accounting_storage/pgsql")) { + if(!slurmdbd_conf->storage_port) + slurmdbd_conf->storage_port = 5432; + if(!slurmdbd_conf->storage_loc) + slurmdbd_conf->storage_loc = + xstrdup(DEFAULT_ACCOUNTING_DB); + } else + if(!slurmdbd_conf->storage_port) + slurmdbd_conf->storage_port = DEFAULT_STORAGE_PORT; + if (slurmdbd_conf->archive_dir) { if(stat(slurmdbd_conf->archive_dir, &buf) < 0) fatal("Failed to stat the archive directory %s: %m",