add parameters of command path and fix stop behavior. PGPOOL_HA_2_1
authorTAKATSUKA Haruka <harukat@sraoss.co.jp>
Thu, 25 Apr 2013 08:10:42 +0000 (17:10 +0900)
committerTAKATSUKA Haruka <harukat@sraoss.co.jp>
Thu, 25 Apr 2013 08:10:42 +0000 (17:10 +0900)
New parameters "pgpoolcmd", "psqlcmd" and "pcpnccmd" ware added.
Stop operation came to wait till a process disappeared.

ChangeLog
pgpool.in

index 88684aa729965cfc3401b52a3bce1affd55ab849..2a45c5b70a27357362039b0c01385967c4d17024 100644 (file)
--- 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
index 059ffd604d0e3b2034cd1369dcfbc517d7a1060e..b218a80d3fcf1ecbdb6c3dca0d108c53e5413ca5 100644 (file)
--- 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 <<EOF
 <?xml version="1.0"?>
 <!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd">
 <resource-agent name="pgpool">
- <version>2.0</version>
+ <version>${VERSION}</version>
  <longdesc lang="en">
 This is an OCF Resource Agent for pgpool-II.
  </longdesc>
@@ -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"
    </longdesc>
    <shortdesc lang="en">a parameter for monitoring method</shortdesc>
    <content type="string" default="$OCF_RESKEY_checkstring_default" />
   </parameter>
+  <parameter name="pgpoolcmd" unique="0" required="0">
+   <longdesc lang="en">
+pgpool command.
+   </longdesc>
+   <shortdesc lang="en"></shortdesc>
+   <content type="string" default="$OCF_RESKEY_pgpoolcmd_default" />
+  </parameter>
+  <parameter name="psqlcmd" unique="0" required="0">
+   <longdesc lang="en">
+psql command.
+   </longdesc>
+   <shortdesc lang="en">psql command</shortdesc>
+   <content type="string" default="$OCF_RESKEY_psqlcmd_default" />
+  </parameter>
+  <parameter name="pcpnccmd" unique="0" required="0">
+   <longdesc lang="en">
+pcp_node_count command.
+   </longdesc>
+   <shortdesc lang="en">pcp_node_count command</shortdesc>
+   <content type="string" default="$OCF_RESKEY_pcpnccmd_default" />
+  </parameter>
  </parameters>
  <actions>
   <action name="start" timeout="20" />
@@ -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" ]