From 7db90c8a28da736d0ed6ec64d70ea9d28f949ec8 Mon Sep 17 00:00:00 2001 From: Danny Auble <da@schedmd.com> Date: Wed, 8 Feb 2017 17:52:41 -0700 Subject: [PATCH] PMIX - Make it possible to use %n or %h in a spool dir. --- src/common/slurm_protocol_api.c | 8 ++++++-- src/common/slurm_protocol_api.h | 2 +- src/plugins/mpi/pmi2/setup.c | 9 +++++++-- src/plugins/mpi/pmix/pmixp_info.c | 23 ++++++++++++----------- src/plugins/mpi/pmix/pmixp_info.h | 9 ++++----- 5 files changed, 30 insertions(+), 21 deletions(-) diff --git a/src/common/slurm_protocol_api.c b/src/common/slurm_protocol_api.c index fc03e6fd201..9312b173079 100644 --- a/src/common/slurm_protocol_api.c +++ b/src/common/slurm_protocol_api.c @@ -2751,7 +2751,7 @@ char *slurm_get_job_container_plugin(void) /* slurm_get_slurmd_spooldir * RET slurmd_spooldir name, must be xfreed by caller */ -char *slurm_get_slurmd_spooldir(void) +char *slurm_get_slurmd_spooldir(char *node_name) { char *slurmd_spooldir = NULL; slurm_ctl_conf_t *conf; @@ -2759,7 +2759,11 @@ char *slurm_get_slurmd_spooldir(void) if (slurmdbd_conf) { } else { conf = slurm_conf_lock(); - slurmd_spooldir = xstrdup(conf->slurmd_spooldir); + if (!node_name) + slurmd_spooldir = xstrdup(conf->slurmd_spooldir); + else + slurmd_spooldir = slurm_conf_expand_slurmd_path( + conf->slurmd_spooldir, node_name); slurm_conf_unlock(); } return slurmd_spooldir; diff --git a/src/common/slurm_protocol_api.h b/src/common/slurm_protocol_api.h index 21419409d07..cafa4775554 100644 --- a/src/common/slurm_protocol_api.h +++ b/src/common/slurm_protocol_api.h @@ -895,7 +895,7 @@ char *slurm_get_job_container_plugin(void); /* slurm_get_slurmd_spooldir * RET slurmd_spooldir name, must be xfreed by caller */ -char *slurm_get_slurmd_spooldir(void); +char *slurm_get_slurmd_spooldir(char *node_name); /* slurm_get_layouts * RET comma seperated list of layouts in a string, must be xfreed by caller diff --git a/src/plugins/mpi/pmi2/setup.c b/src/plugins/mpi/pmi2/setup.c index ab9f6f5b3ac..56dfaf6fbee 100644 --- a/src/plugins/mpi/pmi2/setup.c +++ b/src/plugins/mpi/pmi2/setup.c @@ -276,7 +276,10 @@ _setup_stepd_sockets(const stepd_step_rec_t *job, char ***env) } sa.sun_family = PF_UNIX; - spool = slurm_get_slurmd_spooldir(); + /* FIXME: We need to handle %n and %h in the spool dir, we have + * job->node_name, but the other place we call get_slurmd_spooldir + * we don't so we aren't using it here */ + spool = slurm_get_slurmd_spooldir(NULL); snprintf(sa.sun_path, sizeof(sa.sun_path), PMI2_SOCK_ADDR_FMT, spool, job->jobid, job->stepid); unlink(sa.sun_path); /* remove possible old socket */ @@ -632,7 +635,9 @@ _setup_srun_tree_info(const mpi_plugin_client_info_t *job) } else tree_info.srun_addr = NULL; - spool = slurm_get_slurmd_spooldir(); + /* FIXME: We need to handle %n and %h in the spool dir, but don't have + * the node name here */ + spool = slurm_get_slurmd_spooldir(NULL); snprintf(tree_sock_addr, 128, PMI2_SOCK_ADDR_FMT, spool, job->jobid, job->stepid); xfree(spool); diff --git a/src/plugins/mpi/pmix/pmixp_info.c b/src/plugins/mpi/pmix/pmixp_info.c index ed81578ef99..a23a2b183cc 100644 --- a/src/plugins/mpi/pmix/pmixp_info.c +++ b/src/plugins/mpi/pmix/pmixp_info.c @@ -286,26 +286,27 @@ err_exit: static int _env_set(char ***env) { char *p = NULL; - char *spool = slurm_get_slurmd_spooldir(); + + xassert(_pmixp_job_info.hostname); + + _pmixp_job_info.lib_tmpdir = slurm_get_slurmd_spooldir( + _pmixp_job_info.hostname); /* ----------- Temp directories settings ------------- */ - _pmixp_job_info.lib_tmpdir = xstrdup_printf("%s/pmix.%d.%d/", spool, - pmixp_info_jobid(), pmixp_info_stepid()); - xfree(spool); + xstrfmtcat(_pmixp_job_info.lib_tmpdir, "/pmix.%d.%d/", + pmixp_info_jobid(), pmixp_info_stepid()); /* save client temp directory if requested * TODO: We want to get TmpFS value as well if exists. * Need to sync with SLURM developers. */ p = getenvp(*env, PMIXP_TMPDIR_CLI); - if (NULL != p) { + + if (p) _pmixp_job_info.cli_tmpdir_base = xstrdup(p); - } else { - p = slurm_get_tmp_fs(); - if (NULL != p) { - _pmixp_job_info.cli_tmpdir_base = p; - } - } + else + _pmixp_job_info.cli_tmpdir_base = slurm_get_tmp_fs(); + _pmixp_job_info.cli_tmpdir = xstrdup_printf("%s/spmix_appdir_%d.%d", _pmixp_job_info.cli_tmpdir_base, diff --git a/src/plugins/mpi/pmix/pmixp_info.h b/src/plugins/mpi/pmix/pmixp_info.h index 5fe7620adda..280a0ec11c9 100644 --- a/src/plugins/mpi/pmix/pmixp_info.h +++ b/src/plugins/mpi/pmix/pmixp_info.h @@ -272,12 +272,11 @@ static inline char *pmixp_info_job_host(int nodeid) /* namespaces list operations */ static inline char *pmixp_info_nspace_usock(const char *nspace) { - char *spool, *usock = NULL; + char *spool; debug("mpi/pmix: setup sockets"); - spool = slurm_get_slurmd_spooldir(); - xstrfmtcat(usock, "%s/stepd.%s", spool, nspace); - xfree(spool); - return usock; + spool = slurm_get_slurmd_spooldir(_pmixp_job_info.hostname); + xstrfmtcat(spool, "/stepd.%s", nspace); + return spool; } #endif /* PMIXP_INFO_H */ -- GitLab