drbd-utils/bsc-1219263_crm-fence-peer.9.sh-fix-parsing-in_ccm-crmd-fields-o.patch
heming zhao e0172efba7 Accepting request 1159180 from home:gsu:branches:network:ha-clustering:Factory
- drbd failover timeout because of "fence-peer helper broken" (bsc#1219263)
  * bsc-1219263_crm-fence-peer.9.sh-fix-parsing-in_ccm-crmd-fields-o.patch
  * bsc-1219263_crm-fence-peer.9.sh-use-join-of-node_state-to-judge-.patch

OBS-URL: https://build.opensuse.org/request/show/1159180
OBS-URL: https://build.opensuse.org/package/show/network:ha-clustering:Factory/drbd-utils?expand=0&rev=138
2024-03-19 07:10:21 +00:00

65 lines
2.1 KiB
Diff

From 6d5cb4c97031f28ae70406145aa437b3107246e6 Mon Sep 17 00:00:00 2001
From: Su Yue <glass.su@suse.com>
Date: Sun, 3 Mar 2024 16:36:54 +0800
Subject: [PATCH 1/2] crm-fence-peer.9.sh: fix parsing in_ccm crmd fields of
node_state with Pacemaker 2.1.7
If pacemaker version < 2.1.7, in_ccm of node_state is "true" or "false"
and crmd is "online" or "offline".
pacemaker 2.1.7 changed the two fields into timestamps.
For in_ccm, the value is timestamp since when node has been a cluster
member("true"). A value 0 of means the node is not a cluster member("false").
For crmd, the value is timestamp since when peer has been online in
CPG("online"). A value 0 means the peer is offline in CPG("offline").
The original code doesn't handle these fields in timestamp format.
Since there are many comprare of strings in context, converting in_ccm and crmd
from timestamps/0 to old strings is simpler and clearer.
Link: https://github.com/ClusterLabs/pacemaker/blob/Pacemaker-2.1.7/lib/pengine/unpack.c#L1581
Signed-off-by: Su Yue <glass.su@suse.com>
---
scripts/crm-fence-peer.9.sh | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/scripts/crm-fence-peer.9.sh b/scripts/crm-fence-peer.9.sh
index 44da6516bf3f..a3353a7354a6 100755
--- a/scripts/crm-fence-peer.9.sh
+++ b/scripts/crm-fence-peer.9.sh
@@ -888,6 +888,31 @@ guess_if_pacemaker_will_fence()
esac
done
+ # Copied from pacemaker-2.1.7:lib/pengine/unpack.c:
+ # Since crm_feature_set 3.18.0 (pacemaker-2.1.7):
+ #
+ # - in_ccm ::= <timestamp>|0
+ # Since when node has been a cluster member. A value 0 of means the
+ # node is not a cluster member.
+ # - crmd ::= <timestamp>|0
+ # Since when peer has been online in CPG. A value 0 means the peer
+ # is offline in CPG.
+ if [[ $in_ccm =~ ^[0-9]+$ ]]; then
+ if [[ $in_ccm = "0" ]]; then
+ in_ccm="false"
+ else
+ in_ccm="true"
+ fi
+ fi
+
+ if [[ $crmd =~ ^[0-9]+$ ]]; then
+ if [[ $crmd = "0" ]]; then
+ crmd="offline"
+ else
+ crmd="online"
+ fi
+ fi
+
# if it is not enabled, no point in waiting for it.
if ! $stonith_enabled ; then
# "normalize" the rest of the logic
--
2.44.0