From a43075be72683e1d4ddab700ec16d667164d359c Mon Sep 17 00:00:00 2001 From: Kazutomo Nakahira Date: Mon, 25 Nov 2019 17:40:33 +0900 Subject: [PATCH 1/2] High: pgsql: Support for PostgreSQL 12 --- heartbeat/pgsql | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/heartbeat/pgsql b/heartbeat/pgsql index b1c070ead..5bc76cc4c 100755 --- a/heartbeat/pgsql +++ b/heartbeat/pgsql @@ -1612,12 +1612,24 @@ make_recovery_conf() { fi cat > $RECOVERY_CONF <> $RECOVERY_CONF <> $RECOVERY_CONF ocf_log debug "Created recovery.conf. host=${OCF_RESKEY_master_ip}, user=${OCF_RESKEY_repuser}" return 0 @@ -1835,6 +1847,7 @@ pgsql_validate_all() { local version local check_config_rc local rep_mode_string + local recovery_conf_string local socket_directories local rc @@ -1898,6 +1911,22 @@ pgsql_validate_all() { ocf_exit_reason "Replication mode needs PostgreSQL 9.1 or higher." return $OCF_ERR_INSTALLED fi + ocf_version_cmp "$version" "12" + rc=$? + if [ $rc -eq 1 ]||[ $rc -eq 2 ]; then + # change the standby method for PosrgreSQL 12 or later. + USE_STANDBY_SIGNAL=true + # change the path to recovery.conf because it cause PostgreSQL start error. + RECOVERY_CONF=${OCF_RESKEY_tmpdir}/recovery.conf + if [ $check_config_rc -eq 0 ]; then + # adding recovery parameters to postgresql.conf. + recovery_conf_string="include '$RECOVERY_CONF' # added by pgsql RA" + if ! grep -q "^[[:space:]]*$recovery_conf_string" $OCF_RESKEY_config; then + ocf_log info "adding include directive $recovery_conf_string into $OCF_RESKEY_config" + echo "$recovery_conf_string" >> $OCF_RESKEY_config + fi + fi + fi if [ ! -n "$OCF_RESKEY_master_ip" ]; then ocf_exit_reason "master_ip can't be empty." return $OCF_ERR_CONFIGURED @@ -2107,6 +2136,7 @@ RESOURCE_NAME=`echo $OCF_RESOURCE_INSTANCE | cut -d ":" -f 1` PGSQL_WAL_RECEIVER_STATUS_ATTR="${RESOURCE_NAME}-receiver-status" RECOVERY_CONF=${OCF_RESKEY_pgdata}/recovery.conf NODENAME=$(ocf_local_nodename | tr '[A-Z]' '[a-z]') +USE_STANDBY_SIGNAL=false case "$1" in methods) pgsql_methods From 5ab3339e8cb236583d375f5577f5a4dc129d5b27 Mon Sep 17 00:00:00 2001 From: munenari Date: Thu, 16 Jan 2020 09:27:59 +0900 Subject: [PATCH 2/2] Remove standby.signal when promote with restart --- heartbeat/pgsql | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/heartbeat/pgsql b/heartbeat/pgsql index 5bc76cc4c..d5baa7b35 100755 --- a/heartbeat/pgsql +++ b/heartbeat/pgsql @@ -720,7 +720,11 @@ pgsql_promote() { ocf_log info "Restarting PostgreSQL instead of promote." #stop : this function returns $OCF_SUCCESS only. pgsql_real_stop slave - rm -f $RECOVERY_CONF + if "${USE_STANDBY_SIGNAL}"; then + rm -f ${OCF_RESKEY_pgdata}/standby.signal + else + rm -f $RECOVERY_CONF + fi pgsql_real_start rc=$? if [ $rc -ne $OCF_RUNNING_MASTER ]; then