From 09f96ac7d43c0de51af232117f45445fefd7bc7c Mon Sep 17 00:00:00 2001 From: Morris Jette <jette@schedmd.com> Date: Mon, 28 Apr 2014 13:19:00 -0700 Subject: [PATCH] Map "%A" in fname to job ID if not array If the job's stdout or stderr file name contain a "%A" (Job array ID) and it is not a job array, then treat like "%j" (job ID). --- src/api/job_info.c | 16 +++++++++++----- src/slurmd/slurmstepd/fname.c | 9 +++++++-- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/api/job_info.c b/src/api/job_info.c index dca7b0b79a8..8acd9ed16bc 100644 --- a/src/api/job_info.c +++ b/src/api/job_info.c @@ -75,28 +75,34 @@ static void _fname_format(char *buf, int buf_size, job_info_t * job_ptr, char *ptr, *tmp, *tmp2 = NULL, *user; tmp = xstrdup(fname); - while ((ptr = strstr(tmp, "%A"))) { + while ((ptr = strstr(tmp, "%A"))) { /* Array job ID */ ptr[0] = '\0'; - xstrfmtcat(tmp2, "%s%u%s", tmp, job_ptr->array_job_id, ptr+2); + if (job_ptr->array_task_id == (uint16_t) NO_VAL) { + /* Not a job array */ + xstrfmtcat(tmp2, "%s%u%s", tmp, job_ptr->job_id, ptr+2); + } else { + xstrfmtcat(tmp2, "%s%u%s", tmp, job_ptr->array_job_id, + ptr+2); + } xfree(tmp); /* transfer the results */ tmp = tmp2; tmp2 = NULL; } - while ((ptr = strstr(tmp, "%a"))) { + while ((ptr = strstr(tmp, "%a"))) { /* Array task ID */ ptr[0] = '\0'; xstrfmtcat(tmp2, "%s%u%s", tmp, job_ptr->array_task_id, ptr+2); xfree(tmp); /* transfer the results */ tmp = tmp2; tmp2 = NULL; } - while ((ptr = strstr(tmp, "%j"))) { + while ((ptr = strstr(tmp, "%j"))) { /* Job ID */ ptr[0] = '\0'; xstrfmtcat(tmp2, "%s%u%s", tmp, job_ptr->job_id, ptr+2); xfree(tmp); /* transfer the results */ tmp = tmp2; tmp2 = NULL; } - while ((ptr = strstr(tmp, "%u"))) { + while ((ptr = strstr(tmp, "%u"))) { /* User name */ ptr[0] = '\0'; user = uid_to_string((uid_t) job_ptr->user_id); xstrfmtcat(tmp2, "%s%s%s", tmp, user, ptr+2); diff --git a/src/slurmd/slurmstepd/fname.c b/src/slurmd/slurmstepd/fname.c index c606c2b4c68..f2801acbb79 100644 --- a/src/slurmd/slurmstepd/fname.c +++ b/src/slurmd/slurmstepd/fname.c @@ -107,8 +107,13 @@ fname_create(stepd_step_rec_t *job, const char *format, int taskid) break; case 'A': /* '%A' => array master job id */ xmemcat(name, q, p - 1); - xstrfmtcat(name, "%0*d", wid, - job->array_job_id); + if (job->array_task_id == (uint16_t) NO_VAL) { + xstrfmtcat(name, "%0*d", wid, + job->jobid); + } else { + xstrfmtcat(name, "%0*d", wid, + job->array_job_id); + } q = ++p; break; case 's': /* '%s' => step id */ -- GitLab