From ab27e7ea1009e4915551f6971580c201f1be9b36 Mon Sep 17 00:00:00 2001 From: Danny Auble <da@llnl.gov> Date: Mon, 26 Mar 2007 22:36:09 +0000 Subject: [PATCH] svn merge -r11234:11242 https://eris.llnl.gov/svn/slurm/branches/slurm-1.1 --- NEWS | 2 ++ .../block_allocator/block_allocator.c | 29 +++++++++---------- .../block_allocator/block_allocator.h | 2 +- src/plugins/select/bluegene/plugin/bluegene.c | 11 +++---- .../select/bluegene/plugin/select_bluegene.c | 4 ++- src/smap/configure_functions.c | 2 +- src/smap/grid_functions.c | 5 ++-- 7 files changed, 30 insertions(+), 25 deletions(-) diff --git a/NEWS b/NEWS index d1cfa404624..2f82232eb16 100644 --- a/NEWS +++ b/NEWS @@ -263,6 +263,8 @@ documents those changes that are of interest to users and admins. - sched/wiki2 - Report job's node sharing options. - sched/wiki2 - If SchedulerPort is in use, retry opening it indefinitely. - sched/wiki2 - Add support for changing the size of a pending job. + - BLUEGENE - Fix to correctly look at downed/drained nodes with picking + a block to run a job and not confuse it with another running job. * Changes in SLURM 1.1.32 ========================= diff --git a/src/plugins/select/bluegene/block_allocator/block_allocator.c b/src/plugins/select/bluegene/block_allocator/block_allocator.c index 9d309de61a6..67df4fc5550 100644 --- a/src/plugins/select/bluegene/block_allocator/block_allocator.c +++ b/src/plugins/select/bluegene/block_allocator/block_allocator.c @@ -129,8 +129,8 @@ static int _create_config_even(ba_node_t *grid); #endif /** */ -static void _new_ba_node(ba_node_t *ba_node, - int *coord); +static void _new_ba_node(ba_node_t *ba_node, int *coord, + bool track_down_nodes); /** */ static int _reset_the_path(ba_switch_t *curr_switch, int source, int target, int dim); @@ -934,8 +934,6 @@ node_info_error: _create_ba_system(); - init_grid(node_info_ptr); - #ifndef HAVE_BG_FILES _create_config_even(ba_system_ptr->grid); #endif @@ -943,6 +941,7 @@ node_info_error: best_path = list_create(_delete_path_list); _initialized = true; + init_grid(node_info_ptr); } extern void init_wires() @@ -1223,7 +1222,7 @@ extern int copy_node_path(List nodes, List dest_nodes) ba_node->coord[Y], ba_node->coord[Z]); new_ba_node = ba_copy_node(ba_node); - _new_ba_node(new_ba_node, ba_node->coord); + _new_ba_node(new_ba_node, ba_node->coord, false); list_push(dest_nodes, new_ba_node); } @@ -1431,7 +1430,7 @@ end_it: return name; } -extern int reset_ba_system() +extern int reset_ba_system(bool track_down_nodes) { int x; #ifdef HAVE_BG @@ -1447,11 +1446,11 @@ extern int reset_ba_system() coord[Y] = y; coord[Z] = z; _new_ba_node(&ba_system_ptr->grid[x][y][z], - coord); + coord, track_down_nodes); } #else coord[X] = x; - _new_ba_node(&ba_system_ptr->grid[x], coord); + _new_ba_node(&ba_system_ptr->grid[x], coord, track_down_nodes); #endif } @@ -2367,7 +2366,7 @@ static int _copy_the_path(List nodes, ba_switch_t *curr_switch, grid[mark_node_tar[X]] [mark_node_tar[Y]] [mark_node_tar[Z]]); - _new_ba_node(ba_node, mark_node_tar); + _new_ba_node(ba_node, mark_node_tar, false); list_push(nodes, ba_node); debug3("adding %d%d%d as a pass through", ba_node->coord[X], @@ -2819,15 +2818,15 @@ extern int set_bp_map(void) } -static void _new_ba_node(ba_node_t *ba_node, int *coord) +static void _new_ba_node(ba_node_t *ba_node, int *coord, bool track_down_nodes) { int i,j; uint16_t node_base_state = ba_node->state & NODE_STATE_BASE; - if((node_base_state != NODE_STATE_DOWN) - && !(ba_node->state & NODE_STATE_DRAIN)) + if(((node_base_state != NODE_STATE_DOWN) + && !(ba_node->state & NODE_STATE_DRAIN)) || !track_down_nodes) ba_node->used = false; - + for (i=0; i<BA_SYSTEM_DIMENSIONS; i++){ ba_node->coord[i] = coord[i]; @@ -2868,12 +2867,12 @@ static void _create_ba_system(void) coord[Y] = y; coord[Z] = z; _new_ba_node(&ba_system_ptr->grid[x][y][z], - coord); + coord, true); } } #else coord[X] = x; - _new_ba_node(&ba_system_ptr->grid[x], coord); + _new_ba_node(&ba_system_ptr->grid[x], coord, true); #endif } } diff --git a/src/plugins/select/bluegene/block_allocator/block_allocator.h b/src/plugins/select/bluegene/block_allocator/block_allocator.h index 95c6298d097..f882e197b88 100644 --- a/src/plugins/select/bluegene/block_allocator/block_allocator.h +++ b/src/plugins/select/bluegene/block_allocator/block_allocator.h @@ -350,7 +350,7 @@ extern int check_and_set_node_list(List nodes); extern char *set_bg_block(List results, int *start, int *geometry, int conn_type); -extern int reset_ba_system(); +extern int reset_ba_system(bool track_down_nodes); extern void init_grid(node_info_msg_t *node_info_ptr); /* diff --git a/src/plugins/select/bluegene/plugin/bluegene.c b/src/plugins/select/bluegene/plugin/bluegene.c index 6e074a48b83..cb5432968ad 100644 --- a/src/plugins/select/bluegene/plugin/bluegene.c +++ b/src/plugins/select/bluegene/plugin/bluegene.c @@ -692,7 +692,7 @@ extern bool blocks_overlap(bg_record_t *rec_a, bg_record_t *rec_b) bitstr_t *my_bitmap = NULL; if(rec_a->bp_count > 1 && rec_a->bp_count > 1) { - reset_ba_system(); + reset_ba_system(false); check_and_set_node_list(rec_a->bg_block_list); if(check_and_set_node_list(rec_b->bg_block_list) == SLURM_ERROR) @@ -956,7 +956,7 @@ extern int create_defined_blocks(bg_layout_t overlapped) init_wires(); #endif slurm_mutex_lock(&block_state_mutex); - reset_ba_system(); + reset_ba_system(false); if(bg_list) { itr = list_iterator_create(bg_list); while((bg_record = list_next(itr))) { @@ -993,7 +993,7 @@ extern int create_defined_blocks(bg_layout_t overlapped) && bg_record->cpus_per_bp == procs_per_node) { char *name = NULL; if(overlapped == LAYOUT_OVERLAP) - reset_ba_system(); + reset_ba_system(false); for(i=0; i<BA_SYSTEM_DIMENSIONS; i++) geo[i] = bg_record->geo[i]; debug2("adding %s %d%d%d %d%d%d", @@ -1140,9 +1140,9 @@ extern int create_dynamic_block(ba_request_t *request, List my_block_list) blockreq_t blockreq; slurm_mutex_lock(&block_state_mutex); - reset_ba_system(); if(my_block_list) { + reset_ba_system(true); itr = list_iterator_create(my_block_list); while ((bg_record = (bg_record_t *) list_next(itr)) != NULL) { if(!my_bitmap) { @@ -1181,6 +1181,7 @@ extern int create_dynamic_block(ba_request_t *request, List my_block_list) list_iterator_destroy(itr); FREE_NULL_BITMAP(my_bitmap); } else { + reset_ba_system(false); debug("No list was given"); } @@ -1432,7 +1433,7 @@ extern int create_full_system_block() rc = SLURM_ERROR; goto no_total; } - reset_ba_system(); + reset_ba_system(false); for(i=0; i<BA_SYSTEM_DIMENSIONS; i++) geo[i] = bg_record->geo[i]; debug2("adding %s %d%d%d %d%d%d", diff --git a/src/plugins/select/bluegene/plugin/select_bluegene.c b/src/plugins/select/bluegene/plugin/select_bluegene.c index 107d5de9702..2098a175e94 100644 --- a/src/plugins/select/bluegene/plugin/select_bluegene.c +++ b/src/plugins/select/bluegene/plugin/select_bluegene.c @@ -406,7 +406,7 @@ extern int select_p_state_restore(char *dir_name) if(select_g_unpack_node_info(&node_select_ptr, buffer) == SLURM_ERROR) goto unpack_error; - reset_ba_system(); + reset_ba_system(false); node_bitmap = bit_alloc(node_record_count); ionode_bitmap = bit_alloc(bluegene_numpsets); @@ -1086,6 +1086,8 @@ extern int select_p_update_node_state (int index, uint16_t state) } } #endif + if(bluegene_layout_mode == LAYOUT_DYNAMIC) + remove_from_request_list(); return SLURM_ERROR; } diff --git a/src/smap/configure_functions.c b/src/smap/configure_functions.c index 0a3f3c8e488..684379de1c0 100644 --- a/src/smap/configure_functions.c +++ b/src/smap/configure_functions.c @@ -344,7 +344,7 @@ static int _create_allocation(char *com, List allocated_blocks) } start_request: if(!strcasecmp(layout_mode,"OVERLAP")) - reset_ba_system(); + reset_ba_system(true); /* Here is where we do the allocating of the partition. diff --git a/src/smap/grid_functions.c b/src/smap/grid_functions.c index 11093a5b1da..444ee30e4d8 100644 --- a/src/smap/grid_functions.c +++ b/src/smap/grid_functions.c @@ -56,7 +56,7 @@ extern int set_grid(int start, int end, int count) || (ba_system_ptr->grid[x][y][z].state & NODE_STATE_DRAIN)) continue; - + ba_system_ptr->grid[x][y][z].letter = letters[count%62]; ba_system_ptr->grid[x][y][z].color = @@ -102,10 +102,11 @@ extern int set_grid_bg(int *start, int *end, int count, int set) for (y = start[Y]; y <= end[Y]; y++) { for (z = start[Z]; z <= end[Z]; z++) { if(set - || ((ba_system_ptr->grid[x][y][z].letter + && ((ba_system_ptr->grid[x][y][z].letter == '.') && (ba_system_ptr->grid[x][y][z].letter != '#'))) { + ba_system_ptr-> grid[x][y][z].letter = letters[count%62]; -- GitLab