Blame SOURCES/bz2157872-4-exportfs-pgsql-validate-all-fixes.patch

2de1a8
From 81f9e1a04dfd2274ccb906310b4f191485e342ab Mon Sep 17 00:00:00 2001
2de1a8
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
2de1a8
Date: Wed, 11 Jan 2023 13:22:24 +0100
2de1a8
Subject: [PATCH 1/2] exportfs: move testdir() to start-action to avoid failing
2de1a8
 during resource creation (validate-all) and make it create the directory if
2de1a8
 it doesnt exist
2de1a8
2de1a8
---
2de1a8
 heartbeat/exportfs | 27 +++++++++++++++------------
2de1a8
 1 file changed, 15 insertions(+), 12 deletions(-)
2de1a8
2de1a8
diff --git a/heartbeat/exportfs b/heartbeat/exportfs
2de1a8
index c10777fa9..2307a9e67 100755
2de1a8
--- a/heartbeat/exportfs
2de1a8
+++ b/heartbeat/exportfs
2de1a8
@@ -301,6 +301,16 @@ exportfs_monitor ()
2de1a8
 	fi
2de1a8
 }
2de1a8
 
2de1a8
+testdir() {
2de1a8
+	if [ ! -d $1 ]; then
2de1a8
+		mkdir -p "$1"
2de1a8
+		if [ $? -ne 0 ]; then
2de1a8
+			ocf_exit_reason "Unable to create directory $1"
2de1a8
+			return 1
2de1a8
+		fi
2de1a8
+	fi
2de1a8
+	return 0
2de1a8
+}
2de1a8
 export_one() {
2de1a8
 	local dir=$1
2de1a8
 	local opts sep
2de1a8
@@ -331,6 +341,10 @@ export_one() {
2de1a8
 }
2de1a8
 exportfs_start ()
2de1a8
 {
2de1a8
+	if ! forall testdir; then
2de1a8
+		return $OCF_ERR_INSTALLED
2de1a8
+	fi
2de1a8
+
2de1a8
 	if exportfs_monitor; then
2de1a8
 		ocf_log debug "already exported"
2de1a8
 		return $OCF_SUCCESS
2de1a8
@@ -428,14 +442,6 @@ exportfs_stop ()
2de1a8
 	fi
2de1a8
 }
2de1a8
 
2de1a8
-testdir() {
2de1a8
-	if [ ! -d $1 ]; then
2de1a8
-		ocf_is_probe ||
2de1a8
-			ocf_log err "$1 does not exist or is not a directory"
2de1a8
-		return 1
2de1a8
-	fi
2de1a8
-	return 0
2de1a8
-}
2de1a8
 exportfs_validate_all ()
2de1a8
 {
2de1a8
 	if echo "$OCF_RESKEY_fsid" | grep -q -F ','; then
2de1a8
@@ -447,9 +453,6 @@ exportfs_validate_all ()
2de1a8
 		ocf_exit_reason "use integer fsid when exporting multiple directories"
2de1a8
 		return $OCF_ERR_CONFIGURED
2de1a8
 	fi
2de1a8
-	if ! forall testdir; then
2de1a8
-		return $OCF_ERR_INSTALLED
2de1a8
-	fi
2de1a8
 }
2de1a8
 
2de1a8
 for dir in $OCF_RESKEY_directory; do
2de1a8
@@ -466,7 +469,7 @@ for dir in $OCF_RESKEY_directory; do
2de1a8
 		fi
2de1a8
 	else
2de1a8
 		case "$__OCF_ACTION" in
2de1a8
-			stop|monitor)
2de1a8
+			stop|monitor|validate-all)
2de1a8
 				canonicalized_dir="$dir"
2de1a8
 				ocf_log debug "$dir does not exist"
2de1a8
 				;;
2de1a8
2de1a8
From 8ee41af82cda35149f8e0cfede6a8ddef3e221e1 Mon Sep 17 00:00:00 2001
2de1a8
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
2de1a8
Date: Wed, 11 Jan 2023 13:25:57 +0100
2de1a8
Subject: [PATCH 2/2] pgsql: dont run promotable and file checks that could be
2de1a8
 on shared storage during validate-all action
2de1a8
2de1a8
---
2de1a8
 heartbeat/pgsql | 53 +++++++++++++++++++++++++++++--------------------
2de1a8
 1 file changed, 32 insertions(+), 21 deletions(-)
2de1a8
2de1a8
diff --git a/heartbeat/pgsql b/heartbeat/pgsql
2de1a8
index aa8a13a84..532063ac5 100755
2de1a8
--- a/heartbeat/pgsql
2de1a8
+++ b/heartbeat/pgsql
2de1a8
@@ -1835,7 +1835,7 @@ check_config() {
2de1a8
 
2de1a8
     if [ ! -f "$1" ]; then
2de1a8
         if ocf_is_probe; then
2de1a8
-           ocf_log info "Configuration file is $1 not readable during probe."
2de1a8
+           ocf_log info "Unable to read $1 during probe."
2de1a8
            rc=1
2de1a8
         else
2de1a8
            ocf_exit_reason "Configuration file $1 doesn't exist"
2de1a8
@@ -1846,8 +1846,7 @@ check_config() {
2de1a8
     return $rc
2de1a8
 }
2de1a8
 
2de1a8
-# Validate most critical parameters
2de1a8
-pgsql_validate_all() {
2de1a8
+validate_ocf_check_level_10() {
2de1a8
     local version
2de1a8
     local check_config_rc
2de1a8
     local rep_mode_string
2de1a8
@@ -1883,12 +1882,6 @@ pgsql_validate_all() {
2de1a8
         fi
2de1a8
     fi
2de1a8
 
2de1a8
-    getent passwd $OCF_RESKEY_pgdba >/dev/null 2>&1
2de1a8
-    if [ ! $? -eq 0 ]; then
2de1a8
-        ocf_exit_reason "User $OCF_RESKEY_pgdba doesn't exist";
2de1a8
-        return $OCF_ERR_INSTALLED;
2de1a8
-    fi
2de1a8
-
2de1a8
     if ocf_is_probe; then
2de1a8
         ocf_log info "Don't check $OCF_RESKEY_pgdata during probe"
2de1a8
     else
2de1a8
@@ -1898,18 +1891,6 @@ pgsql_validate_all() {
2de1a8
         fi
2de1a8
     fi
2de1a8
 
2de1a8
-    if [ -n "$OCF_RESKEY_monitor_user" -a ! -n "$OCF_RESKEY_monitor_password" ]
2de1a8
-    then
2de1a8
-        ocf_exit_reason "monitor password can't be empty"
2de1a8
-        return $OCF_ERR_CONFIGURED
2de1a8
-    fi
2de1a8
-
2de1a8
-    if [ ! -n "$OCF_RESKEY_monitor_user" -a -n "$OCF_RESKEY_monitor_password" ]
2de1a8
-    then
2de1a8
-        ocf_exit_reason "monitor_user has to be set if monitor_password is set"
2de1a8
-        return $OCF_ERR_CONFIGURED
2de1a8
-    fi
2de1a8
-
2de1a8
     if is_replication || [ "$OCF_RESKEY_rep_mode" = "slave" ]; then
2de1a8
         if [ `printf "$version\n9.1" | sort -n | head -1` != "9.1" ]; then
2de1a8
             ocf_exit_reason "Replication mode needs PostgreSQL 9.1 or higher."
2de1a8
@@ -2027,6 +2008,35 @@ pgsql_validate_all() {
2de1a8
     return $OCF_SUCCESS
2de1a8
 }
2de1a8
 
2de1a8
+# Validate most critical parameters
2de1a8
+pgsql_validate_all() {
2de1a8
+    local rc
2de1a8
+
2de1a8
+    getent passwd $OCF_RESKEY_pgdba >/dev/null 2>&1
2de1a8
+    if [ ! $? -eq 0 ]; then
2de1a8
+        ocf_exit_reason "User $OCF_RESKEY_pgdba doesn't exist";
2de1a8
+        return $OCF_ERR_INSTALLED;
2de1a8
+    fi
2de1a8
+
2de1a8
+    if [ -n "$OCF_RESKEY_monitor_user" ] && [ -z "$OCF_RESKEY_monitor_password" ]; then
2de1a8
+        ocf_exit_reason "monitor password can't be empty"
2de1a8
+        return $OCF_ERR_CONFIGURED
2de1a8
+    fi
2de1a8
+
2de1a8
+    if [ -z "$OCF_RESKEY_monitor_user" ] && [ -n "$OCF_RESKEY_monitor_password" ]; then
2de1a8
+        ocf_exit_reason "monitor_user has to be set if monitor_password is set"
2de1a8
+        return $OCF_ERR_CONFIGURED
2de1a8
+    fi
2de1a8
+
2de1a8
+    if [ "$OCF_CHECK_LEVEL" -eq 10 ]; then
2de1a8
+        validate_ocf_check_level_10
2de1a8
+	rc=$?
2de1a8
+	[ $rc -ne "$OCF_SUCCESS" ] && exit $rc
2de1a8
+    fi
2de1a8
+
2de1a8
+    return $OCF_SUCCESS
2de1a8
+}
2de1a8
+
2de1a8
 
2de1a8
 #
2de1a8
 # Check if we need to create a log file
2de1a8
@@ -2163,6 +2173,7 @@ case "$1" in
2de1a8
                 exit $OCF_SUCCESS;;
2de1a8
 esac
2de1a8
 
2de1a8
+[ "$__OCF_ACTION" != "validate-all" ] && OCF_CHECK_LEVEL=10
2de1a8
 pgsql_validate_all
2de1a8
 rc=$?
2de1a8