From e3376f56cdb35a3f87389b71111bdfe29a0ea31b Mon Sep 17 00:00:00 2001
From: Ken Gaillot <kgaillot@redhat.com>
Date: Wed, 30 Oct 2024 10:43:51 -0500
Subject: [PATCH 08/16] Refactor: libcrmcluster: track local node XML ID in
 cluster object

This effectively reverts 7afc16075
---
 include/crm/cluster/internal.h | 1 +
 lib/cluster/cluster.c          | 1 +
 lib/cluster/corosync.c         | 9 +++++++--
 3 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/include/crm/cluster/internal.h b/include/crm/cluster/internal.h
index bc722cb3de..0d0ed59f2a 100644
--- a/include/crm/cluster/internal.h
+++ b/include/crm/cluster/internal.h
@@ -91,6 +91,7 @@ typedef struct pcmk__election pcmk__election_t;
 struct pcmk__cluster_private {
     enum pcmk_ipc_server server;    //!< Server this connection is for (if any)
     char *node_name;                //!< Local node name at cluster layer
+    char *node_xml_id;              //!< Local node XML ID in CIB
     pcmk__election_t *election;     //!< Election state (if election is needed)
 
     /* @TODO Corosync uses an integer node ID, but cluster layers in the
diff --git a/lib/cluster/cluster.c b/lib/cluster/cluster.c
index b560eaae52..dda4b8e89a 100644
--- a/lib/cluster/cluster.c
+++ b/lib/cluster/cluster.c
@@ -166,6 +166,7 @@ pcmk_cluster_free(pcmk_cluster_t *cluster)
         return;
     }
     election_fini(cluster);
+    free(cluster->priv->node_xml_id);
     free(cluster->priv->node_name);
     free(cluster->priv);
     free(cluster);
diff --git a/lib/cluster/corosync.c b/lib/cluster/corosync.c
index 32443a1e07..2782b10067 100644
--- a/lib/cluster/corosync.c
+++ b/lib/cluster/corosync.c
@@ -460,6 +460,7 @@ pcmk__corosync_connect(pcmk_cluster_t *cluster)
 {
     const enum pcmk_cluster_layer cluster_layer = pcmk_get_cluster_layer();
     const char *cluster_layer_s = pcmk_cluster_layer_text(cluster_layer);
+    pcmk__node_status_t *local_node = NULL;
     int rc = pcmk_rc_ok;
 
     pcmk__cluster_init_node_caches();
@@ -490,8 +491,12 @@ pcmk__corosync_connect(pcmk_cluster_t *cluster)
     }
 
     // Ensure local node always exists in peer cache
-    pcmk__get_node(cluster->priv->node_id, cluster->priv->node_name, NULL,
-                   pcmk__node_search_cluster_member);
+    local_node = pcmk__get_node(cluster->priv->node_id,
+                                cluster->priv->node_name, NULL,
+                                pcmk__node_search_cluster_member);
+
+    cluster->priv->node_xml_id = pcmk__corosync_uuid(local_node);
+    CRM_LOG_ASSERT(cluster->priv->node_xml_id != NULL);
 
     return pcmk_rc_ok;
 }
-- 
2.43.0

