diff --git a/src/slurmctld/node_mgr.c b/src/slurmctld/node_mgr.c index 5fd1e330b1c2ea6d3d54f3c73b93abba7b03e722..a0237e81ff7d5c208083706d3400989962baf7a8 100644 --- a/src/slurmctld/node_mgr.c +++ b/src/slurmctld/node_mgr.c @@ -71,6 +71,7 @@ static void _dump_node_state (struct node_record *dump_node_ptr, static int _hash_index (char *name); static void _list_delete_config (void *config_entry); static int _list_find_config (void *config_entry, void *key); +static void _make_node_down(struct node_record *node_ptr); static void _pack_node (struct node_record *dump_node_ptr, Buf buffer); static void _split_node_name (char *name, char *prefix, char *suffix, int *index, int *digits); @@ -324,8 +325,7 @@ int delete_node_record (char *name) node_record_point->cpus; } strcpy (node_record_point->name, ""); - node_record_point->node_state = NODE_STATE_DOWN; - last_bitmap_update = time (NULL); + _make_node_down(node_record_point); return SLURM_SUCCESS; } @@ -481,10 +481,10 @@ int load_all_node_state ( void ) /* find record and perform update */ node_ptr = find_node_record (node_name); if (node_ptr) { - node_ptr->node_state = node_state; - node_ptr->cpus = cpus; - node_ptr->real_memory = real_memory; - node_ptr->tmp_disk = tmp_disk; + node_ptr->node_state = node_state; + node_ptr->cpus = cpus; + node_ptr->real_memory = real_memory; + node_ptr->tmp_disk = tmp_disk; node_ptr->last_response = (time_t) 0; } else { error ("Node %s has vanished from configuration", @@ -1215,8 +1215,6 @@ void node_not_resp (char *name) void set_node_down (char *name) { struct node_record *node_ptr; - int node_inx; - uint16_t resp_state; node_ptr = find_node_record (name); if (node_ptr == NULL) { @@ -1224,13 +1222,7 @@ void set_node_down (char *name) return; } - node_inx = node_ptr - node_record_table_ptr; - last_node_update = time (NULL); - /* preserve NODE_STATE_NO_RESPOND flag if set */ - resp_state = node_ptr->node_state & NODE_STATE_NO_RESPOND; - node_ptr->node_state = NODE_STATE_DOWN | resp_state; - bit_clear (up_node_bitmap, node_inx); - bit_clear (idle_node_bitmap, node_inx); + _make_node_down(node_ptr); (void) kill_running_job_by_node_name(name, false); return; @@ -1277,10 +1269,7 @@ void ping_nodes (void) (base_state != NODE_STATE_DOWN)) { error ("Node %s not responding, setting DOWN", node_record_table_ptr[i].name); - last_node_update = time (NULL); - bit_clear (up_node_bitmap, i); - bit_clear (idle_node_bitmap, i); - node_record_table_ptr[i].node_state = NODE_STATE_DOWN; + _make_node_down(&node_record_table_ptr[i]); kill_running_job_by_node_name ( node_record_table_ptr[i].name, false); continue; @@ -1519,6 +1508,20 @@ void make_node_comp(struct node_record *node_ptr) } } +/* _make_node_down - flag specified node as down */ +static void _make_node_down(struct node_record *node_ptr) +{ + int inx = node_ptr - node_record_table_ptr; + uint16_t no_resp_flag; + + last_node_update = time (NULL); + no_resp_flag = node_ptr->node_state & NODE_STATE_NO_RESPOND; + node_ptr->node_state = NODE_STATE_DOWN | no_resp_flag; + node_ptr->job_cnt = 0; + bit_clear (up_node_bitmap, inx); + bit_clear (idle_node_bitmap, inx); +} + /* make_node_idle - flag specified node as having completed a job */ void make_node_idle(struct node_record *node_ptr) { @@ -1528,7 +1531,6 @@ void make_node_idle(struct node_record *node_ptr) last_node_update = time (NULL); base_state = node_ptr->node_state & (~NODE_STATE_NO_RESPOND); no_resp_flag = node_ptr->node_state & NODE_STATE_NO_RESPOND; - no_resp_flag = node_ptr->node_state & NODE_STATE_NO_RESPOND; if ((base_state == NODE_STATE_DOWN) || (base_state == NODE_STATE_DRAINED)) { debug3("Node %s being left in state %s",