From d77075a9b7dae73a3301680078fc8ac48caa9f85 Mon Sep 17 00:00:00 2001 From: TAKATSUKA Haruka Date: Thu, 25 Apr 2013 17:10:42 +0900 Subject: [PATCH] add parameters of command path and fix stop behavior. New parameters "pgpoolcmd", "psqlcmd" and "pcpnccmd" ware added. Stop operation came to wait till a process disappeared. --- ChangeLog | 4 +++ pgpool.in | 74 ++++++++++++++++++++++++++++++++++++++++--------------- 2 files changed, 58 insertions(+), 20 deletions(-) diff --git a/ChangeLog b/ChangeLog index 88684aa..2a45c5b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013/2/7 + * fix stop behavior + * add parameters: pgpoolcmd, psqlcmd, pcpnccmd + 2012/12/25 * fix logfile parameter * fix pgpooluser parameter meta-data description diff --git a/pgpool.in b/pgpool.in index 059ffd6..b218a80 100644 --- a/pgpool.in +++ b/pgpool.in @@ -1,8 +1,8 @@ #!/bin/bash # -# OCF Resource Agent for pgpool-II 2.0 +# OCF Resource Agent for pgpool-II 2.x # -# Copyright 2012 PgPool Global Development Group +# Copyright 2012-2013 PgPool Global Development Group # # Permission to use, copy, modify, and distribute this software and # its documentation for any purpose and without fee is hereby @@ -51,6 +51,8 @@ # (default: "-U postgres -h localhost -l -p 9999") # +VERSION=2.1 + ##### Source function library. : ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/resource.d/heartbeat} @@ -66,6 +68,9 @@ OCF_RESKEY_options_default="" OCF_RESKEY_pgpooluser_default="postgres" OCF_RESKEY_checkmethod_default="pid" OCF_RESKEY_checkstring_default="" +OCF_RESKEY_pgpoolcmd_default=@_PGPOOL_DIR_@/bin/pgpool +OCF_RESKEY_psqlcmd_default=@_PGSQL_DIR_@/bin/psql +OCF_RESKEY_pcpnccmd_default=@_PGPOOL_DIR_@/bin/pcp_node_count : ${OCF_RESKEY_pgpoolconf=${OCF_RESKEY_pgpoolconf_default}} : ${OCF_RESKEY_pcpconf=${OCF_RESKEY_pcpconf_default}} @@ -74,6 +79,9 @@ OCF_RESKEY_checkstring_default="" : ${OCF_RESKEY_options=${OCF_RESKEY_options_default}} : ${OCF_RESKEY_pgpooluser=${OCF_RESKEY_pgpooluser_default}} : ${OCF_RESKEY_checkmethod=${OCF_RESKEY_checkmethod_default}} +: ${OCF_RESKEY_pgpoolcmd=${OCF_RESKEY_pgpoolcmd_default}} +: ${OCF_RESKEY_psqlcmd=${OCF_RESKEY_psqlcmd_default}} +: ${OCF_RESKEY_pcpnccmd=${OCF_RESKEY_pcpnccmd_default}} if [ ! -e $OCF_RESKEY_pgpoolconf ]; then ocf_log warn "${OCF_RESOURCE_INSTANCE}: file '$OCF_RESKEY_pgpoolconf' (pgpoolconf) does not exists." @@ -95,15 +103,9 @@ else esac fi -###### Configured parameter - -PGPOOLCMD=@_PGPOOL_DIR_@/bin/pgpool -PSQLCMD=@_PGSQL_DIR_@/bin/psql -PCPNCCMD=@_PGPOOL_DIR_@/bin/pcp_node_count - -###### Build Start/Stop command +###### Build Start command -PGPOOL="$PGPOOLCMD -f $OCF_RESKEY_pgpoolconf" +PGPOOL="$OCF_RESKEY_pgpoolcmd -f $OCF_RESKEY_pgpoolconf" PGPOOL_START_ARG="" if [ "x$OCF_RESKEY_hbaconf" != 'x' ]; then @@ -153,7 +155,7 @@ do_monitor() { do_pcp_check() { - ocf_run -q $PCPNCCMD $OCF_RESKEY_checkstring + ocf_run -q $OCF_RESKEY_pcpnccmd $OCF_RESKEY_checkstring rc=$? if [ $rc -eq 0 ] then @@ -166,7 +168,7 @@ do_pcp_check() { do_psql_check() { - ocf_run -q $PSQLCMD $OCF_RESKEY_checkstring + ocf_run -q $OCF_RESKEY_psqlcmd $OCF_RESKEY_checkstring rc=$? if [ $rc -eq 0 ] then @@ -197,6 +199,7 @@ do_start() { return $OCF_SUCCESS } + do_stop() { if ! pidfile_process_exists_p then @@ -211,16 +214,23 @@ do_stop() { return $OCF_ERR_GENERIC fi + while pidfile_process_exists_p ; do + ocf_log debug "${OCF_RESOURCE_INSTANCE}: not stopped yet, waiting" + sleep 1 + done + return $OCF_SUCCESS } + do_reload() { su -c "$PGPOOL reload" return $OCF_SUCCESS } -# has side effect: kills zombie immediately -# dependency: /proc/PID/status file + +# - has side effect: kills zombie immediately +# - dependency: /proc/PID/status file # pidfile_process_exists_p() { if [ -f $PIDFILE ]; then @@ -233,7 +243,7 @@ pidfile_process_exists_p() { kill -QUIT $RPID return 1 else - return 0 + return 0 # ok, process exists fi else return 1 @@ -244,12 +254,13 @@ pidfile_process_exists_p() { fi } + do_metadata() { cat < - 2.0 + ${VERSION} This is an OCF Resource Agent for pgpool-II. @@ -319,11 +330,32 @@ when checkmetod="pid", this means pidfile path. when checkmetod="pcp", this means a parameter string for pcp_node_count. (e.g.) "10 localhost 9898 postgres pass" when checkmetod="psql", this means a parameter string for psql. - (e.g.) "-U postgres -h localhost -c 'SELECT 1' -p 9999" + (e.g.) "-U postgres -h localhost -l -p 9999" a parameter for monitoring method + + +pgpool command. + + + + + + +psql command. + + psql command + + + + +pcp_node_count command. + + pcp_node_count command + + @@ -338,11 +370,13 @@ EOF return $OCF_SUCCESS } + do_help() { echo "pgpool (start|stop|reload|monitor|meta-data|validate-all|help)" return $OCF_SUCCESS } + do_validate_all() { if [ "x$OCF_RESKEY_pgpoolconf" = "x" ] ; then return $OCF_ERR_CONFIGURED @@ -350,13 +384,13 @@ do_validate_all() { if [ ! -e $OCF_RESKEY_pgpoolconf ] ; then return $OCF_ERR_CONFIGURED fi - if [ ! -x $PGPOOLCMD ] ; then + if [ ! -x $OCF_RESKEY_pgpoolcmd ] ; then return $OCF_ERR_INSALLED fi - if [ ! -x $PSQLCMD -a $OCF_RESKEY_checkmethod = "psql" ] ; then + if [ ! -x $OCF_RESKEY_psqlcmd -a $OCF_RESKEY_checkmethod = "psql" ] ; then return $OCF_ERR_INSALLED fi - if [ ! -x $PCPNCCMD -a $OCF_RESKEY_checkmethod = "pcp" ] ; then + if [ ! -x $OCF_RESKEY_pcpnccmd -a $OCF_RESKEY_checkmethod = "pcp" ] ; then return $OCF_ERR_INSALLED fi if [ "x$PIDFILE" = "x" -a $OCF_RESKEY_checkmethod = "pid" ] -- 2.39.5