From 89ad34fd3fe1cc2871cff99117af1cf6b35a4776 Mon Sep 17 00:00:00 2001 From: Danny Auble <da@schedmd.com> Date: Thu, 14 Jul 2011 16:29:31 -0700 Subject: [PATCH] BLUEGENE - updated resolve functionality and moved it into a common location --- src/smap/configure_functions.c | 45 +++++------------------------ src/smap/opts.c | 42 +++++++++++++++++++++++++++ src/smap/smap.c | 52 ++-------------------------------- src/smap/smap.h | 1 + 4 files changed, 53 insertions(+), 87 deletions(-) diff --git a/src/smap/configure_functions.c b/src/smap/configure_functions.c index 68d3c859363..3fc135d9aee 100644 --- a/src/smap/configure_functions.c +++ b/src/smap/configure_functions.c @@ -532,6 +532,8 @@ geo_error_message: static int _resolve(char *com) { int i=0; + char *ret_str; + #ifdef HAVE_BG_FILES int len=strlen(com); char *rack_mid = NULL; @@ -545,51 +547,18 @@ static int _resolve(char *com) } if (com[i] == 'r') com[i] = 'R'; - - memset(error_string, 0, 255); -#ifdef HAVE_BG_FILES - if (!have_db2) { - sprintf(error_string, "Must be on BG SN to resolve\n"); - goto resolve_error; + ret_str = resolve_mp(com+i); + if (ret_str) { + snprintf(error_string, sizeof(error_string), "%s", ret_str); + xfree(ret_str); } - if (len-i<3) { - sprintf(error_string, "Must enter 3 coords to resolve.\n"); - goto resolve_error; - } - if (com[i] != 'R') { - rack_mid = find_bp_rack_mid(com+i); - - if (rack_mid) - sprintf(error_string, - "X=%c Y=%c Z=%c resolves to %s\n", - com[X+i],com[Y+i],com[Z+i], rack_mid); - else - sprintf(error_string, - "X=%c Y=%c Z=%c has no resolve\n", - com[X+i],com[Y+i],com[Z+i]); - - } else { - coord = find_bp_loc(com+i); - - if (coord) - sprintf(error_string, - "%s resolves to X=%d Y=%d Z=%d\n", - com+i,coord[X],coord[Y],coord[Z]); - else - sprintf(error_string, "%s has no resolve.\n", - com+i); - } -resolve_error: -#else - sprintf(error_string, - "Must be on BG SN to resolve.\n"); -#endif wnoutrefresh(text_win); doupdate(); return 1; } + static int _change_state_all_bps(char *com, int state) { char start_loc[32], end_loc[32]; diff --git a/src/smap/opts.c b/src/smap/opts.c index 84bc3876402..5f51fd771bb 100644 --- a/src/smap/opts.c +++ b/src/smap/opts.c @@ -203,6 +203,48 @@ extern void clear_window(WINDOW *win) wnoutrefresh(win); } +extern char *resolve_mp(char *desc) +{ + char *ret_str = NULL; +#if defined HAVE_BG_FILES + ba_mp_t *ba_mp = NULL; + int i; + + if (!desc) { + ret_str = xstrdup("No Description given.\n"); + goto fini; + } + + i = strlen(desc) - params.cluster_dims; + if (i < 0) { + ret_str = xstrdup_printf("Must enter %d coords to resolve.\n", + params.cluster_dim); + goto fini; + } + + if (desc[0] != 'R') { + ba_mp = str2ba_mp(desc+len); + if (ba_mp) + ret_str = xstrdup_printf("%s resolves to %s\n", + ba_mp->coord_str, ba_mp->loc); + else + ret_str = xstrdup_printf("%s has no resolve\n", desc+i); + } else { + ba_mp = loc2ba_mp(desc); + if (ba_mp) + ret_str = xstrdup_printf("%s resolves to %s\n", + desc, ba_mp->coord_str); + else + ret_str = xstrdup_printf("%s has no resolve.\n", desc); + } +fini: +#else + ret_str = xstrdup("Must be physically on a BlueGene system for support " + "of resolve option.\n"); +#endif + return ret_str; +} + static void _usage(void) { #ifdef HAVE_BG diff --git a/src/smap/smap.c b/src/smap/smap.c index ee20529f96d..f0cbed7325e 100644 --- a/src/smap/smap.c +++ b/src/smap/smap.c @@ -121,57 +121,11 @@ int main(int argc, char *argv[]) init_grid(new_node_ptr); if (params.resolve) { -#if defined HAVE_BG_FILES && defined HAVE_BG_L_P -#if 1 - error("this doesn't work in the current 2.3 code. FIXME"); -#else - if (!have_db2) { - printf("Required libraries can not be found " - "to access the Bluegene system.\nPlease " - "set your LD_LIBRARY_PATH correctly to " - "point to them.\n"); - goto part_fini; - } - + char *ret_str = resolve_mp(params.resolve); + if (ret_str) + printf("%s", ret_string); if (!mapset) mapset = 1; - if (params.resolve[0] != 'R') { - i = strlen(params.resolve); - i -= 3; - if (i < 0) { - printf("No real block was entered\n"); - goto part_fini; - } - char *rack_mid = find_bp_rack_mid(params.resolve+i); - if (rack_mid) { - printf("X=%c Y=%c Z=%c resolves to %s\n", - params.resolve[0+i], - params.resolve[1+i], - params.resolve[2+i], - rack_mid); - } else { - printf("X=%c Y=%c Z=%c has no resolve\n", - params.resolve[0+i], - params.resolve[1+i], - params.resolve[2+i]); - } - } else { - uint16_t *coord = find_bp_loc(params.resolve); - if (coord) { - printf("%s resolves to X=%d Y=%d Z=%d\n", - params.resolve, - coord[0], coord[1], coord[2]); - } else { - printf("%s has no resolve.\n", - params.resolve); - } - } -part_fini: -#endif -#else - printf("Must be physically on a BlueGene system for support " - "of resolve option.\n"); -#endif _smap_exit(0); /* Calls exit(), no return */ } if (!params.commandline) { diff --git a/src/smap/smap.h b/src/smap/smap.h index 4d9cdfb2eab..35aeafb44fe 100644 --- a/src/smap/smap.h +++ b/src/smap/smap.h @@ -190,6 +190,7 @@ bitstr_t *get_requested_node_bitmap(void); extern void parse_command_line(int argc, char *argv[]); extern void print_date(void); extern void clear_window(WINDOW *win); +extern char *resolve_mp(char *desc); extern void get_slurm_part(void); extern void get_bg_part(void); -- GitLab