From 573a8cc8dc02afeec12e053ad6bc15609886ed3a Mon Sep 17 00:00:00 2001 From: AlmaLinux RelEng Bot Date: Tue, 5 May 2026 07:03:46 -0400 Subject: [PATCH] import CS git resource-agents-4.9.0-54.el8_10.32 --- ...gration-when-promotion-is-successful.patch | 46 ++++++ SOURCES/RHEL-166181-1-db2-fix-bashism.patch | 32 ++++ ...2stop-to-avoid-divergence-in-the-log.patch | 143 ++++++++++++++++++ SPECS/resource-agents.spec | 18 ++- 4 files changed, 238 insertions(+), 1 deletion(-) create mode 100644 SOURCES/RHEL-153157-db2-set-reintegration-when-promotion-is-successful.patch create mode 100644 SOURCES/RHEL-166181-1-db2-fix-bashism.patch create mode 100644 SOURCES/RHEL-166181-2-db2-do-not-use-db2stop-to-avoid-divergence-in-the-log.patch diff --git a/SOURCES/RHEL-153157-db2-set-reintegration-when-promotion-is-successful.patch b/SOURCES/RHEL-153157-db2-set-reintegration-when-promotion-is-successful.patch new file mode 100644 index 0000000..56bc252 --- /dev/null +++ b/SOURCES/RHEL-153157-db2-set-reintegration-when-promotion-is-successful.patch @@ -0,0 +1,46 @@ +From 66885ea0227e847b571608015b150d391a6234d7 Mon Sep 17 00:00:00 2001 +From: Oyvind Albrigtsen +Date: Mon, 23 Feb 2026 13:35:58 +0100 +Subject: [PATCH] db2: set reintegration when promotion is successful + +--- + heartbeat/db2 | 19 +++++++++++++++++++ + 1 file changed, 19 insertions(+) + +diff --git a/heartbeat/db2 b/heartbeat/db2 +index 82f2f82c3..4420b9989 100755 +--- a/heartbeat/db2 ++++ b/heartbeat/db2 +@@ -955,6 +955,16 @@ db2_promote() { + PRIMARY/PEER/*|PRIMARY/REMOTE_CATCHUP/*|PRIMARY/REMOTE_CATCHUP_PENDING/CONNECTED|Primary/Peer) + # nothing to do, only update pacemaker's view + echo MASTER > $STATE_FILE ++ ++ if [ -n "$remote_host" ]; then ++ for db in $dblist ++ do ++ reint_attr="db2hadr-${inst1}_${inst2}_${db}_reint" ++ ocf_log debug "Promotion succeeded, setting $reint_attr = 1" ++ crm_attribute -n "$reint_attr" -N "$remote_host" -v "1" -l forever ++ done ++ fi ++ + return $OCF_SUCCESS + ;; + +@@ -981,6 +991,15 @@ db2_promote() { + # update pacemaker's view + echo MASTER > $STATE_FILE + ++ if [ -n "$remote_host" ]; then ++ for db in $dblist ++ do ++ reint_attr="db2hadr-${inst1}_${inst2}_${db}_reint" ++ ocf_log debug "Promotion succeeded, setting $reint_attr = 1" ++ crm_attribute -n "$reint_attr" -N "$remote_host" -v "1" -l forever ++ done ++ fi ++ + return $OCF_SUCCESS + fi + diff --git a/SOURCES/RHEL-166181-1-db2-fix-bashism.patch b/SOURCES/RHEL-166181-1-db2-fix-bashism.patch new file mode 100644 index 0000000..e2167a2 --- /dev/null +++ b/SOURCES/RHEL-166181-1-db2-fix-bashism.patch @@ -0,0 +1,32 @@ +From 3712b1f52bccddc767ad6f16ec67d6c8c29f1f71 Mon Sep 17 00:00:00 2001 +From: Valentin Vidic +Date: Sun, 3 Apr 2022 20:39:01 +0200 +Subject: [PATCH] db2: fix bashism + +dash only allows -a as AND operator. +--- + heartbeat/db2 | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/heartbeat/db2 b/heartbeat/db2 +index ea24d33fc8..4a4b2f477f 100755 +--- a/heartbeat/db2 ++++ b/heartbeat/db2 +@@ -407,7 +407,7 @@ db2_start() { + # partition is explicitly specified, activate without + # partition information. This allows db2 instances without + # partition support to be managed. +- if [ -z "$OCF_RESKEY_dbpartitionnum" ] && ! [ -a "$db2sql/db2nodes.cfg" ]; then ++ if [ -z "$OCF_RESKEY_dbpartitionnum" ] && ! [ -e "$db2sql/db2nodes.cfg" ]; then + start_opts="" + fi + +@@ -511,7 +511,7 @@ db2_stop_bg() { + + rc=$OCF_SUCCESS + +- if [ -z "$OCF_RESKEY_dbpartitionnum" ] && ! [ -a "$db2sql/db2nodes.cfg" ]; then ++ if [ -z "$OCF_RESKEY_dbpartitionnum" ] && ! [ -e "$db2sql/db2nodes.cfg" ]; then + stop_opts="" + fi + diff --git a/SOURCES/RHEL-166181-2-db2-do-not-use-db2stop-to-avoid-divergence-in-the-log.patch b/SOURCES/RHEL-166181-2-db2-do-not-use-db2stop-to-avoid-divergence-in-the-log.patch new file mode 100644 index 0000000..0b0e0fa --- /dev/null +++ b/SOURCES/RHEL-166181-2-db2-do-not-use-db2stop-to-avoid-divergence-in-the-log.patch @@ -0,0 +1,143 @@ +From 26c0d48bc69da1859f1ce5205a8bb6eaf6297b81 Mon Sep 17 00:00:00 2001 +From: Oyvind Albrigtsen +Date: Wed, 25 Mar 2026 10:46:09 +0100 +Subject: [PATCH] db2: do not use db2stop, as it sends truncation messages, + which in some cases are not delivered + +This caused divergence in the log, and the user would have to manually rebuild +the DB to recover from it. +--- + heartbeat/db2 | 104 +++++++------------------------------------------- + 1 file changed, 13 insertions(+), 91 deletions(-) + +diff --git a/heartbeat/db2 b/heartbeat/db2 +index 4420b9989..9de18639d 100755 +--- a/heartbeat/db2 ++++ b/heartbeat/db2 +@@ -596,45 +596,10 @@ db2_start() { + return $OCF_SUCCESS + } + +-# +-# helper function to be spawned +-# so we can detect a hang of the db2stop command +-# +-db2_stop_bg() { +- local rc output +- local stop_opts="dbpartitionnum $db2node" +- +- rc=$OCF_SUCCESS +- +- if [ -z "$OCF_RESKEY_dbpartitionnum" ] && ! [ -e "$db2sql/db2nodes.cfg" ]; then +- stop_opts="" +- fi +- +- if output=$(runasdb2 db2stop force $stop_opts) +- then +- ocf_log info "DB2 instance $instance($db2node) stopped: $output" +- else +- case $output in +- *SQL1032N*) +- #SQL1032N No start database manager command was issued +- ocf_log info "$output" +- ;; +- +- *) +- ocf_log err "DB2 instance $instance($db2node) stop failed: $output" +- rc=$OCF_ERR_GENERIC +- esac +- fi +- +- return $rc +-} +- + # + # Stop the given db2 database instance + # + db2_stop() { +- local stop_timeout grace_timeout stop_bg_pid i must_kill +- + # remove master score + master_score -D -l reboot + +@@ -647,67 +612,24 @@ db2_stop() { + return $OCF_SUCCESS + fi + +- stop_timeout=${OCF_RESKEY_CRM_meta_timeout:-20000} +- +- # grace_time is 4/5 (unit is ms) +- grace_timeout=$((stop_timeout/1250)) +- +- # start db2stop in background as this may hang +- db2_stop_bg & +- stop_bg_pid=$! +- +- # wait for grace_timeout +- i=0 +- while [ $i -lt $grace_timeout ] +- do +- kill -0 $stop_bg_pid 2>/dev/null || break; +- sleep 1 +- i=$((i+1)) +- done +- +- # collect exit status but don't hang +- if kill -0 $stop_bg_pid 2>/dev/null +- then +- stoprc=1 +- kill -9 $stop_bg_pid 2>/dev/null +- else +- wait $stop_bg_pid +- stoprc=$? +- fi +- +- must_kill=0 +- +- if [ $stoprc -ne 0 ] ++ # db2nkill kills *all* partitions on the node ++ if [ -x $db2bin/db2nkill ] + then +- ocf_log warn "DB2 instance $instance($db2node): db2stop failed, using db2nkill" +- must_kill=1 +- elif ! db2_instance_dead ++ logasdb2 $db2bin/db2nkill $db2node ++ elif [ -x $db2bin/db2_kill ] + then +- ocf_log warn "DB2 instance $instance($db2node): db2stop indicated success but there a still processes, using db2nkill" +- must_kill=1 ++ logasdb2 $db2bin/db2_kill + fi + +- if [ $must_kill -eq 1 ] +- then +- # db2nkill kills *all* partitions on the node +- if [ -x $db2bin/db2nkill ] +- then +- logasdb2 $db2bin/db2nkill $db2node +- elif [ -x $db2bin/db2_kill ] +- then +- logasdb2 $db2bin/db2_kill +- fi +- +- # loop forever (or lrmd kills us due to timeout) until the +- # instance is dead +- while ! db2_instance_dead +- do +- ocf_log info "DB2 instance $instance($db2node): waiting for processes to exit" +- sleep 1 +- done ++ # loop forever (or lrmd kills us due to timeout) until the ++ # instance is dead ++ while ! db2_instance_dead ++ do ++ ocf_log info "DB2 instance $instance($db2node): waiting for processes to exit" ++ sleep 1 ++ done + +- ocf_log info "DB2 instance $instance($db2node) is now dead" +- fi ++ ocf_log info "DB2 instance $instance($db2node) is now dead" + + return $OCF_SUCCESS + } diff --git a/SPECS/resource-agents.spec b/SPECS/resource-agents.spec index ca358a9..564e784 100644 --- a/SPECS/resource-agents.spec +++ b/SPECS/resource-agents.spec @@ -73,7 +73,7 @@ Name: resource-agents Summary: Open Source HA Reusable Cluster Resource Scripts Version: 4.9.0 -Release: 54%{?rcver:%{rcver}}%{?numcomm:.%{numcomm}}%{?alphatag:.%{alphatag}}%{?dirty:.%{dirty}}%{?dist}.30 +Release: 54%{?rcver:%{rcver}}%{?numcomm:.%{numcomm}}%{?alphatag:.%{alphatag}}%{?dirty:.%{dirty}}%{?dist}.32 License: GPLv2+ and LGPLv2+ URL: https://github.com/ClusterLabs/resource-agents %if 0%{?fedora} || 0%{?centos_version} || 0%{?rhel} @@ -182,6 +182,9 @@ Patch85: RHEL-124815-db2-fix-variable-name.patch Patch86: RHEL-102979-1-nfsserver-support-non-clustered-kerberized-mounts.patch Patch87: RHEL-102979-2-nfsserver-fix-error-message.patch Patch88: RHEL-152316-portblock-check-inverse-action.patch +Patch89: RHEL-153157-db2-set-reintegration-when-promotion-is-successful.patch +Patch90: RHEL-166181-1-db2-fix-bashism.patch +Patch91: RHEL-166181-2-db2-do-not-use-db2stop-to-avoid-divergence-in-the-log.patch # bundle patches Patch1000: 7-gcp-bundled.patch @@ -459,6 +462,9 @@ exit 1 %patch -p1 -P 86 %patch -p1 -P 87 %patch -p1 -P 88 +%patch -p1 -P 89 +%patch -p1 -P 90 +%patch -p1 -P 91 chmod 755 heartbeat/nova-compute-wait chmod 755 heartbeat/NovaEvacuate @@ -1055,6 +1061,16 @@ ccs_update_schema > /dev/null 2>&1 ||: %{_usr}/lib/ocf/lib/heartbeat/OCF_*.pm %changelog +* Fri Apr 10 2026 Oyvind Albrigtsen - 4.9.0-54.32 +- db2: do not use db2stop to avoid divergence in the log + + Resolves: RHEL-166181 + +* Thu Mar 19 2026 Oyvind Albrigtsen - 4.9.0-54.31 +- db2: set reintegration when promotion is successful + + Resolves: RHEL-153157 + * Fri Feb 27 2026 Oyvind Albrigtsen - 4.9.0-54.30 - portblock: check inverse action state file for non-promotable resources to avoid issues when doing e.g. block followed by unblock