Compare commits

..

No commits in common. "c10" and "c10-beta" have entirely different histories.

7 changed files with 79 additions and 357 deletions

2
.gitignore vendored
View File

@ -1,2 +1,2 @@
ClusterLabs-resource-agents-a6ccb93a.tar.gz
sap-hana-ha-919eda64.tar.gz
sap-hana-ha-87a5781.tar.gz

View File

@ -1,221 +0,0 @@
From b545ef462f4fe43c132fa37ebba80d26efb73d97 Mon Sep 17 00:00:00 2001
From: Janine Fuchs <jfuchs@redhat.com>
Date: Thu, 17 Jul 2025 19:52:23 +0200
Subject: [PATCH 1/2] enh(fencing): generic commands and options
Use pacemaker builtin commands for the fencing instead of cluster
shell specific commands. `sudo` is not required for the hacluster
user when using the pacemaker commands.
---
alert/SAPHanaSR-alert-fencing | 15 ++++++++++-----
tools/SAPHanaSR-hookHelper | 13 +++++++------
2 files changed, 17 insertions(+), 11 deletions(-)
diff --git a/alert/SAPHanaSR-alert-fencing b/alert/SAPHanaSR-alert-fencing
index 48a25ab8..a2d288cc 100755
--- a/alert/SAPHanaSR-alert-fencing
+++ b/alert/SAPHanaSR-alert-fencing
@@ -5,11 +5,17 @@
# Support: linux@sap.com
# License: GNU General Public License (GPL)
# Copyright: (c) 2024-2025 SUSE LLC
-# Version: 2025-07-30-17:50
+# Version: 2025-10-01-13:42
+#
+# Configure the alert with crmsh:
#
# crm configure alert nodes-1 "/usr/bin/SAPHanaSR-alert-fencing" select nodes
# crm configure alert fencing-1 "/usr/bin/SAPHanaSR-alert-fencing" select fencing attributes alert_uptime_threshold=300
#
+# Configure the alert with pcs:
+#
+# pcs alert create id=alert-hana-1 path=/usr/bin/SAPHanaSR-alert-fencing options alert_uptime_threshold=300
+# cibadmin --modify --scope alerts --xml-text '<alert id="alert-hana-1"> <select> <select_nodes /> <select_fencing /> </select> </alert>'
logger_tag="SAPHanaSR-alert-fencing"
logger="/usr/bin/logger"
@@ -41,11 +47,10 @@ function process_fencing()
if [[ "$local_site_name" != "" && "$fenced_site_name" == "$local_site_name" ]]; then
$logger -t "$logger_tag" "DEC: FENCE ($fenced_site_name == $local_site_name)"
sleep 10
- sudo /usr/sbin/crm --force node fence "${HOSTNAME}"; rc="$?"
- # alternative option, needs crmsh fix #1229030
- # /usr/sbin/crm_attribute -t status -n terminate -v true -N "${HOSTNAME}"; rc="$?"
+ /usr/sbin/crm_attribute -t status -N "${HOSTNAME}" -n terminate -v true
+ rc="$?"
if [[ "$rc" != "0" ]]; then
- $logger -t "$logger_tag" "ACT: sudo /usr/sbin/crm --force node fence ${HOSTNAME}; rc=$rc"
+ $logger -t "$logger_tag" "ACT: /usr/sbin/crm_attribute -t status -N \"${HOSTNAME}\" -n terminate -v true; rc=$?"
fi
else
$logger -t "$logger_tag" "DEC: NO FENCE ($fenced_site_name != $local_site_name)"
diff --git a/tools/SAPHanaSR-hookHelper b/tools/SAPHanaSR-hookHelper
index 006c5f04..ebf2af09 100755
--- a/tools/SAPHanaSR-hookHelper
+++ b/tools/SAPHanaSR-hookHelper
@@ -154,7 +154,7 @@ stopSystemAndWait() {
##### main
# variables
-version="202208091454"
+version="202510011251"
exe="$0"
cmd=$(basename "$exe")
@@ -252,15 +252,16 @@ case "$USECASE" in
;;
"fenceMe" )
nodeName=$(/usr/sbin/crm_node -n)
- #stonith_admin --reboot="$nodeName"
# only 'activate' the /root/SAPHanaSR-hookHelper.log logging, if really needed for debugging
#echo "$(date) SAPHanaSR-hookHelper fenceMe" >> /root/SAPHanaSR-hookHelper.log
su - "${ASID}adm" -c "HDB kill-9"
#echo "$(date) SAPHanaSR-hookHelper fenceMe - killed, now fence" >> /root/SAPHanaSR-hookHelper.log
- # alternative option
- # /usr/sbin/crm_attribute -t status -n terminate -v true -N "$nodeName"
- /usr/sbin/crm --force node fence "$nodeName"
- rc=42 # if fence is working this rc should never been send back
+ /usr/sbin/crm_attribute -t status -N "${nodeName}" -n terminate -v true
+ # Sleep until fencing takes us down or someone removes the 'terminate' attribute.
+ while [ "$(/usr/sbin/crm_attribute -t status -N "${nodeName}" -n terminate -G -d false -q)" == "true" ]; do
+ sleep 10
+ done
+ rc=42
;;
"firstStopThenKill" )
#
From 0d5860a12a0b2c9170ec90de5cb91d5d405c5a1b Mon Sep 17 00:00:00 2001
From: Janine Fuchs <105372097+ja9fuchs@users.noreply.github.com>
Date: Thu, 30 Oct 2025 13:41:38 +0100
Subject: [PATCH 2/2] fix(site lookup): different hostname and node name
- BUGFIX for the case when the cluster node name is different from the
hostname.
- Query the site attributes directly.
This removes the dependency on the cache file that is created by a
chain involving an optional resource and another tool, which also
uses CIB queries as its source.
The local host does not have to parse information for its own name.
- Commented out unused variable for clarity and possible future use.
---
alert/SAPHanaSR-alert-fencing | 67 ++++++++++++++---------------------
1 file changed, 26 insertions(+), 41 deletions(-)
diff --git a/alert/SAPHanaSR-alert-fencing b/alert/SAPHanaSR-alert-fencing
index a2d288cc..9a86452a 100755
--- a/alert/SAPHanaSR-alert-fencing
+++ b/alert/SAPHanaSR-alert-fencing
@@ -5,7 +5,7 @@
# Support: linux@sap.com
# License: GNU General Public License (GPL)
# Copyright: (c) 2024-2025 SUSE LLC
-# Version: 2025-10-01-13:42
+# Version: 2025-10-30-13:50
#
# Configure the alert with crmsh:
#
@@ -21,42 +21,37 @@ logger_tag="SAPHanaSR-alert-fencing"
logger="/usr/bin/logger"
# ON_FAIL_ACTION="${OCF_RESKEY_ON_FAIL_ACTION:-proceed}"
-CRM_alert_recipient="${CRM_alert_recipient:-/dev/null}"
+# CRM_alert_recipient="${CRM_alert_recipient:-/dev/null}"
crm_alert_kind="${CRM_alert_kind:-manual call}"
crm_alert_node="${CRM_alert_node:-$HOSTNAME}"
crm_alert_desc="${CRM_alert_desc:-no description provided}"
-cache_file="/run/crm/SAPHanaSR_site_cache"
-
alert_uptime_threshold="${alert_uptime_threshold:-300}"
+# Get the site name of the alerting node - value only
+fenced_site_name="$(crm_attribute --node "${crm_alert_node}" --query --pattern hana_..._site --quiet)"
+# Get the site name of the local cluster node - value only
+local_site_name="$(crm_attribute --type nodes --query --pattern hana_..._site --quiet)"
IFS=. read -r sys_uptime REST </proc/uptime
$logger -t "$logger_tag" "AH: begin event '$crm_alert_kind' (uptime=$sys_uptime, alert_uptime_threshold=$alert_uptime_threshold)"
function process_fencing()
{
- # SAPHanaSR_site_cache has format (each line) host:site_name
- # figure out fenced site
-
if [[ "$sys_uptime" -ge "$alert_uptime_threshold" ]]; then
- if [[ -e "$cache_file" ]]; then
- fenced_site_name=$(awk -F: '$1 == host { print $2 }' host="${crm_alert_node}" "$cache_file")
- local_site_name=$(awk -F: '$1 == host { print $2 }' host="${HOSTNAME}" "$cache_file")
- $logger -t "$logger_tag" "INFO: cache_file=$cache_file, crm_alert_node=$crm_alert_node"
- $logger -t "$logger_tag" "INFO: fenced_site_name=$fenced_site_name, local_site_name=$local_site_name"
- if [[ "$local_site_name" != "" && "$fenced_site_name" == "$local_site_name" ]]; then
- $logger -t "$logger_tag" "DEC: FENCE ($fenced_site_name == $local_site_name)"
- sleep 10
- /usr/sbin/crm_attribute -t status -N "${HOSTNAME}" -n terminate -v true
- rc="$?"
- if [[ "$rc" != "0" ]]; then
- $logger -t "$logger_tag" "ACT: /usr/sbin/crm_attribute -t status -N \"${HOSTNAME}\" -n terminate -v true; rc=$?"
- fi
- else
- $logger -t "$logger_tag" "DEC: NO FENCE ($fenced_site_name != $local_site_name)"
+ $logger -t "$logger_tag" "INFO: crm_alert_node=$crm_alert_node"
+ $logger -t "$logger_tag" "INFO: fenced_site_name=$fenced_site_name, local_site_name=$local_site_name"
+ if [[ "$local_site_name" != "" && "$fenced_site_name" == "$local_site_name" ]]; then
+ $logger -t "$logger_tag" "DEC: FENCE ($fenced_site_name == $local_site_name)"
+ # Delay the fencing action to write logs first
+ sleep 10
+ # Set the 'terminate' status attribute for the current node
+ /usr/sbin/crm_attribute -t status -n terminate -v true
+ rc="$?"
+ if [[ "$rc" != "0" ]]; then
+ $logger -t "$logger_tag" "ACT: /usr/sbin/crm_attribute -t status -n terminate -v true; rc=$rc"
fi
else
- $logger -t "$logger_tag" "DEC: NO FENCE (no cache)"
+ $logger -t "$logger_tag" "DEC: NO FENCE ($fenced_site_name != $local_site_name)"
fi
else
$logger -t "$logger_tag" "DEC: NO FENCE (uptime < alert_uptime_threshold)"
@@ -65,27 +60,17 @@ function process_fencing()
function check_fencing()
{
- # SAPHanaSR_site_cache has format (each line) host:site_name
- # figure out fenced site
-
- if [[ -e "$cache_file" ]]; then
- fenced_site_name=$(awk -F: '$1 == host { print $2 }' host="${crm_alert_node}" "$cache_file")
- local_site_name=$(awk -F: '$1 == host { print $2 }' host="${HOSTNAME}" "$cache_file")
- $logger -t "$logger_tag" "INFO: cache_file=$cache_file"
- $logger -t "$logger_tag" "INFO: fenced_site_name=$fenced_site_name, local_site_name=$local_site_name"
- if [[ "$local_site_name" != "" && "$fenced_site_name" == "$local_site_name" ]]; then
- $logger -t "$logger_tag" "DEC: FENCE ($fenced_site_name == $local_site_name)"
- else
- $logger -t "$logger_tag" "DEC: NO FENCE ($fenced_site_name != $local_site_name)"
- fi
- else
- $logger -t "$logger_tag" "DEC: NO FENCE (no cache)"
- fi
+ $logger -t "$logger_tag" "INFO: fenced_site_name=$fenced_site_name, local_site_name=$local_site_name"
+ if [[ "$local_site_name" != "" && "$fenced_site_name" == "$local_site_name" ]]; then
+ $logger -t "$logger_tag" "DEC: FENCE ($fenced_site_name == $local_site_name)"
+ else
+ $logger -t "$logger_tag" "DEC: NO FENCE ($fenced_site_name != $local_site_name)"
+ fi
}
case "$crm_alert_kind" in
node|nodes)
- msg="Node '${crm_alert_node}' is now '${crm_alert_desc}'"
+ msg="Node '${crm_alert_node}' is now '${crm_alert_desc}'"
$logger -t "$logger_tag" "INFO: $msg"
;;
fencing)
@@ -99,7 +84,7 @@ case "$crm_alert_kind" in
check_fencing
;;
*)
- msg="Unhandled '$crm_alert_kind' alert (${crm_alert_desc})"
+ msg="Unhandled '$crm_alert_kind' alert (${crm_alert_desc})"
$logger -t "$logger_tag" "INFO: $msg"
;;
esac

View File

@ -1,6 +1,6 @@
diff -up sap-hana-ha/ra/SAPHanaController.patch101 sap-hana-ha/ra/SAPHanaController
--- sap-hana-ha/ra/SAPHanaController.patch101 2025-10-10 09:14:45.000000000 +0200
+++ sap-hana-ha/ra/SAPHanaController 2025-10-31 10:49:48.166556256 +0100
--- sap-hana-ha/ra/SAPHanaController.patch101 2024-07-08 14:39:04.000000000 +0200
+++ sap-hana-ha/ra/SAPHanaController 2024-08-19 12:30:40.033351892 +0200
@@ -47,11 +47,11 @@ OCF_FUNCTIONS_DIR="${OCF_FUNCTIONS_DIR:-
source "${OCF_FUNCTIONS_DIR}/ocf-shellfuncs"
# TODO PRIO1: NG - adjust the correct path and file name for the library to be sourced for first testing use current directory
@ -17,8 +17,8 @@ diff -up sap-hana-ha/ra/SAPHanaController.patch101 sap-hana-ha/ra/SAPHanaControl
#
#######################################################################
diff -up sap-hana-ha/ra/saphana-filesystem-lib.patch101 sap-hana-ha/ra/saphana-filesystem-lib
--- sap-hana-ha/ra/saphana-filesystem-lib.patch101 2025-10-10 09:14:45.000000000 +0200
+++ sap-hana-ha/ra/saphana-filesystem-lib 2025-10-31 10:49:48.167686487 +0100
--- sap-hana-ha/ra/saphana-filesystem-lib.patch101 2024-07-08 14:39:04.000000000 +0200
+++ sap-hana-ha/ra/saphana-filesystem-lib 2024-08-19 12:30:40.034351894 +0200
@@ -109,7 +109,7 @@ until it gains success or migration-thre
</parameter>
<parameter name="DIRECTORY" unique="0" required="0">
@ -38,8 +38,8 @@ diff -up sap-hana-ha/ra/saphana-filesystem-lib.patch101 sap-hana-ha/ra/saphana-f
sid="${SID,,}"
export sidadm="${sid}adm"
diff -up sap-hana-ha/ra/SAPHanaFilesystem.patch101 sap-hana-ha/ra/SAPHanaFilesystem
--- sap-hana-ha/ra/SAPHanaFilesystem.patch101 2025-10-10 09:14:45.000000000 +0200
+++ sap-hana-ha/ra/SAPHanaFilesystem 2025-10-31 10:49:48.166993509 +0100
--- sap-hana-ha/ra/SAPHanaFilesystem.patch101 2024-07-08 14:39:04.000000000 +0200
+++ sap-hana-ha/ra/SAPHanaFilesystem 2024-08-19 12:30:40.033351892 +0200
@@ -31,11 +31,11 @@ OCF_FUNCTIONS_DIR="${OCF_FUNCTIONS_DIR:-
# shellcheck source=/dev/null
source "${OCF_FUNCTIONS_DIR}/ocf-shellfuncs"
@ -56,8 +56,8 @@ diff -up sap-hana-ha/ra/SAPHanaFilesystem.patch101 sap-hana-ha/ra/SAPHanaFilesys
#
#######################################################################
diff -up sap-hana-ha/ra/SAPHanaTopology.patch101 sap-hana-ha/ra/SAPHanaTopology
--- sap-hana-ha/ra/SAPHanaTopology.patch101 2025-10-10 09:14:45.000000000 +0200
+++ sap-hana-ha/ra/SAPHanaTopology 2025-10-31 10:49:48.167365080 +0100
--- sap-hana-ha/ra/SAPHanaTopology.patch101 2024-07-08 14:39:04.000000000 +0200
+++ sap-hana-ha/ra/SAPHanaTopology 2024-08-19 12:30:40.034351894 +0200
@@ -43,9 +43,9 @@ OCF_FUNCTIONS_DIR="${OCF_FUNCTIONS_DIR:-
source "${OCF_FUNCTIONS_DIR}/ocf-shellfuncs"
# TODO PRIO1: NG - adjust the correct path and file name for the library to be sourced for first testing use current directory

View File

@ -1,24 +1,6 @@
diff -up sap-hana-ha/srHook/global.ini_susChkSrv_fence.patch100 sap-hana-ha/srHook/global.ini_susChkSrv_fence
--- sap-hana-ha/srHook/global.ini_susChkSrv_fence.patch100 2025-10-10 09:14:45.000000000 +0200
+++ sap-hana-ha/srHook/global.ini_susChkSrv_fence 2025-10-31 10:49:48.091634162 +0100
@@ -1,10 +1,10 @@
-[ha_dr_provider_suschksrv]
-provider = susChkSrv
-path = /usr/share/SAPHanaSR-angi/
+[ha_dr_provider_chksrv]
+provider = ChkSrv
+path = /usr/share/sap-hana-ha/
execution_order = 3
action_on_lost = fence
stop_timeout = 25
[trace]
-ha_dr_suschksrv = info
+ha_dr_chksrv = info
diff -up sap-hana-ha/srHook/global.ini_susChkSrv.patch100 sap-hana-ha/srHook/global.ini_susChkSrv
--- sap-hana-ha/srHook/global.ini_susChkSrv.patch100 2025-10-10 09:14:45.000000000 +0200
+++ sap-hana-ha/srHook/global.ini_susChkSrv 2025-10-31 10:49:48.091138039 +0100
--- sap-hana-ha/srHook/global.ini_susChkSrv.patch100 2024-07-08 14:39:04.000000000 +0200
+++ sap-hana-ha/srHook/global.ini_susChkSrv 2024-08-19 12:30:39.985351798 +0200
@@ -1,10 +1,10 @@
-[ha_dr_provider_suschksrv]
-provider = susChkSrv
@ -35,10 +17,10 @@ diff -up sap-hana-ha/srHook/global.ini_susChkSrv.patch100 sap-hana-ha/srHook/glo
+ha_dr_chksrv = info
diff -up sap-hana-ha/srHook/global.ini_susCostOpt.patch100 sap-hana-ha/srHook/global.ini_susCostOpt
--- sap-hana-ha/srHook/global.ini_susCostOpt.patch100 2025-10-10 09:14:45.000000000 +0200
+++ sap-hana-ha/srHook/global.ini_susCostOpt 2025-10-31 10:49:48.092069643 +0100
--- sap-hana-ha/srHook/global.ini_susCostOpt.patch100 2024-07-08 14:39:04.000000000 +0200
+++ sap-hana-ha/srHook/global.ini_susCostOpt 2024-08-19 12:30:39.986351800 +0200
@@ -1,6 +1,6 @@
[ha_dr_provider_suscostopt]
[ha_dr_provider_susCostOpt]
provider = susCostOpt
-path = /usr/share/SAPHanaSR-angi
+path = /usr/share/sap-hana-ha
@ -46,13 +28,13 @@ diff -up sap-hana-ha/srHook/global.ini_susCostOpt.patch100 sap-hana-ha/srHook/gl
execution_order = 1
diff -up sap-hana-ha/srHook/global.ini_susHanaSR.patch100 sap-hana-ha/srHook/global.ini_susHanaSR
--- sap-hana-ha/srHook/global.ini_susHanaSR.patch100 2025-10-10 09:14:45.000000000 +0200
+++ sap-hana-ha/srHook/global.ini_susHanaSR 2025-10-31 10:49:48.092636040 +0100
--- sap-hana-ha/srHook/global.ini_susHanaSR.patch100 2024-07-08 14:39:04.000000000 +0200
+++ sap-hana-ha/srHook/global.ini_susHanaSR 2024-08-19 12:30:39.986351800 +0200
@@ -1,7 +1,7 @@
-[ha_dr_provider_sushanasr]
-[ha_dr_provider_susHanaSR]
-provider = susHanaSR
-path = /usr/share/SAPHanaSR-angi
+[ha_dr_provider_hanasr]
+[ha_dr_provider_HanaSR]
+provider = HanaSR
+path = /usr/share/sap-hana-ha
execution_order = 1
@ -61,26 +43,26 @@ diff -up sap-hana-ha/srHook/global.ini_susHanaSR.patch100 sap-hana-ha/srHook/glo
-ha_dr_sushanasr = info
+ha_dr_hanasr = info
diff -up sap-hana-ha/srHook/global.ini_susTkOver.patch100 sap-hana-ha/srHook/global.ini_susTkOver
--- sap-hana-ha/srHook/global.ini_susTkOver.patch100 2025-10-10 09:14:45.000000000 +0200
+++ sap-hana-ha/srHook/global.ini_susTkOver 2025-10-31 10:49:48.093003104 +0100
--- sap-hana-ha/srHook/global.ini_susTkOver.patch100 2024-07-08 14:39:04.000000000 +0200
+++ sap-hana-ha/srHook/global.ini_susTkOver 2024-08-19 12:30:39.987351802 +0200
@@ -1,9 +1,9 @@
-[ha_dr_provider_sustkover]
-[ha_dr_provider_susTkOver]
-provider = susTkOver
-path = /usr/share/SAPHanaSR-angi
-sustkover_timeout = 30
+[ha_dr_provider_tkover]
+[ha_dr_provider_TkOver]
+provider = TkOver
+path = /usr/share/sap-hana-ha
+tkover_timeout = 30
execution_order = 1
[trace]
-ha_dr_sustkover = info
+ha_dr_tkover = info
-ha_dr_susTkOver = info
+ha_dr_TkOver = info
diff -up sap-hana-ha/srHook/susChkSrv.py.patch100 sap-hana-ha/srHook/susChkSrv.py
--- sap-hana-ha/srHook/susChkSrv.py.patch100 2025-10-10 09:14:45.000000000 +0200
+++ sap-hana-ha/srHook/susChkSrv.py 2025-10-31 10:49:48.094003106 +0100
--- sap-hana-ha/srHook/susChkSrv.py.patch100 2024-07-08 14:39:04.000000000 +0200
+++ sap-hana-ha/srHook/susChkSrv.py 2024-08-19 12:30:39.989351806 +0200
@@ -1,15 +1,15 @@
# pylint: disable=invalid-name,fixme
"""
@ -156,8 +138,8 @@ diff -up sap-hana-ha/srHook/susChkSrv.py.patch100 sap-hana-ha/srHook/susChkSrv.p
"provider_version": "1.0"}
diff -up sap-hana-ha/srHook/susCostOpt.py.patch100 sap-hana-ha/srHook/susCostOpt.py
--- sap-hana-ha/srHook/susCostOpt.py.patch100 2025-10-10 09:14:45.000000000 +0200
+++ sap-hana-ha/srHook/susCostOpt.py 2025-10-31 10:49:48.095823583 +0100
--- sap-hana-ha/srHook/susCostOpt.py.patch100 2024-07-08 14:39:04.000000000 +0200
+++ sap-hana-ha/srHook/susCostOpt.py 2024-08-19 12:30:39.989351806 +0200
@@ -94,7 +94,7 @@ class susCostOpt(HADRBase):
self.tracer.info(f"{self.__class__.__name__}.{method}() version {FHSRHOOKVERSION}")
desc = ("postTakeover script to reset parameters to default or set parameters as"
@ -168,8 +150,8 @@ diff -up sap-hana-ha/srHook/susCostOpt.py.patch100 sap-hana-ha/srHook/susCostOpt
"provider_description": desc,
"provider_version": "1.0"}
diff -up sap-hana-ha/srHook/susHanaSrMultiTarget.py.to-be-integrated.patch100 sap-hana-ha/srHook/susHanaSrMultiTarget.py.to-be-integrated
--- sap-hana-ha/srHook/susHanaSrMultiTarget.py.to-be-integrated.patch100 2025-10-10 09:14:45.000000000 +0200
+++ sap-hana-ha/srHook/susHanaSrMultiTarget.py.to-be-integrated 2025-10-31 10:49:48.098003113 +0100
--- sap-hana-ha/srHook/susHanaSrMultiTarget.py.to-be-integrated.patch100 2024-07-08 14:39:04.000000000 +0200
+++ sap-hana-ha/srHook/susHanaSrMultiTarget.py.to-be-integrated 2024-08-19 12:30:39.992351812 +0200
@@ -100,7 +100,7 @@ try:
def about(self):
method = "about"
@ -180,8 +162,8 @@ diff -up sap-hana-ha/srHook/susHanaSrMultiTarget.py.to-be-integrated.patch100 sa
"provider_description": "Inform Cluster about SR state",
"provider_version": "1.0"}
diff -up sap-hana-ha/srHook/susHanaSR.py.patch100 sap-hana-ha/srHook/susHanaSR.py
--- sap-hana-ha/srHook/susHanaSR.py.patch100 2025-10-10 09:14:45.000000000 +0200
+++ sap-hana-ha/srHook/susHanaSR.py 2025-10-31 10:49:48.097101061 +0100
--- sap-hana-ha/srHook/susHanaSR.py.patch100 2024-07-08 14:39:04.000000000 +0200
+++ sap-hana-ha/srHook/susHanaSR.py 2024-08-19 12:30:39.990351808 +0200
@@ -17,9 +17,9 @@ import os
@ -245,8 +227,8 @@ diff -up sap-hana-ha/srHook/susHanaSR.py.patch100 sap-hana-ha/srHook/susHanaSR.p
f" SR status because of is_in_sync=True (reason={my_reason})")
my_srs = ""
diff -up sap-hana-ha/srHook/susTkOver.py.patch100 sap-hana-ha/srHook/susTkOver.py
--- sap-hana-ha/srHook/susTkOver.py.patch100 2025-10-10 09:14:45.000000000 +0200
+++ sap-hana-ha/srHook/susTkOver.py 2025-10-31 10:49:48.099003115 +0100
--- sap-hana-ha/srHook/susTkOver.py.patch100 2024-07-08 14:39:04.000000000 +0200
+++ sap-hana-ha/srHook/susTkOver.py 2024-08-19 12:30:39.994351816 +0200
@@ -5,17 +5,17 @@
# License: GNU General Public License (GPL)
# Copyright: (c) 2022 SUSE LLC

View File

@ -1,6 +1,6 @@
diff -up sap-hana-ha/tools/notes/query_hadr_providers.patch102 sap-hana-ha/tools/notes/query_hadr_providers
--- sap-hana-ha/tools/notes/query_hadr_providers.patch102 2025-10-10 09:14:45.000000000 +0200
+++ sap-hana-ha/tools/notes/query_hadr_providers 2025-10-31 10:49:48.209385734 +0100
--- sap-hana-ha/tools/notes/query_hadr_providers.patch102 2024-07-08 14:39:04.000000000 +0200
+++ sap-hana-ha/tools/notes/query_hadr_providers 2024-08-19 12:30:40.049351923 +0200
@@ -1,7 +1,7 @@
hdbsql -U TESTER 'select * from M_HA_DR_PROVIDERS
@ -12,8 +12,8 @@ diff -up sap-hana-ha/tools/notes/query_hadr_providers.patch102 sap-hana-ha/tools
# 2 rows selected (overall time 3161 usec; server time 329 usec)
diff -up sap-hana-ha/tools/SAPHanaSR-monitor-legacy.patch102 sap-hana-ha/tools/SAPHanaSR-monitor-legacy
--- sap-hana-ha/tools/SAPHanaSR-monitor-legacy.patch102 2025-10-10 09:14:45.000000000 +0200
+++ sap-hana-ha/tools/SAPHanaSR-monitor-legacy 2025-10-31 10:49:48.204003310 +0100
--- sap-hana-ha/tools/SAPHanaSR-monitor-legacy.patch102 2024-07-08 14:39:04.000000000 +0200
+++ sap-hana-ha/tools/SAPHanaSR-monitor-legacy 2024-08-19 12:30:40.048351921 +0200
@@ -14,7 +14,7 @@ use Sys::Syslog;
use Sys::Hostname;
use File::Path;
@ -24,8 +24,8 @@ diff -up sap-hana-ha/tools/SAPHanaSR-monitor-legacy.patch102 sap-hana-ha/tools/S
use SAPHanaSRTools;
diff -up sap-hana-ha/tools/SAPHanaSR-replay-archive-legacy.patch102 sap-hana-ha/tools/SAPHanaSR-replay-archive-legacy
--- sap-hana-ha/tools/SAPHanaSR-replay-archive-legacy.patch102 2025-10-10 09:14:45.000000000 +0200
+++ sap-hana-ha/tools/SAPHanaSR-replay-archive-legacy 2025-10-31 10:49:48.205956017 +0100
--- sap-hana-ha/tools/SAPHanaSR-replay-archive-legacy.patch102 2024-07-08 14:39:04.000000000 +0200
+++ sap-hana-ha/tools/SAPHanaSR-replay-archive-legacy 2024-08-19 12:30:40.048351921 +0200
@@ -179,7 +179,7 @@ if [ -n "$outDir" ]; then
mkdir -p "$outDir"
case "$format" in
@ -36,8 +36,8 @@ diff -up sap-hana-ha/tools/SAPHanaSR-replay-archive-legacy.patch102 sap-hana-ha/
esac
outNr=0
diff -up sap-hana-ha/tools/SAPHanaSR-replay-archive.patch102 sap-hana-ha/tools/SAPHanaSR-replay-archive
--- sap-hana-ha/tools/SAPHanaSR-replay-archive.patch102 2025-10-10 09:14:45.000000000 +0200
+++ sap-hana-ha/tools/SAPHanaSR-replay-archive 2025-10-31 10:49:48.205003312 +0100
--- sap-hana-ha/tools/SAPHanaSR-replay-archive.patch102 2024-07-08 14:39:04.000000000 +0200
+++ sap-hana-ha/tools/SAPHanaSR-replay-archive 2024-08-19 12:30:40.048351921 +0200
@@ -24,7 +24,7 @@ import os
import re
import sys
@ -48,8 +48,8 @@ diff -up sap-hana-ha/tools/SAPHanaSR-replay-archive.patch102 sap-hana-ha/tools/S
# pylint: enable=wrong-import-position
# pylint: enable=unused-import
diff -up sap-hana-ha/tools/SAPHanaSR-showAttr-legacy.patch102 sap-hana-ha/tools/SAPHanaSR-showAttr-legacy
--- sap-hana-ha/tools/SAPHanaSR-showAttr-legacy.patch102 2025-10-10 09:14:45.000000000 +0200
+++ sap-hana-ha/tools/SAPHanaSR-showAttr-legacy 2025-10-31 10:49:48.207047244 +0100
--- sap-hana-ha/tools/SAPHanaSR-showAttr-legacy.patch102 2024-07-08 14:39:04.000000000 +0200
+++ sap-hana-ha/tools/SAPHanaSR-showAttr-legacy 2024-08-19 12:30:40.049351923 +0200
@@ -17,7 +17,7 @@ use Sys::Syslog;
use Sys::Hostname;
use File::Path;
@ -60,11 +60,11 @@ diff -up sap-hana-ha/tools/SAPHanaSR-showAttr-legacy.patch102 sap-hana-ha/tools/
use SAPHanaSRTools;
diff -up sap-hana-ha/tools/SAPHanaSR-showAttr.patch102 sap-hana-ha/tools/SAPHanaSR-showAttr
--- sap-hana-ha/tools/SAPHanaSR-showAttr.patch102 2025-10-10 09:14:45.000000000 +0200
+++ sap-hana-ha/tools/SAPHanaSR-showAttr 2025-10-31 10:49:48.206466644 +0100
@@ -24,7 +24,7 @@ import re
--- sap-hana-ha/tools/SAPHanaSR-showAttr.patch102 2024-07-08 14:39:04.000000000 +0200
+++ sap-hana-ha/tools/SAPHanaSR-showAttr 2024-08-19 12:30:40.048351921 +0200
@@ -23,7 +23,7 @@ import os
import re
import sys
import datetime
from dateutil import parser as dateutil_parser
-sys.path.insert(1, '/usr/lib/SAPHanaSR-angi')
+sys.path.insert(1, '/usr/lib/sap-hana-ha')
@ -72,8 +72,8 @@ diff -up sap-hana-ha/tools/SAPHanaSR-showAttr.patch102 sap-hana-ha/tools/SAPHana
# pylint: enable=wrong-import-position
# pylint: enable=unused-import
diff -up sap-hana-ha/tools/SAPHanaSR-upgrade-to-angi-demo.patch102 sap-hana-ha/tools/SAPHanaSR-upgrade-to-angi-demo
--- sap-hana-ha/tools/SAPHanaSR-upgrade-to-angi-demo.patch102 2025-10-10 09:14:45.000000000 +0200
+++ sap-hana-ha/tools/SAPHanaSR-upgrade-to-angi-demo 2025-10-31 10:49:48.208003317 +0100
--- sap-hana-ha/tools/SAPHanaSR-upgrade-to-angi-demo.patch102 2024-07-08 14:39:04.000000000 +0200
+++ sap-hana-ha/tools/SAPHanaSR-upgrade-to-angi-demo 2024-08-19 12:30:40.049351923 +0200
@@ -20,7 +20,7 @@ TMP=/run/"$EXE"."$RANDOM"
TIMEST=$(date +%s)
ALL_RC=0
@ -83,16 +83,16 @@ diff -up sap-hana-ha/tools/SAPHanaSR-upgrade-to-angi-demo.patch102 sap-hana-ha/t
CIB_MSTTMP_ANG="#
primitive rsc_SAPHanaCon_@@sid@@_HDB@@ino@@ ocf:suse:SAPHanaController \
op start interval=0 timeout=3600 \
@@ -81,7 +81,7 @@ function init-variables() {
@@ -80,7 +80,7 @@ function init-variables() {
cibadmin -Ql > "$BAKDIR"/cib.xml || exit 1
SCRIPT=/root/bin/"$EXE"
RPMOLD="SAPHanaSR"
RPMDOC="SAPHanaSR-doc"
- RPMNEW="SAPHanaSR-angi"
+ RPMNEW="sap-hana-ha"
SID=$(/usr/sap/hostctrl/exe/saphostctrl -function ListInstances |\
awk '{print $4}')
INO=$(/usr/sap/hostctrl/exe/saphostctrl -function ListInstances |\
@@ -247,7 +247,7 @@ function del-srhook-local-classic() {
@@ -246,7 +246,7 @@ function del-srhook-local-classic() {
[ $DRYRUN = no ] && grep "^\[ha_dr_provider_" $GLBINI
echo
grep "^\[ha_dr_provider_" $GLBINI |
@ -101,7 +101,7 @@ diff -up sap-hana-ha/tools/SAPHanaSR-upgrade-to-angi-demo.patch102 sap-hana-ha/t
while read; do
P=${REPLY:15}
echo "su - $sidadm -c \"/usr/sbin/SAPHanaSR-manageProvider --sid=$SID --show --provider=$P\" > $TMP.global.ini.$P"
@@ -285,9 +285,9 @@ function add-srhook-local-angi() {
@@ -284,9 +284,9 @@ function add-srhook-local-angi() {
EXE=$(basename $0)
source /run/$EXE.variables
[ -z $sid ] && sid=${SID,,}
@ -114,7 +114,7 @@ diff -up sap-hana-ha/tools/SAPHanaSR-upgrade-to-angi-demo.patch102 sap-hana-ha/t
done
echo "su - $sidadm -c \"hdbnsutil -reloadHADRProviders\""
[ $DRYRUN = no ] && su - $sidadm -c "hdbnsutil -reloadHADRProviders"
@@ -295,7 +295,7 @@ function add-srhook-local-angi() {
@@ -294,7 +294,7 @@ function add-srhook-local-angi() {
[ $DRYRUN = no ] && grep -A2 "^\[ha_dr_provider_" $GLBINI
echo
grep "^\[ha_dr_provider_" $GLBINI |
@ -123,7 +123,7 @@ diff -up sap-hana-ha/tools/SAPHanaSR-upgrade-to-angi-demo.patch102 sap-hana-ha/t
while read; do
P=${REPLY:15}
echo "su - $sidadm -c \"/usr/bin/SAPHanaSR-manageProvider --sid=$SID --show --provider=${P}\""
@@ -453,7 +453,7 @@ function f_install-rpm-angi() {
@@ -452,7 +452,7 @@ function f_install-rpm-angi() {
echo "crm cluster run \"zypper --non-interactive in -l -f -y '${RPMNEW}'\""
[ $DRYRUN = no ] && crm cluster run "zypper --non-interactive in \
-l -f -y '${RPMNEW}'"

View File

@ -13,8 +13,7 @@
#
# Use a specified version as HEAD if needed, e.g. "v4.14.0"
#
# # Source0: ClusterLabs-resource-agents
#
# # Source0:
# git checkout <version tag>
# TAG=$(git log --pretty="format:%h" -n 1)
# distdir="ClusterLabs-resource-agents-${TAG}"
@ -22,35 +21,23 @@
# rm -rf $TARFILE $distdir
# git archive --prefix=$distdir/ HEAD | gzip > $TARFILE
#
# # Source1: SAP resource
# # Source1:
#
# 1) The script to generate a new source file from the SAPHanaSR
# upstream git repo.
#
# cd ~/<git path>/SAPHanaSR/
# git switch main
# TAG=$(git log --pretty="format:%h" -n 1)
# distdir="sap-hana-ha-${TAG}"
# TARFILE="${distdir}.tar.gz"
# rm -rf $TARFILE $distdir
# git archive --prefix=$distdir/ HEAD | gzip > $TARFILE
# cp $TARFILE ~/<package path>/
# git switch main
# TAG=$(git log --pretty="format:%h" -n 1)
# distdir="sap-hana-ha-${TAG}"
# TARFILE="${distdir}.tar.gz"
# rm -rf $TARFILE $distdir
# git archive --prefix=$distdir/ HEAD | gzip > $TARFILE
#
# 2) Update sources with pattern replacements.
# Run ONCE and include the patches. Only re-run if patch conflicts
# Run ONCE and include the patches. Only re-run if patch conflictcs
# appeared and were solved.
#
# #%%autopatch... to disable it for a clean unpacked source
# centpkg prep
# cd sap-hana-ha-<build>/Clusterlabs-...<tag>
# sh -x ../../create-rename-patches.sh
# cp patterns-*.patch ../../
# # enable autopatch again
#
# 3) Verify that the patches can be applied in a clean source.
#
# rm -rf sap-hana-ha-<build>
# centpkg prep
# sh -x ./create-rename-patches.sh
#
# Always carefully review the results of the patches, there is no
# automatic check elsewhere!
@ -60,7 +47,7 @@
# Use %%{name}
# %%global name sap-hana-ha
%global saphana_hash 919eda64
%global saphana_hash 87a5781
# Whether this platform defaults to using systemd as an init system
# (needs to be evaluated prior to BuildRequires being enumerated and
@ -84,20 +71,17 @@
Name: sap-hana-ha
Summary: Cluster resource HA for SAP HANA in System Replication
Version: 1.2.12
Release: 1%{?rcver:%{rcver}}%{?numcomm:.%{numcomm}}%{?alphatag:.%{alphatag}}%{?dirty:.%{dirty}}%{?dist}.1
Version: 1.2.8
Release: 3%{?rcver:%{rcver}}%{?numcomm:.%{numcomm}}%{?alphatag:.%{alphatag}}%{?dirty:.%{dirty}}%{?dist}
License: GPLv2+
URL: https://github.com/SUSE/SAPHanaSR
Source0: %{upstream_prefix}-%{upstream_version}.tar.gz
Source1: %{name}-%{saphana_hash}.tar.gz
# Unpackaged source, but we need it for the pattern replacement patch creation.
# Unpackaged source, just to make sure centpkg keeps it.
Source2: create-rename-patches.sh
# Upstream PR: https://github.com/SUSE/SAPHanaSR/pull/291
Patch01: 0001-feat-simplified-fencing-and-site-lookup.patch
# Patches that will always be needed for fixing some names and patterns
# that are Suse specific in the upstream source.
# Patches that will always be needed.
# Other patches: handle conflicts if diff lines overlap
Patch100: patterns-srHook-files.patch
Patch101: patterns-ra-files.patch
Patch102: patterns-tools-files.patch
@ -152,18 +136,15 @@ environment.
%prep
# Unpack the Clusterlabs source first. This is used during the build
# to generate man pages from the agents automatically.
# Unpack the Clusterlabs source
%setup -q -n %{upstream_prefix}-%{upstream_version}
%setup -q -T -D -a 1 -n %{upstream_prefix}-%{upstream_version}
# Rename the unpacked SAP dir to strip the suffix off.
mv %{name}-%{saphana_hash} %{name}
# Go into the SAP dir that contains our code.
cd %{name}
# Apply patches.
%autopatch -p1
# Apply the patches that fix some names and patterns
%autopatch -p0
# Fail if there are patterns found after patching.
# Recreate the patches if the source files changed.
@ -178,7 +159,7 @@ grep -r \
-e "sushanasr" \
-e "SAPHanaSR-angi" \
-e "suse_SAPHanaFilesystem" \
tools/ srHook/ ra/ && {
%{name}/tools/ %{name}/srHook/ %{name}/ra/ && {
echo -e "\v>>> CHECK FAILED: Patterns found after patching. Fix the patches.\v"
exit 1
} || echo "CHECK PASSED: No unpatched patterns found"
@ -189,9 +170,6 @@ grep -r \
### The files are moved temporarily to places, adjusted to work at compilation time,
### but the package will use the files from their original path of the SAP package source.
# Leave the SAP dir
cd ..
# Copy the agents and libs to the heartbeat dir for the ClusterLabs included processing.
# Keep them in the original place! They are used for the package.
cp %{name}/ra/SAP* heartbeat
@ -296,10 +274,8 @@ install -m 0444 %{name}/srHook/global.ini_susChkSrv %{buildroot}/%{_datadir}/%{n
# Scripts for some add-on functionality.
# saphana_sr_tools is a lib imported by SAPHanaSR-* python scripts.
install -m 0755 %{name}/alert/SAPHanaSR-alert-fencing %{buildroot}%{_bindir}
install -m 0755 %{name}/tools/SAPHanaSR-hookHelper %{buildroot}%{_bindir}
install -m 0755 %{name}/tools/SAPHanaSR-showAttr %{buildroot}%{_bindir}
install -m 0644 %{name}/tools/saphana_sr_tools.py %{buildroot}%{_usr}/lib/%{name}
install -m 0555 %{name}/tools/SAPHanaSR-showAttr %{buildroot}%{_bindir}
install -m 0444 %{name}/tools/saphana_sr_tools.py %{buildroot}%{_usr}/lib/%{name}
## tree fixup
# remove docs (there is only one and they should come from doc sections in files)
@ -332,21 +308,6 @@ rm -rf %{buildroot}/usr/share/doc/resource-agents
%exclude /usr/src
%changelog
* Mon Nov 10 2025 Janine Fuchs <jfuchs@redhat.com> - 1.2.12-1.1
- Rebase to 1.2.12 with patch for simplified fencing features and site name lookup bugfix.
Resolves: RHEL-125159
* Wed Aug 13 2025 Janine Fuchs <jfuchs@redhat.com> - 1.2.10-1
- Rebase to 1.2.10 and include fencing scripts.
Resolves: RHEL-104394
* Fri Jun 06 2025 Janine Fuchs <jfuchs@redhat.com> - 1.2.8-4
- Fix dashes in hostname.
Resolves: RHEL-84348
* Fri Jan 17 2025 Janine Fuchs <jfuchs@redhat.com> - 1.2.8-3
- Include man pages.

View File

@ -1,2 +1,2 @@
SHA512 (ClusterLabs-resource-agents-a6ccb93a.tar.gz) = 3ea92f051f16efbd0845d193cc7d2e7d8e9f66ba8e2bbba3a7b8d093ceff3103f8077b93037067dee8962a7d5c1ad0a0b5642acbaf385b0619cef96f18928911
SHA512 (sap-hana-ha-919eda64.tar.gz) = b71da43ef61fac19160b318175c91841c1d41bed40e87509a1712b6713a87ea060af436154f8014b7836aa520057afc3c7c91ebda81b9373b50aebae7430e87f
SHA512 (sap-hana-ha-87a5781.tar.gz) = b772906a774b4eb0b29b2fafb289ecc410329eea7425e93814477a61a9d4b1a3971010d9eab7d38769555c2e66c29fb2e9df3117f11d43d8677537965966b07d