From e8c2bfc5e0c1b102365c9f66eb41bc77ef227d28 Mon Sep 17 00:00:00 2001
From: Danny Auble <da@schedmd.com>
Date: Fri, 10 Feb 2017 13:42:06 -0700
Subject: [PATCH] Make it so tmpdir processes %n and %h correctly.

This is needed to make it so we can run pmix with multi-slurmd.
---
 src/common/slurm_protocol_api.c   | 8 ++++++--
 src/common/slurm_protocol_api.h   | 2 +-
 src/plugins/mpi/pmix/pmixp_info.c | 3 ++-
 3 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/src/common/slurm_protocol_api.c b/src/common/slurm_protocol_api.c
index 9312b173079..c1a93bb350c 100644
--- a/src/common/slurm_protocol_api.c
+++ b/src/common/slurm_protocol_api.c
@@ -988,7 +988,7 @@ char *slurm_get_state_save_location(void)
  * returns the TmpFS configuration parameter from slurmctld_conf object
  * RET char *    - tmp_fs, MUST be xfreed by caller
  */
-extern char *slurm_get_tmp_fs(void)
+extern char *slurm_get_tmp_fs(char *node_name)
 {
 	char *tmp_fs = NULL;
 	slurm_ctl_conf_t *conf = NULL;
@@ -996,7 +996,11 @@ extern char *slurm_get_tmp_fs(void)
 	if (slurmdbd_conf) {
 	} else {
 		conf = slurm_conf_lock();
-		tmp_fs = xstrdup(conf->tmp_fs);
+		if (!node_name)
+			tmp_fs = xstrdup(conf->tmp_fs);
+		else
+			tmp_fs = slurm_conf_expand_slurmd_path(
+				conf->tmp_fs, node_name);
 		slurm_conf_unlock();
 	}
 	return tmp_fs;
diff --git a/src/common/slurm_protocol_api.h b/src/common/slurm_protocol_api.h
index cafa4775554..93948cc2151 100644
--- a/src/common/slurm_protocol_api.h
+++ b/src/common/slurm_protocol_api.h
@@ -408,7 +408,7 @@ char *slurm_get_state_save_location(void);
  * returns the TmpFS configuration parameter from slurmctld_conf object
  * RET char *    - tmp_fs, MUST be xfreed by caller
  */
-extern char *slurm_get_tmp_fs(void);
+extern char *slurm_get_tmp_fs(char *node_name);
 
 /* slurm_get_auth_type
  * returns the authentication type from slurmctld_conf object
diff --git a/src/plugins/mpi/pmix/pmixp_info.c b/src/plugins/mpi/pmix/pmixp_info.c
index a23a2b183cc..f17290b9cba 100644
--- a/src/plugins/mpi/pmix/pmixp_info.c
+++ b/src/plugins/mpi/pmix/pmixp_info.c
@@ -305,7 +305,8 @@ static int _env_set(char ***env)
 	if (p)
 		_pmixp_job_info.cli_tmpdir_base = xstrdup(p);
 	else
-		_pmixp_job_info.cli_tmpdir_base = slurm_get_tmp_fs();
+		_pmixp_job_info.cli_tmpdir_base = slurm_get_tmp_fs(
+			_pmixp_job_info.hostname);
 
 	_pmixp_job_info.cli_tmpdir =
 		xstrdup_printf("%s/spmix_appdir_%d.%d",
-- 
GitLab