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