From 6f1596b17e2e68402850a61b89f7d9426dca05b8 Mon Sep 17 00:00:00 2001 From: Morris Jette <jette@schedmd.com> Date: Thu, 1 Jun 2017 11:28:56 -0600 Subject: [PATCH] Wrap up salloc env vars for pack jobs --- doc/html/heterogeneous_jobs.shtml | 4 +-- slurm/slurm.h.in | 2 ++ src/common/env.c | 35 +++++++++++++++++++++++++- src/salloc/salloc.c | 42 ++++--------------------------- 4 files changed, 43 insertions(+), 40 deletions(-) diff --git a/doc/html/heterogeneous_jobs.shtml b/doc/html/heterogeneous_jobs.shtml index 760145d147d..538888c4811 100644 --- a/doc/html/heterogeneous_jobs.shtml +++ b/doc/html/heterogeneous_jobs.shtml @@ -127,8 +127,8 @@ salloc: job 11741 has been allocated resources $ env | grep SLURM SLURM_JOB_ID=11741 SLURM_PACK_SIZE=2 -SLURM_JOBID_PACK_GROUP_0=11741 -SLURM_JOBID_PACK_GROUP_1=11742 +SLURM_JOB_ID_PACK_GROUP_0=11741 +SLURM_JOB_ID_PACK_GROUP_1=11742 SLURM_NNODES_PACK_GROUP_0=1 SLURM_NNODES_PACK_GROUP_1=2 SLURM_JOB_NODELIST_PACK_GROUP_0=nid00001 diff --git a/slurm/slurm.h.in b/slurm/slurm.h.in index dd6a40c8e89..a8bdbab9e13 100644 --- a/slurm/slurm.h.in +++ b/slurm/slurm.h.in @@ -1029,6 +1029,8 @@ enum ctx_keys { * end of a job. */ #define SIB_JOB_FLUSH 0x00001000 /* Don't send complete to origin */ #define JOB_PACK_FLAG 0x00002000 /* Heterogeneous job management flag */ +#define JOB_NTASKS_SET 0x00004000 /* --ntasks explicitly set */ +#define JOB_CPUS_SET 0x00008000 /* --cpus-per-tasks explicitly set */ /*****************************************************************************\ * SLURM HOSTLIST FUNCTIONS diff --git a/src/common/env.c b/src/common/env.c index 0333af0bda2..cdddccfa136 100644 --- a/src/common/env.c +++ b/src/common/env.c @@ -1127,12 +1127,45 @@ extern int env_array_for_job(char ***dest, if (value) { value[0] = '\0'; value++; - env_array_overwrite(dest, key, value); + env_array_overwrite_pack_fmt(dest, key, + pack_offset, "%s", + value); } xfree(tmp); } } + if (desc->acctg_freq) { + env_array_overwrite_pack_fmt(dest, "SLURM_ACCTG_FREQ", + pack_offset, "%s", + desc->acctg_freq); + }; + + if (desc->network) { + env_array_overwrite_pack_fmt(dest, "SLURM_NETWORK", + pack_offset, "%s", desc->network); + } + + if (desc->overcommit != NO_VAL8) { + env_array_overwrite_pack_fmt(dest, "SLURM_OVERCOMMIT", + pack_offset, "%u", + desc->overcommit); + } + + /* Add default task counst for srun, if not already set */ + if (desc->bitflags & JOB_NTASKS_SET) { + env_array_overwrite_pack_fmt(dest, "SLURM_NTASKS", pack_offset, + "%d", desc->num_tasks); + /* maintain for old scripts */ + env_array_overwrite_pack_fmt(dest, "SLURM_NPROCS", pack_offset, + "%d", desc->num_tasks); + } + if (desc->bitflags & JOB_NTASKS_SET) { + env_array_overwrite_pack_fmt(dest, "SLURM_CPUS_PER_TASK", + pack_offset, "%d", + desc->cpus_per_task); + } + return rc; } diff --git a/src/salloc/salloc.c b/src/salloc/salloc.c index 811f2d35458..98f59abd96f 100644 --- a/src/salloc/salloc.c +++ b/src/salloc/salloc.c @@ -490,33 +490,11 @@ int main(int argc, char **argv) } list_iterator_destroy(iter_resp); list_iterator_destroy(iter_req); -//FIXME: work through additional logic, including free of alloc } else { if (env_array_for_job(&env, alloc, desc, -1) != SLURM_SUCCESS) goto relinquish; } - /* Add default task count for srun, if not already set */ - if (opt.ntasks_set) { - env_array_append_fmt(&env, "SLURM_NTASKS", "%d", opt.ntasks); - /* keep around for old scripts */ - env_array_append_fmt(&env, "SLURM_NPROCS", "%d", opt.ntasks); - } - if (opt.cpus_set) { - env_array_append_fmt(&env, "SLURM_CPUS_PER_TASK", "%d", - opt.cpus_per_task); - } - if (opt.overcommit) { - env_array_append_fmt(&env, "SLURM_OVERCOMMIT", "%d", - opt.overcommit); - } - if (opt.acctg_freq) { - env_array_append_fmt(&env, "SLURM_ACCTG_FREQ", "%s", - opt.acctg_freq); - } - if (opt.network) - env_array_append_fmt(&env, "SLURM_NETWORK", "%s", opt.network); - if (working_cluster_rec && working_cluster_rec->name) { env_array_append_fmt(&env, "SLURM_CLUSTER_NAME", "%s", working_cluster_rec->name); @@ -525,20 +503,6 @@ int main(int argc, char **argv) cluster_name); xfree(cluster_name); } - if (alloc->env_size) { /* Used to set Burst Buffer environment */ - char *key, *value, *tmp; - for (i = 0; i < alloc->env_size; i++) { - tmp = xstrdup(alloc->environment[i]); - key = tmp; - value = strchr(tmp, '='); - if (value) { - value[0] = '\0'; - value++; - env_array_append(&env, key, value); - } - xfree(tmp); - } - } env_array_set_environment(env); env_array_free(env); @@ -843,7 +807,7 @@ static int _fill_job_desc_from_opts(job_desc_msg_t *desc) if (opt.licenses) desc->licenses = xstrdup(opt.licenses); - desc->network = opt.network; + desc->network = xstrdup(opt.network); if (opt.nice != NO_VAL) desc->nice = NICE_OFFSET + opt.nice; if (opt.priority) @@ -958,6 +922,10 @@ static int _fill_job_desc_from_opts(job_desc_msg_t *desc) desc->mcs_label = xstrdup(opt.mcs_label); if (opt.delay_boot != NO_VAL) desc->delay_boot = opt.delay_boot; + if (opt.cpus_set) + desc->bitflags |= JOB_CPUS_SET; + if (opt.ntasks_set) + desc->bitflags |= JOB_NTASKS_SET; return 0; } -- GitLab