File bsc#1198767-0006-Fix-controller-update-node-state-correctly-based-on-.patch of Package pacemaker.29789

From 0c3ecd389c21a0e6751cc0431cb619b8db61f61c Mon Sep 17 00:00:00 2001
From: "Gao,Yan" <ygao@suse.com>
Date: Sat, 27 May 2023 10:47:17 +0200
Subject: [PATCH 6/6] Fix: controller: update node state correctly based on any
 existing node cache entry

Previously when controller was updating node state for a fencing result,
it'd search for any node cache entry purely by node name. But probably
an existing node cache entry didn't have an uname yet. Then
crm__get_peer_full() could not find it and would create yet another node
cache entry which didn't have the correct node state though.

In a bad situation, it could mistakenly assume a pending node that was
still a cluster member already fenced, for example SBD was not ready to
function on the peer node yet.

This commit resolves it by getting any existing node cache entry by node
uuid.
---
 daemons/controld/controld_fencing.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/daemons/controld/controld_fencing.c b/daemons/controld/controld_fencing.c
index 89cb61fa3..bfad0f252 100644
--- a/daemons/controld/controld_fencing.c
+++ b/daemons/controld/controld_fencing.c
@@ -218,8 +218,11 @@ send_stonith_update(pcmk__graph_action_t *action, const char *target,
     CRM_CHECK(target != NULL, return);
     CRM_CHECK(uuid != NULL, return);
 
-    /* Make sure the membership and join caches are accurate */
-    peer = crm_get_peer_full(0, target, CRM_GET_PEER_ANY);
+    /* Make sure the membership and join caches are accurate.
+     * Try getting any existing node cache entry also by node uuid in case it
+     * doesn't have an uname yet.
+     */
+    peer = pcmk__get_peer_full(0, target, uuid, CRM_GET_PEER_ANY);
 
     CRM_CHECK(peer != NULL, return);
 
-- 
2.35.3

openSUSE Build Service is sponsored by