From bf9b2b6a3e059f7867ee1d4fe3b5ee0f1091c8ef Mon Sep 17 00:00:00 2001 From: AlmaLinux RelEng Bot Date: Mon, 11 May 2026 11:41:43 -0400 Subject: [PATCH] import Oracle_OSS resource-agents-4.16.0-22.el10_1.10 --- ...2stop-to-avoid-divergence-in-the-log.patch | 143 ++++++++++++++++++ resource-agents.spec | 9 +- 2 files changed, 151 insertions(+), 1 deletion(-) create mode 100644 RHEL-166745-db2-do-not-use-db2stop-to-avoid-divergence-in-the-log.patch diff --git a/RHEL-166745-db2-do-not-use-db2stop-to-avoid-divergence-in-the-log.patch b/RHEL-166745-db2-do-not-use-db2stop-to-avoid-divergence-in-the-log.patch new file mode 100644 index 0000000..0b0e0fa --- /dev/null +++ b/RHEL-166745-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/resource-agents.spec b/resource-agents.spec index b084a5b..dbf519d 100644 --- a/resource-agents.spec +++ b/resource-agents.spec @@ -45,7 +45,7 @@ Name: resource-agents Summary: Open Source HA Reusable Cluster Resource Scripts Version: 4.16.0 -Release: 22%{?rcver:%{rcver}}%{?numcomm:.%{numcomm}}%{?alphatag:.%{alphatag}}%{?dirty:.%{dirty}}%{?dist}.9 +Release: 22%{?rcver:%{rcver}}%{?numcomm:.%{numcomm}}%{?alphatag:.%{alphatag}}%{?dirty:.%{dirty}}%{?dist}.10 License: GPL-2.0-or-later AND LGPL-2.1-or-later URL: https://github.com/ClusterLabs/resource-agents Source0: %{upstream_prefix}-%{upstream_version}.tar.gz @@ -91,6 +91,7 @@ Patch38: RHEL-116197-1-ocf-shellfuncs-add-ocf_promotion_score.patch Patch39: RHEL-116197-2-portblock-add-promotable-support.patch Patch40: RHEL-116197-3-portblock-fixes-add-method-and-status_check-parameters.patch Patch41: RHEL-116197-4-portblock-check-inverse-action.patch +Patch42: RHEL-166745-db2-do-not-use-db2stop-to-avoid-divergence-in-the-log.patch # bundled ha-cloud-support libs Patch500: ha-cloud-support-aliyun.patch @@ -291,6 +292,7 @@ exit 1 %patch -p1 -P 39 %patch -p1 -P 40 %patch -p1 -P 41 +%patch -p1 -P 42 # bundled ha-cloud-support libs %patch -p1 -P 500 @@ -621,6 +623,11 @@ rm -rf %{buildroot}/usr/share/doc/resource-agents %{_usr}/lib/ocf/lib/heartbeat/OCF_*.pm %changelog +* Wed Apr 29 2026 Arslan Ahmad - 4.16.0-22.10 +- db2: do not use db2stop to avoid divergence in the log + + Resolves: RHEL-166745 + * Fri Feb 27 2026 Oyvind Albrigtsen - 4.16.0-22.9 - portblock: add promotable support, and method and status_check parameters