From 7cdde033ed7f81b667783fd8089c73ccfc207540 Mon Sep 17 00:00:00 2001
From: Morris Jette <jette@schedmd.com>
Date: Fri, 14 Oct 2011 14:02:56 -0700
Subject: [PATCH] Preserve cloud node address after reconfigure

Preserve the address information about nodes in the cloud after a reconfigure
---
 src/slurmctld/node_mgr.c    |  7 ++++---
 src/slurmctld/read_config.c | 13 +++++++++++++
 2 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/src/slurmctld/node_mgr.c b/src/slurmctld/node_mgr.c
index 80574e14baf..17a375c5ea1 100644
--- a/src/slurmctld/node_mgr.c
+++ b/src/slurmctld/node_mgr.c
@@ -558,11 +558,12 @@ extern int load_all_node_state ( bool state_only )
 			node_ptr->real_memory   = real_memory;
 			node_ptr->tmp_disk      = tmp_disk;
 			node_ptr->last_response = (time_t) 0;
-			node_ptr->last_idle	= now;
 		}
 
-		if (node_ptr)
+		if (node_ptr) {
+			node_ptr->last_idle	= now;
 			select_g_update_node_state(node_ptr);
+		}
 
 		xfree(features);
 		xfree(gres);
@@ -686,7 +687,7 @@ extern void pack_all_node (char **buffer_ptr, int *buffer_size,
 			else if (IS_NODE_FUTURE(node_ptr) &&
 				 !IS_NODE_MAINT(node_ptr)) /* reboot req sent */
 				hidden = true;
-			else if (IS_NODE_CLOUD(node_ptr) &&
+			else if (IS_NODE_CLOUD(node_ptr) && 0 &&
 				 IS_NODE_POWER_SAVE(node_ptr))
 				hidden = true;
 			else if ((node_ptr->name == NULL) ||
diff --git a/src/slurmctld/read_config.c b/src/slurmctld/read_config.c
index a4442e60522..3f1221f1cce 100644
--- a/src/slurmctld/read_config.c
+++ b/src/slurmctld/read_config.c
@@ -969,6 +969,18 @@ static int _restore_node_state(int recover,
 				hs = hostset_create(node_ptr->name);
 		}
 
+		if (IS_NODE_CLOUD(node_ptr) && !IS_NODE_POWER_SAVE(node_ptr)) {
+			/* Preserve NodeHostname + NodeAddr set by scontrol */
+			xfree(node_ptr->comm_name);
+			node_ptr->comm_name = old_node_ptr->comm_name;
+			old_node_ptr->comm_name = NULL;
+			xfree(node_ptr->node_hostname);
+			node_ptr->node_hostname = old_node_ptr->node_hostname;
+			old_node_ptr->node_hostname = NULL;
+			slurm_reset_alias(node_ptr->name, node_ptr->comm_name,
+					  node_ptr->node_hostname);
+		}
+
 		node_ptr->last_response = old_node_ptr->last_response;
 		if (old_node_ptr->port != node_ptr->config_ptr->cpus) {
 			rc = ESLURM_NEED_RESTART;
@@ -979,6 +991,7 @@ static int _restore_node_state(int recover,
 		node_ptr->boot_time     = old_node_ptr->boot_time; 
 		node_ptr->cpus          = old_node_ptr->cpus;
 		node_ptr->cores         = old_node_ptr->cores;
+		node_ptr->last_idle     = old_node_ptr->last_idle;
 		node_ptr->sockets       = old_node_ptr->sockets;
 		node_ptr->threads       = old_node_ptr->threads;
 		node_ptr->real_memory   = old_node_ptr->real_memory;
-- 
GitLab