From f581597b2ad56b0765d1c7de1bc9b940175b258b Mon Sep 17 00:00:00 2001
From: Danny Auble <da@llnl.gov>
Date: Thu, 21 Oct 2010 23:55:20 +0000
Subject: [PATCH] fixed a few more checks to be more dynamic

---
 src/plugins/select/bluegene/plugin/bluegene.c | 13 +++++
 src/plugins/select/bluegene/plugin/bluegene.h |  2 +
 .../select/bluegene/plugin/dynamic_block.c    | 54 +++++++++----------
 src/plugins/select/bluegene/plugin/jobinfo.c  | 24 ++-------
 4 files changed, 43 insertions(+), 50 deletions(-)

diff --git a/src/plugins/select/bluegene/plugin/bluegene.c b/src/plugins/select/bluegene/plugin/bluegene.c
index 2c18a3da9be..bc1bc82d8f0 100644
--- a/src/plugins/select/bluegene/plugin/bluegene.c
+++ b/src/plugins/select/bluegene/plugin/bluegene.c
@@ -145,6 +145,19 @@ extern void fini_bg(void)
 	ba_fini();
 }
 
+extern char *give_geo(int int_geo[SYSTEM_DIMENSIONS])
+{
+	char *geo = NULL;
+	int i;
+
+	for (i=0; i<SYSTEM_DIMENSIONS; i++) {
+		if (geo)
+			xstrcat(geo, "x");
+		xstrfmtcat(geo, "%c", alpha_num[int_geo[i]]);
+	}
+	return geo;
+}
+
 /*
  * block_state_mutex should be locked before calling this function
  */
diff --git a/src/plugins/select/bluegene/plugin/bluegene.h b/src/plugins/select/bluegene/plugin/bluegene.h
index 9b21b061bcc..588d7a2a0cc 100644
--- a/src/plugins/select/bluegene/plugin/bluegene.h
+++ b/src/plugins/select/bluegene/plugin/bluegene.h
@@ -132,6 +132,8 @@ extern int init_bg(void);
 /* Purge all plugin variables */
 extern void fini_bg(void);
 
+extern char *give_geo(int int_geo[SYSTEM_DIMENSIONS]);
+
 extern bool blocks_overlap(bg_record_t *rec_a, bg_record_t *rec_b);
 
 extern void bg_requeue_job(uint32_t job_id, bool wait_for_start);
diff --git a/src/plugins/select/bluegene/plugin/dynamic_block.c b/src/plugins/select/bluegene/plugin/dynamic_block.c
index 858dd4fabe3..d0fbf4d5604 100644
--- a/src/plugins/select/bluegene/plugin/dynamic_block.c
+++ b/src/plugins/select/bluegene/plugin/dynamic_block.c
@@ -62,8 +62,6 @@ extern List create_dynamic_block(List block_list,
 	List results = NULL;
 	List new_blocks = NULL;
 	bitstr_t *my_bitmap = NULL;
-	int geo[SYSTEM_DIMENSIONS];
-	int i;
 	blockreq_t blockreq;
 	int cnodes = request->procs / bg_conf->cpu_ratio;
 	char *unusable_nodes = NULL;
@@ -89,24 +87,24 @@ extern List create_dynamic_block(List block_list,
 
 			if(!bit_super_set(bg_record->bitmap, my_bitmap)) {
 				bit_or(my_bitmap, bg_record->bitmap);
-				for(i=0; i<SYSTEM_DIMENSIONS; i++)
-					geo[i] = bg_record->geo[i];
+
 				if(bg_conf->slurm_debug_flags
-				   & DEBUG_FLAG_BG_PICK)
-					info("adding %s(%s) %s %c%c%c "
-					     "%c%c%c %u",
+				   & DEBUG_FLAG_BG_PICK) {
+					char *start_geo =
+						give_geo(bg_record->start);
+					char *geo =
+						give_geo((int *)bg_record->geo);
+
+					info("adding %s(%s) %s %s %s %u",
 					     bg_record->bg_block_id,
 					     bg_record->nodes,
 					     bg_block_state_string(
 						     bg_record->state),
-					     alpha_num[bg_record->start[X]],
-					     alpha_num[bg_record->start[Y]],
-					     alpha_num[bg_record->start[Z]],
-					     alpha_num[geo[X]],
-					     alpha_num[geo[Y]],
-					     alpha_num[geo[Z]],
+					     start_geo, geo,
 					     bg_record->node_cnt);
-
+					xfree(start_geo);
+					xfree(geo);
+				}
 				if(check_and_set_node_list(
 					   bg_record->bg_block_list)
 				   == SLURM_ERROR) {
@@ -122,22 +120,19 @@ extern List create_dynamic_block(List block_list,
 				}
 			} else if(bg_conf->slurm_debug_flags
 				  & DEBUG_FLAG_BG_PICK) {
-				for(i=0; i<SYSTEM_DIMENSIONS; i++)
-					geo[i] = bg_record->geo[i];
+				char *start_geo = give_geo(bg_record->start);
+				char *geo = give_geo((int *)bg_record->geo);
 
-				info("not adding %s(%s) %s %c%c%c "
-				     "%c%c%c %u",
+				info("not adding %s(%s) %s %s %s %u ",
 				     bg_record->bg_block_id,
 				     bg_record->nodes,
 				     bg_block_state_string(
 					     bg_record->state),
-				     alpha_num[bg_record->start[X]],
-				     alpha_num[bg_record->start[Y]],
-				     alpha_num[bg_record->start[Z]],
-				     alpha_num[geo[X]],
-				     alpha_num[geo[Y]],
-				     alpha_num[geo[Z]],
+				     start_geo,
+				     geo,
 				     bg_record->node_cnt);
+				xfree(start_geo);
+				xfree(geo);
 			}
 		}
 		list_iterator_destroy(itr);
@@ -253,12 +248,11 @@ extern List create_dynamic_block(List block_list,
 
 	//debug("going to create %d", request->size);
 	if(!new_ba_request(request)) {
-		if(geo[X] == (uint16_t)NO_VAL) {
-			error("Problems with request for size %d geo %dx%dx%d",
-			      request->size,
-			      request->geometry[X],
-			      request->geometry[Y],
-			      request->geometry[Z]);
+		if(bg_record->geo[X] == (uint16_t)NO_VAL) {
+			char *geo = give_geo(request->geometry);
+			error("Problems with request for size %d geo %s",
+			      request->size, geo);
+			xfree(geo);
 		} else {
 			error("Problems with request for size %d.  "
 			      "No geo given.",
diff --git a/src/plugins/select/bluegene/plugin/jobinfo.c b/src/plugins/select/bluegene/plugin/jobinfo.c
index 419e54c6275..2a88ebd57a6 100644
--- a/src/plugins/select/bluegene/plugin/jobinfo.c
+++ b/src/plugins/select/bluegene/plugin/jobinfo.c
@@ -561,16 +561,8 @@ extern char *sprint_select_jobinfo(select_jobinfo_t *jobinfo,
 			else
 				xstrcat(geo, "0");
 		}
-	} else {
-		for (i=0; i<SYSTEM_DIMENSIONS; i++) {
-			if (geo)
-				xstrfmtcat(geo, "x%c",
-					   alpha_num[jobinfo->geometry[i]]);
-			else
-				xstrfmtcat(geo, "%c",
-					   alpha_num[jobinfo->geometry[i]]);
-		}
-	}
+	} else
+		geo = give_geo((int *)jobinfo->geometry);
 
 	switch (mode) {
 	case SELECT_PRINT_HEAD:
@@ -693,16 +685,8 @@ extern char *xstrdup_select_jobinfo(select_jobinfo_t *jobinfo, int mode)
 			else
 				xstrcat(geo, "0");
 		}
-	} else {
-		for (i=0; i<SYSTEM_DIMENSIONS; i++) {
-			if (geo)
-				xstrfmtcat(geo, "x%c",
-					   alpha_num[jobinfo->geometry[i]]);
-			else
-				xstrfmtcat(geo, "%c",
-					   alpha_num[jobinfo->geometry[i]]);
-		}
-	}
+	} else
+		geo = give_geo((int *)jobinfo->geometry);
 
 	switch (mode) {
 	case SELECT_PRINT_HEAD:
-- 
GitLab