From 43f7ed985d0d69374ddfe11d2102d8beb70ef79e Mon Sep 17 00:00:00 2001
From: Moe Jette <jette1@llnl.gov>
Date: Fri, 21 Dec 2007 00:50:48 +0000
Subject: [PATCH] Move total_procs from job details structure to job structure
 in slurmctld

---
 .../filetxt/jobacct_storage_filetxt.c         |  6 ++---
 .../mysql/jobacct_storage_mysql.c             |  6 ++---
 .../pgsql/jobacct_storage_pgsql.c             |  6 ++---
 src/slurmctld/job_mgr.c                       | 26 ++++++++-----------
 src/slurmctld/node_scheduler.c                |  5 ++--
 src/slurmctld/slurmctld.h                     |  4 +--
 6 files changed, 24 insertions(+), 29 deletions(-)

diff --git a/src/plugins/jobacct_storage/filetxt/jobacct_storage_filetxt.c b/src/plugins/jobacct_storage/filetxt/jobacct_storage_filetxt.c
index 7300027d4bc..c2601632a07 100644
--- a/src/plugins/jobacct_storage/filetxt/jobacct_storage_filetxt.c
+++ b/src/plugins/jobacct_storage/filetxt/jobacct_storage_filetxt.c
@@ -323,7 +323,7 @@ extern int jobacct_storage_p_job_start(struct job_record *job_ptr)
 	tmp = snprintf(buf, BUFFER_SIZE,
 		       "%d %s %d %ld %u %s %s",
 		       JOB_START, jname,
-		       track_steps, priority, job_ptr->details->total_procs,
+		       track_steps, priority, job_ptr->total_procs,
 		       nodes, account);
 
 	rc = _print_record(job_ptr, job_ptr->start_time, buf);
@@ -393,7 +393,7 @@ extern int jobacct_storage_p_step_start(struct step_record *step_ptr)
 	
 #else
 	if(!step_ptr->step_layout || !step_ptr->step_layout->task_cnt) {
-		cpus = step_ptr->job_ptr->details->total_procs;
+		cpus = step_ptr->job_ptr->total_procs;
 		snprintf(node_list, BUFFER_SIZE, "%s", step_ptr->job_ptr->nodes);
 	} else {
 		cpus = step_ptr->step_layout->task_cnt;
@@ -509,7 +509,7 @@ extern int jobacct_storage_p_step_complete(struct step_record *step_ptr)
 	
 #else
 	if(!step_ptr->step_layout || !step_ptr->step_layout->task_cnt) {
-		cpus = step_ptr->job_ptr->details->total_procs;
+		cpus = step_ptr->job_ptr->total_procs;
 		snprintf(node_list, BUFFER_SIZE, "%s", step_ptr->job_ptr->nodes);
 	
 	} else {
diff --git a/src/plugins/jobacct_storage/mysql/jobacct_storage_mysql.c b/src/plugins/jobacct_storage/mysql/jobacct_storage_mysql.c
index 494b57f5a1c..554ec9fb7fb 100644
--- a/src/plugins/jobacct_storage/mysql/jobacct_storage_mysql.c
+++ b/src/plugins/jobacct_storage/mysql/jobacct_storage_mysql.c
@@ -381,7 +381,7 @@ try_again:
 			 (int)job_ptr->start_time,
 			 jname, track_steps,
 			 job_ptr->job_state & (~JOB_COMPLETING),
-			 priority, job_ptr->details->total_procs,
+			 priority, job_ptr->total_procs,
 			 nodes, account);
 		rc = mysql_db_query(jobacct_mysql_db, query);
 	} else if(!reinit) {
@@ -494,7 +494,7 @@ extern int jobacct_storage_p_step_start(struct step_record *step_ptr)
 	
 #else
 	if(!step_ptr->step_layout || !step_ptr->step_layout->task_cnt) {
-		cpus = step_ptr->job_ptr->details->total_procs;
+		cpus = step_ptr->job_ptr->total_procs;
 		snprintf(node_list, BUFFER_SIZE, "%s", step_ptr->job_ptr->nodes);
 	} else {
 		cpus = step_ptr->step_layout->task_cnt;
@@ -572,7 +572,7 @@ extern int jobacct_storage_p_step_complete(struct step_record *step_ptr)
 	
 #else
 	if(!step_ptr->step_layout || !step_ptr->step_layout->task_cnt)
-		cpus = step_ptr->job_ptr->details->total_procs;
+		cpus = step_ptr->job_ptr->total_procs;
 	else 
 		cpus = step_ptr->step_layout->task_cnt;
 #endif
diff --git a/src/plugins/jobacct_storage/pgsql/jobacct_storage_pgsql.c b/src/plugins/jobacct_storage/pgsql/jobacct_storage_pgsql.c
index eda7fd8f4c5..47f5bfbac4f 100644
--- a/src/plugins/jobacct_storage/pgsql/jobacct_storage_pgsql.c
+++ b/src/plugins/jobacct_storage/pgsql/jobacct_storage_pgsql.c
@@ -441,7 +441,7 @@ try_again:
 			 (int)job_ptr->start_time,
 			 jname, track_steps,
 			 job_ptr->job_state & (~JOB_COMPLETING),
-			 priority, job_ptr->details->total_procs,
+			 priority, job_ptr->total_procs,
 			 nodes, account);
 		rc = pgsql_db_query(jobacct_pgsql_db, query);
 	} else if(!reinit) {
@@ -554,7 +554,7 @@ extern int jobacct_storage_p_step_start(struct step_record *step_ptr)
 	
 #else
 	if(!step_ptr->step_layout || !step_ptr->step_layout->task_cnt) {
-		cpus = step_ptr->job_ptr->details->total_procs;
+		cpus = step_ptr->job_ptr->total_procs;
 		snprintf(node_list, BUFFER_SIZE, "%s", step_ptr->job_ptr->nodes);
 	} else {
 		cpus = step_ptr->step_layout->task_cnt;
@@ -632,7 +632,7 @@ extern int jobacct_storage_p_step_complete(struct step_record *step_ptr)
 	
 #else
 	if(!step_ptr->step_layout || !step_ptr->step_layout->task_cnt)
-		cpus = step_ptr->job_ptr->details->total_procs;
+		cpus = step_ptr->job_ptr->total_procs;
 	else 
 		cpus = step_ptr->step_layout->task_cnt;
 #endif
diff --git a/src/slurmctld/job_mgr.c b/src/slurmctld/job_mgr.c
index 45e753d590b..89da29930c1 100644
--- a/src/slurmctld/job_mgr.c
+++ b/src/slurmctld/job_mgr.c
@@ -487,6 +487,7 @@ static void _dump_job_state(struct job_record *dump_job_ptr, Buf buffer)
 	pack32(dump_job_ptr->priority, buffer);
 	pack32(dump_job_ptr->alloc_sid, buffer);
 	pack32(dump_job_ptr->num_procs, buffer);
+	pack32(dump_job_ptr->total_procs, buffer);
 	pack32(dump_job_ptr->exit_code, buffer);
 	pack32(dump_job_ptr->db_index, buffer);
 
@@ -552,7 +553,7 @@ static void _dump_job_state(struct job_record *dump_job_ptr, Buf buffer)
 static int _load_job_state(Buf buffer)
 {
 	uint32_t job_id, user_id, group_id, time_limit, priority, alloc_sid;
-	uint32_t exit_code, num_procs, db_index, name_len;
+	uint32_t exit_code, num_procs, db_index, name_len, total_procs;
 	time_t start_time, end_time, suspend_time, pre_sus_time, tot_sus_time;
 	uint16_t job_state, next_step_id, details, batch_flag, step_flag;
 	uint16_t kill_on_node_fail, kill_on_step_done;
@@ -572,6 +573,7 @@ static int _load_job_state(Buf buffer)
 	safe_unpack32(&priority, buffer);
 	safe_unpack32(&alloc_sid, buffer);
 	safe_unpack32(&num_procs, buffer);
+	safe_unpack32(&total_procs, buffer);
 	safe_unpack32(&exit_code, buffer);
 	safe_unpack32(&db_index, buffer);
 
@@ -682,6 +684,7 @@ static int _load_job_state(Buf buffer)
 	job_ptr->exit_code    = exit_code;
 	job_ptr->state_reason = state_reason;
 	job_ptr->num_procs    = num_procs;
+	job_ptr->total_procs  = total_procs;
 	job_ptr->db_index     = db_index;
 	job_ptr->time_last_active = time(NULL);
 	strncpy(job_ptr->name, name, MAX_JOBNAME_LEN);
@@ -756,7 +759,6 @@ void _dump_job_details(struct job_details *detail_ptr, Buf buffer)
 {
 	pack32(detail_ptr->min_nodes, buffer);
 	pack32(detail_ptr->max_nodes, buffer);
-	pack32(detail_ptr->total_procs, buffer);
 	pack32(detail_ptr->num_tasks, buffer);
 
 	pack16(detail_ptr->shared, buffer);
@@ -798,7 +800,7 @@ static int _load_job_details(struct job_record *job_ptr, Buf buffer)
 	char *err = NULL, *in = NULL, *out = NULL, *work_dir = NULL;
 	char **argv = (char **) NULL;
 	uint32_t min_nodes, max_nodes;
-	uint32_t job_min_procs, total_procs;
+	uint32_t job_min_procs;
 	uint32_t job_min_memory, job_max_memory, job_min_tmp_disk;
 	uint32_t num_tasks, name_len, argc = 0;
 	uint16_t shared, contiguous, ntasks_per_node;
@@ -811,7 +813,6 @@ static int _load_job_details(struct job_record *job_ptr, Buf buffer)
 	/* unpack the job's details from the buffer */
 	safe_unpack32(&min_nodes, buffer);
 	safe_unpack32(&max_nodes, buffer);
-	safe_unpack32(&total_procs, buffer);
 	safe_unpack32(&num_tasks, buffer);
 
 	safe_unpack16(&shared, buffer);
@@ -874,7 +875,6 @@ static int _load_job_details(struct job_record *job_ptr, Buf buffer)
 	/* now put the details into the job record */
 	job_ptr->details->min_nodes = min_nodes;
 	job_ptr->details->max_nodes = max_nodes;
-	job_ptr->details->total_procs = total_procs;
 	job_ptr->details->num_tasks = num_tasks;
 	job_ptr->details->shared = shared;
 	job_ptr->details->acctg_freq = acctg_freq;
@@ -3028,18 +3028,13 @@ void pack_job(struct job_record *dump_job_ptr, Buf buffer)
 	else
 		pack32(dump_job_ptr->time_limit, buffer);
 
-	if (dump_job_ptr->details) {
+	if (dump_job_ptr->details)
 		pack_time(dump_job_ptr->details->submit_time, buffer);
-	} else {
+	else
 		pack_time((time_t) 0, buffer);
-	}
-	if (IS_JOB_PENDING(dump_job_ptr)) {
-		if (dump_job_ptr->details)
-			pack_time(dump_job_ptr->details->begin_time,
-				  buffer);
-		else
-			pack_time((time_t) 0, buffer);
-	} else
+	if (IS_JOB_PENDING(dump_job_ptr) && dump_job_ptr->details)
+		pack_time(dump_job_ptr->details->begin_time, buffer);
+	else
 		pack_time(dump_job_ptr->start_time, buffer);
 	pack_time(dump_job_ptr->end_time, buffer);
 	pack_time(dump_job_ptr->suspend_time, buffer);
@@ -3109,6 +3104,7 @@ static void _pack_default_job_details(struct job_details *detail_ptr,
 		packnull(buffer);
 		packnull(buffer);
 		packnull(buffer);
+		packnull(buffer);
 
 		pack32((uint32_t) 0, buffer);
 		pack32((uint32_t) 0, buffer);
diff --git a/src/slurmctld/node_scheduler.c b/src/slurmctld/node_scheduler.c
index 25d233dc225..5569b70aa88 100644
--- a/src/slurmctld/node_scheduler.c
+++ b/src/slurmctld/node_scheduler.c
@@ -561,7 +561,7 @@ _get_req_features(struct node_set *node_set_ptr, int node_set_size,
 }
 
 /*
- * _pick_best_nodes - from a weigh order list of all nodes satisfying a 
+ * _pick_best_nodes - from a weight order list of all nodes satisfying a 
  *	job's specifications, select the "best" for use
  * IN node_set_ptr - pointer to node specification information
  * IN node_set_size - number of entries in records pointed to by node_set_ptr
@@ -1823,8 +1823,7 @@ extern void build_node_details(struct job_record *job_ptr)
 		      job_ptr->job_id, job_ptr->node_cnt, node_inx);
 	}
 	job_ptr->num_cpu_groups = cpu_inx + 1;
-	if (job_ptr->details)
-		job_ptr->details->total_procs = total_procs;
+	job_ptr->total_procs = total_procs;
 }
 
 /*
diff --git a/src/slurmctld/slurmctld.h b/src/slurmctld/slurmctld.h
index 195b0f26e68..2c5bebb8522 100644
--- a/src/slurmctld/slurmctld.h
+++ b/src/slurmctld/slurmctld.h
@@ -317,8 +317,6 @@ struct job_details {
 	char *err;			/* pathname of job's stderr file */
 	char *in;			/* pathname of job's stdin file */
 	char *out;			/* pathname of job's stdout file */
-	uint32_t total_procs;		/* number of allocated processors, 
-					   for accounting */
 	time_t submit_time;		/* time of submission */
 	time_t begin_time;		/* start at this time (srun --being), 
 					 * resets to time first eligible
@@ -355,6 +353,8 @@ struct job_record {
 					 * for this job, used to insure
 					 * epilog is not re-run for job */
 	uint32_t num_procs;		/* count of required processors */
+	uint32_t total_procs;		/* number of allocated processors, 
+					   for accounting */
 	uint32_t time_limit;		/* time_limit minutes or INFINITE,
 					 * NO_VAL implies partition max_time */
 	time_t start_time;		/* time execution begins, 
-- 
GitLab