SAPInstance,SAPStartSrv: fix systemd and monitor op

- SAPInstance: fix systemd list-unit-files causing high load
- SAPStartSrv: remove misleading default monitor operation

  Resolves: RHEL-250800
This commit is contained in:
Janine Fuchs 2026-09-01 10:03:27 +02:00
parent e107a8e096
commit 2e3928bd59
No known key found for this signature in database
4 changed files with 129 additions and 13 deletions

View File

@ -0,0 +1,21 @@
commit 408f14e82ba1f45ff071c48ac42d8a05d2bf4511
Author: Fabian Herschel <fabian.herschel@suse.com>
Date: Wed Aug 26 14:04:06 2026 +0200
SAPInstance - fix-issue-2209 - list-unit-files creates high load on systemd
diff --git a/heartbeat/SAPInstance b/heartbeat/SAPInstance
index 95140e9c..b3f4be91 100755
--- a/heartbeat/SAPInstance
+++ b/heartbeat/SAPInstance
@@ -457,8 +457,8 @@ check_systemd_integration() {
local rc=1
if which "$SYSTEMCTL" 1>/dev/null 2>/dev/null; then
- if $SYSTEMCTL list-unit-files | \
- awk '$1 == service { found=1 } END { if (! found) {exit 1}}' service="${systemd_unit_name}.service"; then
+ # use list-unit-files with expected unit-file to limit systemd load; this also allows to use the return-code of systemctl
+ if $SYSTEMCTL list-unit-files "${systemd_unit_name}.service" >/dev/null ; then
rc=0
else
rc=1

View File

@ -0,0 +1,30 @@
commit 74adf6fe8899742de30968fedb5b9e24c50c1cdb
Author: Fabian Herschel <fabian.herschel@suse.com>
Date: Fri Aug 7 08:59:41 2026 +0200
ra/SAPStartSrv.in - removed misleading interval-value for the monitor-operation; monitor-method: move init to probe-only to save time for regular monitors (even if should be avoided)
diff --git a/ra/SAPStartSrv.in b/ra/SAPStartSrv.in
index 3aa34d9..125718a 100644
--- a/ra/SAPStartSrv.in
+++ b/ra/SAPStartSrv.in
@@ -356,8 +356,8 @@ class SapStartSrv(object):
'''
Is the sapstartsrv server process running?
'''
- self._inititialize()
if ocf.is_probe():
+ self._inititialize()
if self._get_status() == 0:
return ocf.OCF_SUCCESS
@@ -433,8 +433,7 @@ def main():
sapstartsrv_agent.add_action(name='start', timeout=60, handler=sapstartsrv_instance.start)
sapstartsrv_agent.add_action(name='stop', timeout=60, handler=sapstartsrv_instance.stop)
sapstartsrv_agent.add_action(name='status', timeout=60, handler=sapstartsrv_instance.status)
- sapstartsrv_agent.add_action(
- name='monitor', timeout=20, interval=120, handler=sapstartsrv_instance.monitor)
+ sapstartsrv_agent.add_action(name='monitor', timeout=20, handler=sapstartsrv_instance.monitor)
sapstartsrv_agent.add_action(
name='validate-all', timeout=5, handler=sapstartsrv_instance.validate)

View File

@ -14,7 +14,7 @@
#
# Use a specified version as HEAD if needed, e.g. "v4.14.0"
#
# # Source0:
# # Source0: https://github.com/ClusterLabs/resource-agents
# git checkout <version tag>
# TAG=$(git log --pretty="format:%h" -n 1)
# distdir="ClusterLabs-resource-agents-${TAG}"
@ -22,7 +22,7 @@
# rm -rf $TARFILE $distdir
# git archive --prefix=$distdir/ HEAD | gzip > $TARFILE
#
# # Source1:
# # Source1: https://github.com/SUSE/SAPStartSrv-resourceAgent
# git checkout <version tag>
# TAG=$(git log --pretty="format:%h" -n 1)
# distdir="SAPStartSrv-resourceAgent-${TAG}"
@ -60,12 +60,15 @@
Name: resource-agents-sap
Summary: SAP cluster resource agents
Version: 4.15.1
Release: 1%{?rcver:%{rcver}}%{?numcomm:.%{numcomm}}%{?alphatag:.%{alphatag}}%{?dirty:.%{dirty}}%{?dist}
Release: 2%{?rcver:%{rcver}}%{?numcomm:.%{numcomm}}%{?alphatag:.%{alphatag}}%{?dirty:.%{dirty}}%{?dist}
License: GPLv2+
URL: https://github.com/ClusterLabs/resource-agents
Source0: %{upstream_prefix}-%{upstream_version}.tar.gz
Source1: %{sapstart_prefix}-%{sapstart_version}.tar.gz
Patch0: RHEL-250800-SAPInstance-list-unit-files-creates-high-load-on-systemd.patch
Patch1: RHEL-250800-SAPStartSrv-remove-misleading-monitor-operation.patch
BuildArch: noarch
# Build dependencies
@ -116,6 +119,9 @@ SAP instances to be managed in a cluster environment.
%setup -q -n %{upstream_prefix}-%{upstream_version}
%setup -q -T -D -a 1 -n %{upstream_prefix}-%{upstream_version}
%patch -p1 -P 0
%patch -p1 -P 1 -d %{sapstart_prefix}-%{sapstart_version}
# Move the agent to the others for the ClusterLabs included processing.
mv %{sapstart_prefix}-%{sapstart_version}/ra/SAPStartSrv.in heartbeat
@ -240,6 +246,12 @@ rm -rf %{buildroot}/usr/share/doc/resource-agents
%exclude /usr/src
%changelog
* Tue Sep 01 2026 Janine Fuchs <jfuchs@redhat.com> - 4.15.1-2
- SAPInstance: fix systemd list-unit-files causing high load
- SAPStartSrv: remove misleading default monitor operation
Resolves: RHEL-250800
* Fri Jan 10 2025 Janine Fuchs <jfuchs@redhat.com> - 4.15.1-1
- Add resource agent SAPStartSrv.
Resolves: RHEL-2294

View File

@ -2,15 +2,68 @@
err=0
agents=$(pcs resource list ocf:heartbeat 2>&1)
if [ $(echo "$agents" | wc -l) -lt 2 ]; then
echo "ERROR: pcs: agents available:\n$agents"
err=$((err+1))
else
echo "INFO: pcs: agents available..."
fi
printf "\n" # readability
if [ $err -ge 1 ]; then
echo -e "\nERROR: $err tests FAILED..."
exit 1
list_resources() {
# Verify that 3 SAP* agents are present.
printf "Checking resource agents... "
num="3"
agents=$(pcs resource list ocf:heartbeat:SAP --nodesc)
if [ "$(echo "${agents}" | wc -l)" != "${num}" ]; then
printf "FAILED\n"
printf "ERROR: %s matching pcs agents expected, but found:\n%s\n" "${num}" "${agents}"
err=$((err+1))
else
printf "SUCCESS\n"
printf "%s matching pcs agents found:\n%s\n" "${num}" "${agents}"
fi
printf "\n" # readability
}
check_bins() {
# Verify that binaries are working.
for bin in \
"/usr/bin/sapservices-move -h"
do
printf "Testing '%s'... " "${bin}"
output=$(${bin} 2>&1)
rc=$?
if [ "${rc}" -gt 0 ]; then
printf "FAILED\n"
printf "ERROR: %s\n" "${output}"
err=$((err+1))
else
printf "SUCCESS\n"
fi
done
printf "\n" # readability
}
check_services() {
# Verify that the services exist. They are not loaded by design (rc=3).
for service in \
sapping.service \
sappong.service
do
printf "Testing '%s'... " "${service}"
output=$(systemctl status ${service} 2>&1)
rc=$?
if [ "${rc}" -gt 3 ]; then
printf "FAILED\n"
printf "ERROR: %s\n" "${output}"
err=$((err+1))
else
printf "SUCCESS\n"
fi
done
printf "\n" # readability
}
list_resources
check_bins
check_services
if [ "${err}" -gt 0 ]; then
printf "ERROR: %s tests FAILED...\n" "${err}"
exit 1
fi