From bde3ab3433b16a015cc6e12169882b2ef98525ef Mon Sep 17 00:00:00 2001 From: Nicholas Chaimov Date: Tue, 10 Mar 2026 15:51:27 -0700 Subject: [PATCH] Fix SPINDLE_DEBUG + SPINDLE_TEST in SPANK plugin --- src/slurm_plugin/slurm_plugin.c | 34 ++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/src/slurm_plugin/slurm_plugin.c b/src/slurm_plugin/slurm_plugin.c index 5401b337..365e2b27 100644 --- a/src/slurm_plugin/slurm_plugin.c +++ b/src/slurm_plugin/slurm_plugin.c @@ -53,6 +53,7 @@ static int set_spindle_args(spank_t spank, spindle_args_t *params, int argc, cha static int get_spindle_args(spank_t spank, spindle_args_t *params); #endif +static int forward_environment_to_slurmstepd(spank_t spank); static int launchFE(char **hostlist, spindle_args_t *params); static int launchBE(spank_t spank, spindle_args_t *params); static int prepApp(spank_t spank, spindle_args_t *params); @@ -80,6 +81,32 @@ struct spank_option spank_options[] = SPANK_OPTIONS_TABLE_END }; +static int forward_environment_to_slurmstepd(spank_t spank) +{ + char *debugEnv, *testEnv, *tmpEnv; + + debugEnv= readSpankEnv(spank, "SPINDLE_DEBUG"); + testEnv = readSpankEnv(spank, "SPINDLE_TEST"); + tmpEnv = readSpankEnv(spank, "TMPDIR"); + + if (debugEnv) { + setenv("SPINDLE_DEBUG", debugEnv, 1); + free(debugEnv); + } + + if (testEnv) { + setenv("SPINDLE_TEST", testEnv, 1); + free(testEnv); + } + + if (tmpEnv) { + setenv("TMPDIR", tmpEnv, 1); + free(tmpEnv); + } + + return 0; +} + int slurm_spank_task_init(spank_t spank, int site_argc, char *site_argv[]) { spank_context_t context; @@ -107,8 +134,13 @@ int slurm_spank_task_init(spank_t spank, int site_argc, char *site_argv[]) return 0; } - push_env(spank, &env); + // We need to acquire the job environment before we do anything that + // will spawn the log daemon so that SPINDLE_DEBUG and SPINDLE_TEST + // are set appropriately. + forward_environment_to_slurmstepd(spank); + sdprintf(1, "Beginning spindle plugin\n"); + push_env(spank, &env); result = process_spindle_args(spank, site_argc, site_argv, ¶ms, NULL, NULL); if (result == -1) {