From 9aa2a727f31fa76c509e9bc3f7ad7d8357c80011 Mon Sep 17 00:00:00 2001
From: Morris Jette <jette@schedmd.com>
Date: Wed, 15 Oct 2014 13:44:27 -0700
Subject: [PATCH] if DOWN node set to PowerDown, clear NoResp flag

Without this change, a node in the cloud that failed to power up,
would not have its NoResponding flag cleared, which would prevent
its later use. The NoResponding flag is now cleared when manuallly
when the node is modified to PowerDown.
---
 src/slurmctld/node_mgr.c   | 10 ++++++++++
 src/slurmctld/power_save.c |  4 +++-
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/src/slurmctld/node_mgr.c b/src/slurmctld/node_mgr.c
index 6c5222162fb..642f032f76c 100644
--- a/src/slurmctld/node_mgr.c
+++ b/src/slurmctld/node_mgr.c
@@ -1381,11 +1381,20 @@ int update_node ( update_node_msg_t * update_node_msg )
 						/* Abort power up request */
 						node_ptr->node_state &=
 							(~NODE_STATE_POWER_UP);
+#ifndef HAVE_FRONT_END
+						node_ptr->node_state |=
+							NODE_STATE_NO_RESPOND;
+#endif
+						node_ptr->node_state =
+							NODE_STATE_IDLE |
+							(node_ptr->node_state &
+							 NODE_STATE_FLAGS);
 					}
 					node_ptr->last_idle = 0;
 					info("powering down node %s",
 					     this_node_name);
 				}
+				free(this_node_name);
 				continue;
 			} else if (state_val == NODE_STATE_POWER_UP) {
 				if (!IS_NODE_POWER_SAVE(node_ptr)) {
@@ -1406,6 +1415,7 @@ int update_node ( update_node_msg_t * update_node_msg )
 					info("powering up node %s",
 					     this_node_name);
 				}
+				free(this_node_name);
 				continue;
 			} else if (state_val == NODE_STATE_NO_RESPOND) {
 				node_ptr->node_state |= NODE_STATE_NO_RESPOND;
diff --git a/src/slurmctld/power_save.c b/src/slurmctld/power_save.c
index 1f78817e5fa..8b2e6172377 100644
--- a/src/slurmctld/power_save.c
+++ b/src/slurmctld/power_save.c
@@ -192,7 +192,9 @@ static void _do_power_work(time_t now)
 			suspend_cnt++;
 			suspend_cnt_f++;
 			node_ptr->node_state |= NODE_STATE_POWER_SAVE;
-			bit_set(power_node_bitmap, i);
+			node_ptr->node_state &= (~NODE_STATE_NO_RESPOND);
+			bit_set(avail_node_bitmap,   i);
+			bit_set(power_node_bitmap,   i);
 			bit_set(sleep_node_bitmap,   i);
 			bit_set(suspend_node_bitmap, i);
 			last_suspend = now;
-- 
GitLab