Add new arguments in pgpool_recovery function and failover_command/failback_command...
authorBo Peng <pengbo@sraoss.co.jp>
Thu, 8 Aug 2019 00:45:00 +0000 (09:45 +0900)
committerBo Peng <pengbo@sraoss.co.jp>
Thu, 8 Aug 2019 00:45:00 +0000 (09:45 +0900)
Now able to use "recovery node port number" in pgpool_recovery function.
Also the following options is added in failover_command/failback_command/follow_master_command.

- %N = old primary node hostname
- %S = old primary node port number

21 files changed:
doc.ja/src/sgml/failover.sgml
doc.ja/src/sgml/online-recovery.sgml
doc/src/sgml/failover.sgml
doc/src/sgml/online-recovery.sgml
src/Makefile.am
src/Makefile.in
src/main/pgpool_main.c
src/pcp_con/recovery.c
src/pgpool.spec
src/sample/pgpool.conf.sample
src/sample/pgpool.conf.sample-logical
src/sample/pgpool.conf.sample-master-slave
src/sample/pgpool.conf.sample-replication
src/sample/pgpool.conf.sample-stream
src/sql/pgpool-recovery/Makefile
src/sql/pgpool-recovery/pgpool-recovery.c
src/sql/pgpool-recovery/pgpool_recovery--1.1--1.2.sql
src/sql/pgpool-recovery/pgpool_recovery--1.2--1.3.sql [new file with mode: 0644]
src/sql/pgpool-recovery/pgpool_recovery--1.2.sql
src/sql/pgpool-recovery/pgpool_recovery--1.3.sql [new file with mode: 0644]
src/sql/pgpool-recovery/pgpool_recovery.control

index 13f5151c54042ee3e9d43b6f796783ae340b7fe3..a188ed8aab09e6622073d6918574ec431b65f8f2 100644 (file)
 -->
                 <entry>ๆ–ฐใ—ใ„ใƒžใ‚นใ‚ฟใƒผใƒŽใƒผใƒ‰ใฎใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใ‚ฏใƒฉใ‚นใ‚ฟใƒ‘ใ‚น</entry>
               </row>
+              <row>
+                <entry>%N</entry>
+<!--
+                <entry>Hostname of the old primary node</entry>
+-->
+                <entry>ๅคใ„ใƒ—ใƒฉใ‚คใƒžใƒชใƒŽใƒผใƒ‰ใฎใƒ›ใ‚นใƒˆๅ(<productname>Pgpool-II</productname> 4.1ไปฅ้™)</entry>
+              </row>
+              <row>
+                <entry>%S</entry>
+<!--
+                <entry>Port number of the old primary node</entry>
+-->
+                <entry>ๅคใ„ใƒ—ใƒฉใ‚คใƒžใƒชใƒŽใƒผใƒ‰ใฎใƒใƒผใƒˆ็•ชๅท(<productname>Pgpool-II</productname> 4.1ไปฅ้™)</entry>
+              </row>
               <row>
                 <entry>%%</entry>
 <!--
@@ -357,6 +371,20 @@ failover_commandใฎๅฎŒๅ…จใชไพ‹ใŒ<xref linkend="example-cluster">ใซใ‚ใ‚Šใพ
 -->
                 <entry>ๆ–ฐใ—ใ„ใƒžใ‚นใ‚ฟใƒผใƒŽใƒผใƒ‰ใฎใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใ‚ฏใƒฉใ‚นใ‚ฟใƒ‘ใ‚น</entry>
               </row>
+              <row>
+                <entry>%N</entry>
+<!--
+                <entry>Hostname of the old primary node</entry>
+-->
+                <entry>ๅคใ„ใƒ—ใƒฉใ‚คใƒžใƒชใƒŽใƒผใƒ‰ใฎใƒ›ใ‚นใƒˆๅ(<productname>Pgpool-II</productname> 4.1ไปฅ้™)</entry>
+              </row>
+              <row>
+                <entry>%S</entry>
+<!--
+                <entry>Port number of the old primary node</entry>
+-->
+                <entry>ๅคใ„ใƒ—ใƒฉใ‚คใƒžใƒชใƒŽใƒผใƒ‰ใฎใƒใƒผใƒˆ็•ชๅท(<productname>Pgpool-II</productname> 4.1ไปฅ้™)</entry>
+              </row>
               <row>
                 <entry>%%</entry>
 <!--
@@ -541,6 +569,20 @@ if (we need to executed follow master command)
 -->
                 <entry>ๆ–ฐใ—ใ„ใƒ—ใƒฉใ‚คใƒžใƒชใƒŽใƒผใƒ‰ใฎใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใ‚ฏใƒฉใ‚นใ‚ฟใƒ‘ใ‚น</entry>
               </row>
+              <row>
+                <entry>%N</entry>
+<!--
+                <entry>Hostname of the old primary node</entry>
+-->
+                <entry>ๅคใ„ใƒ—ใƒฉใ‚คใƒžใƒชใƒŽใƒผใƒ‰ใฎใƒ›ใ‚นใƒˆๅ(<productname>Pgpool-II</productname> 4.1ไปฅ้™)</entry>
+              </row>
+              <row>
+                <entry>%S</entry>
+<!--
+                <entry>Port number of the old primary node</entry>
+-->
+                <entry>ๅคใ„ใƒ—ใƒฉใ‚คใƒžใƒชใƒŽใƒผใƒ‰ใฎใƒใƒผใƒˆ็•ชๅท(<productname>Pgpool-II</productname> 4.1ไปฅ้™)</entry>
+              </row>
               <row>
                 <entry>%%</entry>
 <!--
index 1376996c938b9f7d0f0d17dfa2bbeaa401327eab..c9129821be521bdafe60468ae5480099880da74a 100644 (file)
@@ -398,6 +398,14 @@ postmasterใฎ่ตทๅ‹•๏ผˆ<literal>pgpool_remote_start</literal>ใฎๅฎŸๆ–ฝ๏ผ‰
 ใƒชใ‚ซใƒใƒชใ•ใ‚Œใ‚‹ใƒŽใƒผใƒ‰ใฎ็•ชๅท๏ผˆ<productname>Pgpool-II</productname> 4.0ไปฅ้™๏ผ‰
             </para>
           </listitem>
+          <listitem>
+            <para>
+<!--
+              Port number to be recovered (<productname>Pgpool-II</productname> 4.1 or after)
+-->
+ใƒชใ‚ซใƒใƒชใ•ใ‚Œใ‚‹ใƒŽใƒผใƒ‰ใฎใƒใƒผใƒˆ็•ชๅท๏ผˆ<productname>Pgpool-II</productname> 4.1ไปฅ้™๏ผ‰
+            </para>
+          </listitem>
         </itemizedlist>
 
         <note>
index 765db4dd94d9ec51887d1da48b76e78210b83621..c14110f60c7fcc4292a26678d3492c3eba0b8ff3 100644 (file)
               </row>
               <row>
                 <entry>%m</entry>
-                <entry>        New master node ID</entry>
+                <entry>New master node ID</entry>
               </row>
               <row>
                 <entry>%H</entry>
               </row>
               <row>
                 <entry>%P</entry>
-                <entry>        Old primary node ID</entry>
+                <entry>Old primary node ID</entry>
               </row>
               <row>
                 <entry>%r</entry>
                 <entry>%R</entry>
                 <entry>Database cluster directory of the new master node</entry>
               </row>
+              <row>
+                <entry>%N</entry>
+                <entry>Hostname of the old primary node (<productname>Pgpool-II</productname> 4.1 or after)</entry>
+              </row>
+              <row>
+                <entry>%S</entry>
+                <entry>Port number of the old primary node (<productname>Pgpool-II</productname> 4.1 or after)</entry>
+              </row>
               <row>
                 <entry>%%</entry>
                 <entry>        '%' character</entry>
                 <entry>%R</entry>
                 <entry>Database cluster directory of the new master node</entry>
               </row>
+              <row>
+                <entry>%N</entry>
+                <entry>Hostname of the old primary node (<productname>Pgpool-II</productname> 4.1 or after)</entry>
+              </row>
+              <row>
+                <entry>%S</entry>
+                <entry>Port number of the old primary node (<productname>Pgpool-II</productname> 4.1 or after)</entry>
+              </row>
               <row>
                 <entry>%%</entry>
                 <entry>        '%' character</entry>
@@ -427,6 +443,14 @@ if (we need to executed follow master command)
                 <entry>%R</entry>
                 <entry>Database cluster directory of the new primary node</entry>
               </row>
+              <row>
+                <entry>%N</entry>
+                <entry>Hostname of the old primary node (<productname>Pgpool-II</productname> 4.1 or after)</entry>
+              </row>
+              <row>
+                <entry>%S</entry>
+                <entry>Port number of the old primary node (<productname>Pgpool-II</productname> 4.1 or after)</entry>
+              </row>
               <row>
                 <entry>%%</entry>
                 <entry>        '%' character</entry>
index 045a3e373d54a33b183dc55e1eb0a5e30019ef4e..133dce5b5a6bd1a9b54d668f1bd901476de3cd19 100644 (file)
               Node number to be recovered (<productname>Pgpool-II</productname> 4.0 or after)
             </para>
           </listitem>
+          <listitem>
+            <para>
+              Port number to be recovered (<productname>Pgpool-II</productname> 4.1 or after)
+            </para>
+          </listitem>
         </itemizedlist>
 
         <note>
index 4f7e36a41387fd5b6a556edb038dcfdbc81b5775..7eb11db418e86e322315e819cc266548beec22e0 100644 (file)
@@ -100,6 +100,8 @@ EXTRA_DIST = sample/pgpool.pam \
                sql/pgpool-recovery/pgpool-recovery.c \
                sql/pgpool-recovery/pgpool-recovery.sql.in \
                sql/pgpool-recovery/uninstall_pgpool-recovery.sql \
+               sql/pgpool-recovery/pgpool_recovery--1.3.sql \
+               sql/pgpool-recovery/pgpool_recovery--1.2--1.3.sql \
                sql/pgpool-recovery/pgpool_recovery--1.2.sql \
                sql/pgpool-recovery/pgpool_recovery--1.1--1.2.sql \
                sql/pgpool-recovery/pgpool_recovery--1.1.sql \
index ee1a7f6442ea0c0e2488382a40e3e16d1ec0051b..8f3635d782d7311e47e946dbec1e163f508ff8ca 100644 (file)
@@ -517,6 +517,8 @@ EXTRA_DIST = sample/pgpool.pam \
                sql/pgpool-recovery/pgpool-recovery.c \
                sql/pgpool-recovery/pgpool-recovery.sql.in \
                sql/pgpool-recovery/uninstall_pgpool-recovery.sql \
+               sql/pgpool-recovery/pgpool_recovery--1.3.sql \
+               sql/pgpool-recovery/pgpool_recovery--1.2--1.3.sql \
                sql/pgpool-recovery/pgpool_recovery--1.2.sql \
                sql/pgpool-recovery/pgpool_recovery--1.1--1.2.sql \
                sql/pgpool-recovery/pgpool_recovery--1.1.sql \
index bdf10109dddc5f681ce14d28e9ef2dc754aeaa15..371aa69cf6818151bdea1083241e35754db488e0 100644 (file)
@@ -2980,6 +2980,7 @@ trigger_failover_command(int node, const char *command_line,
        char            buf[2];
        BackendInfo *info;
        BackendInfo *newmaster;
+       BackendInfo *oldprimary;
 
        if (command_line == NULL || (strlen(command_line) == 0))
                return 0;
@@ -3068,6 +3069,17 @@ trigger_failover_command(int node, const char *command_line,
                                                string_append_char(exec_cmd, port_buf);
                                                break;
 
+                                       case 'N':       /* old primary host name */
+                                               oldprimary = pool_get_node_info(old_primary);
+                                               string_append_char(exec_cmd, oldprimary->backend_hostname);
+                                               break;
+
+                                       case 'S':       /* old primary port */
+                                               oldprimary = pool_get_node_info(old_primary);
+                                               snprintf(port_buf, sizeof(port_buf), "%d", oldprimary->backend_port);
+                                               string_append_char(exec_cmd, port_buf);
+                                               break;
+
                                        case '%':       /* escape */
                                                string_append_char(exec_cmd, "%");
                                                break;
index 7668cf39de6620f1c9de937925e3bc47291b317e..11597af2be4478031faf4a7b43b8b6c58f4a8b15 100644 (file)
@@ -255,12 +255,13 @@ exec_recovery(PGconn *conn, BackendInfo * master_backend, BackendInfo * recovery
         */
        snprintf(recovery_command,
                         sizeof(recovery_command),
-                        "SELECT pgpool_recovery('%s', '%s', '%s', '%d', %d)",
+                        "SELECT pgpool_recovery('%s', '%s', '%s', '%d', %d, '%d')",
                         script,
                         hostname,
                         recovery_backend->backend_data_directory,
                         master_backend->backend_port,
-                        recovery_node
+                        recovery_node,
+                        recovery_backend->backend_port
                );
 
        ereport(LOG,
index bacb5417c256e40e77afa1976dc036673101f49f..5dade9d3fb1cf12043997b295ea6b477762e5cb5 100644 (file)
@@ -261,6 +261,8 @@ fi
 %{pghome}/share/extension/pgpool_recovery--1.1.sql
 %{pghome}/share/extension/pgpool_recovery--1.2.sql
 %{pghome}/share/extension/pgpool_recovery--1.1--1.2.sql
+%{pghome}/share/extension/pgpool_recovery--1.3.sql
+%{pghome}/share/extension/pgpool_recovery--1.2--1.3.sql
 %{pghome}/share/extension/pgpool_recovery.control
 %{pghome}/lib/pgpool-recovery.so
 %{pghome}/share/extension/pgpool_adm--1.0.sql
index 65d016fd6d889cdbc0bc7183f6169b386deaacfa..897868fabd08b0a1df12a864bbdeb508b98d6d58 100644 (file)
@@ -44,9 +44,9 @@ serialize_accept = off
                                    # whether to serialize accept() call to avoid thundering herd problem
                                    # (change requires restart)
 reserved_connections = 0
-                                  # Number of reserved connections.
-                                  # Pgpool-II does not accept connections if over
-                                  # num_init_chidlren - reserved_connections.
+                                   # Number of reserved connections.
+                                   # Pgpool-II does not accept connections if over
+                                   # num_init_chidlren - reserved_connections.
 
 # - pgpool Communication Manager Connection Settings -
 
@@ -76,7 +76,7 @@ backend_data_directory0 = '/var/lib/pgsql/data'
 backend_flag0 = 'ALLOW_TO_FAILOVER'
                                    # Controls various backend behavior
                                    # ALLOW_TO_FAILOVER, DISALLOW_TO_FAILOVER
-                                  # or ALWAYS_MASTER
+                                   # or ALWAYS_MASTER
 backend_application_name0 = 'server0'
                                    # walsender's application_name, used for "show pool_nodes" command
 #backend_hostname1 = 'host2'
@@ -401,16 +401,18 @@ delay_threshold = 0
 follow_master_command = ''
                                    # Executes this command after master failover
                                    # Special values:
-                                   #   %d = node id
-                                   #   %h = host name
-                                   #   %p = port number
-                                   #   %D = database cluster path
+                                   #   %d = failed node id
+                                   #   %h = failed node host name
+                                   #   %p = failed node port number
+                                   #   %D = failed node database cluster path
                                    #   %m = new master node id
-                                   #   %H = hostname of the new master node
+                                   #   %H = new master node hostname
                                    #   %M = old master node id
                                    #   %P = old primary node id
                                    #   %r = new master port number
                                    #   %R = new master database cluster path
+                                   #   %N = old primary node hostname
+                                   #   %S = old primary node port number
                                    #   %% = '%' character
 
 #------------------------------------------------------------------------------
@@ -463,30 +465,34 @@ connect_timeout = 10000
 failover_command = ''
                                    # Executes this command at failover
                                    # Special values:
-                                   #   %d = node id
-                                   #   %h = host name
-                                   #   %p = port number
-                                   #   %D = database cluster path
+                                   #   %d = failed node id
+                                   #   %h = failed node host name
+                                   #   %p = failed node port number
+                                   #   %D = failed node database cluster path
                                    #   %m = new master node id
-                                   #   %H = hostname of the new master node
+                                   #   %H = new master node hostname
                                    #   %M = old master node id
                                    #   %P = old primary node id
                                    #   %r = new master port number
                                    #   %R = new master database cluster path
+                                   #   %N = old primary node hostname
+                                   #   %S = old primary node port number
                                    #   %% = '%' character
 failback_command = ''
                                    # Executes this command at failback.
                                    # Special values:
-                                   #   %d = node id
-                                   #   %h = host name
-                                   #   %p = port number
-                                   #   %D = database cluster path
+                                   #   %d = failed node id
+                                   #   %h = failed node host name
+                                   #   %p = failed node port number
+                                   #   %D = failed node database cluster path
                                    #   %m = new master node id
-                                   #   %H = hostname of the new master node
+                                   #   %H = new master node hostname
                                    #   %M = old master node id
                                    #   %P = old primary node id
                                    #   %r = new master port number
                                    #   %R = new master database cluster path
+                                   #   %N = old primary node hostname
+                                   #   %S = old primary node port number
                                    #   %% = '%' character
 
 failover_on_backend_error = on
@@ -769,8 +775,8 @@ enable_shared_relcache = off
                                    # Default is off.
                                    # (change requires restart)
 
-relcache_query_target = master    # Target node to send relcache queries. Default is master (primary) node.
-                                  # If load_balance_node is specified, queries will be sent to load balance node.
+relcache_query_target = master     # Target node to send relcache queries. Default is master (primary) node.
+                                   # If load_balance_node is specified, queries will be sent to load balance node.
 #------------------------------------------------------------------------------
 # IN MEMORY QUERY MEMORY CACHE
 #------------------------------------------------------------------------------
index 8f6caa900a6dbdfc514e57ee7ea0277c53b2217b..7d3100ee8657f4fdda7df1680f5cb0f49e17e738 100644 (file)
@@ -386,16 +386,18 @@ delay_threshold = 10000000
 follow_master_command = ''
                                    # Executes this command after master failover
                                    # Special values:
-                                   #   %d = node id
-                                   #   %h = host name
-                                   #   %p = port number
-                                   #   %D = database cluster path
+                                   #   %d = failed node id
+                                   #   %h = failed node host name
+                                   #   %p = failed node port number
+                                   #   %D = failed node database cluster path
                                    #   %m = new master node id
-                                   #   %H = hostname of the new master node
+                                   #   %H = new master node hostname
                                    #   %M = old master node id
                                    #   %P = old primary node id
                                    #   %r = new master port number
                                    #   %R = new master database cluster path
+                                   #   %N = old primary node hostname
+                                   #   %S = old primary node port number
                                    #   %% = '%' character
 
 #------------------------------------------------------------------------------
@@ -447,30 +449,34 @@ connect_timeout = 10000
 failover_command = ''
                                    # Executes this command at failover
                                    # Special values:
-                                   #   %d = node id
-                                   #   %h = host name
-                                   #   %p = port number
-                                   #   %D = database cluster path
+                                   #   %d = failed node id
+                                   #   %h = failed node host name
+                                   #   %p = failed node port number
+                                   #   %D = failed node database cluster path
                                    #   %m = new master node id
-                                   #   %H = hostname of the new master node
+                                   #   %H = new master node hostname
                                    #   %M = old master node id
                                    #   %P = old primary node id
                                    #   %r = new master port number
                                    #   %R = new master database cluster path
+                                   #   %N = old primary node hostname
+                                   #   %S = old primary node port number
                                    #   %% = '%' character
 failback_command = ''
                                    # Executes this command at failback.
                                    # Special values:
-                                   #   %d = node id
-                                   #   %h = host name
-                                   #   %p = port number
-                                   #   %D = database cluster path
+                                   #   %d = failed node id
+                                   #   %h = failed node host name
+                                   #   %p = failed node port number
+                                   #   %D = failed node database cluster path
                                    #   %m = new master node id
-                                   #   %H = hostname of the new master node
+                                   #   %H = new master node hostname
                                    #   %M = old master node id
                                    #   %P = old primary node id
                                    #   %r = new master port number
                                    #   %R = new master database cluster path
+                                   #   %N = old primary node hostname
+                                   #   %S = old primary node port number
                                    #   %% = '%' character
 
 failover_on_backend_error = on
@@ -746,8 +752,8 @@ enable_shared_relcache = off
                                    # Default is off.
                                    # (change requires restart)
 
-relcache_query_target = master    # Target node to send relcache queries. Default is master (primary) node.
-                                  # If load_balance_node is specified, queries will be sent to load balance node.
+relcache_query_target = master     # Target node to send relcache queries. Default is master (primary) node.
+                                   # If load_balance_node is specified, queries will be sent to load balance node.
 #------------------------------------------------------------------------------
 # IN MEMORY QUERY MEMORY CACHE
 #------------------------------------------------------------------------------
index 99725d93885abce47243fa7191ecfd9e4e6c789b..632639a9f5b43b1218b257d06f0acda649cac1e8 100644 (file)
@@ -44,9 +44,9 @@ serialize_accept = off
                                    # whether to serialize accept() call to avoid thundering herd problem
                                    # (change requires restart)
 reserved_connections = 0
-                                  # Number of reserved connections.
-                                  # Pgpool-II does not accept connections if over
-                                  # num_init_chidlren - reserved_connections.
+                                   # Number of reserved connections.
+                                   # Pgpool-II does not accept connections if over
+                                   # num_init_chidlren - reserved_connections.
 
 # - pgpool Communication Manager Connection Settings -
 
@@ -397,16 +397,18 @@ delay_threshold = 0
 follow_master_command = ''
                                    # Executes this command after master failover
                                    # Special values:
-                                   #   %d = node id
-                                   #   %h = host name
-                                   #   %p = port number
-                                   #   %D = database cluster path
+                                   #   %d = failed node id
+                                   #   %h = failed node host name
+                                   #   %p = failed node port number
+                                   #   %D = failed node database cluster path
                                    #   %m = new master node id
-                                   #   %H = hostname of the new master node
+                                   #   %H = new master node hostname
                                    #   %M = old master node id
                                    #   %P = old primary node id
                                    #   %r = new master port number
                                    #   %R = new master database cluster path
+                                   #   %N = old primary node hostname
+                                   #   %S = old primary node port number
                                    #   %% = '%' character
 
 #------------------------------------------------------------------------------
@@ -458,31 +460,34 @@ connect_timeout = 10000
 failover_command = ''
                                    # Executes this command at failover
                                    # Special values:
-                                   #   %d = node id
-                                   #   %h = host name
-                                   #   %p = port number
-                                   #   %D = database cluster path
+                                   #   %d = failed node id
+                                   #   %h = failed node host name
+                                   #   %p = failed node port number
+                                   #   %D = failed node database cluster path
                                    #   %m = new master node id
-                                   #   %H = hostname of the new master node
+                                   #   %H = new master node hostname
                                    #   %M = old master node id
                                    #   %P = old primary node id
                                    #   %r = new master port number
                                    #   %R = new master database cluster path
-
+                                   #   %N = old primary node hostname
+                                   #   %S = old primary node port number
                                    #   %% = '%' character
 failback_command = ''
                                    # Executes this command at failback.
                                    # Special values:
-                                   #   %d = node id
-                                   #   %h = host name
-                                   #   %p = port number
-                                   #   %D = database cluster path
+                                   #   %d = failed node id
+                                   #   %h = failed node host name
+                                   #   %p = failed node port number
+                                   #   %D = failed node database cluster path
                                    #   %m = new master node id
-                                   #   %H = hostname of the new master node
+                                   #   %H = new master node hostname
                                    #   %M = old master node id
                                    #   %P = old primary node id
                                    #   %r = new master port number
                                    #   %R = new master database cluster path
+                                   #   %N = old primary node hostname
+                                   #   %S = old primary node port number
                                    #   %% = '%' character
 
 failover_on_backend_error = on
@@ -764,8 +769,8 @@ enable_shared_relcache = off
                                    # Default is off.
                                    # (change requires restart)
 
-relcache_query_target = master    # Target node to send relcache queries. Default is master (primary) node.
-                                  # If load_balance_node is specified, queries will be sent to load balance node.
+relcache_query_target = master     # Target node to send relcache queries. Default is master (primary) node.
+                                   # If load_balance_node is specified, queries will be sent to load balance node.
 #------------------------------------------------------------------------------
 # IN MEMORY QUERY MEMORY CACHE
 #------------------------------------------------------------------------------
index 7a1913a82f10dd4ea48ff301e00171443a0a542b..ca70e5419061e5d62031f0ea6227e50168ad7b29 100644 (file)
@@ -44,9 +44,9 @@ serialize_accept = off
                                    # whether to serialize accept() call to avoid thundering herd problem
                                    # (change requires restart)
 reserved_connections = 0
-                                  # Number of reserved connections.
-                                  # Pgpool-II does not accept connections if over
-                                  # num_init_chidlren - reserved_connections.
+                                   # Number of reserved connections.
+                                   # Pgpool-II does not accept connections if over
+                                   # num_init_chidlren - reserved_connections.
 
 # - pgpool Communication Manager Connection Settings -
 
@@ -396,16 +396,18 @@ delay_threshold = 0
 follow_master_command = ''
                                    # Executes this command after master failover
                                    # Special values:
-                                   #   %d = node id
-                                   #   %h = host name
-                                   #   %p = port number
-                                   #   %D = database cluster path
+                                   #   %d = failed node id
+                                   #   %h = failed node host name
+                                   #   %p = failed node port number
+                                   #   %D = failed node database cluster path
                                    #   %m = new master node id
-                                   #   %H = hostname of the new master node
+                                   #   %H = new master node hostname
                                    #   %M = old master node id
                                    #   %P = old primary node id
                                    #   %r = new master port number
                                    #   %R = new master database cluster path
+                                   #   %N = old primary node hostname
+                                   #   %S = old primary node port number
                                    #   %% = '%' character
 
 #------------------------------------------------------------------------------
@@ -457,30 +459,34 @@ connect_timeout = 10000
 failover_command = ''
                                    # Executes this command at failover
                                    # Special values:
-                                   #   %d = node id
-                                   #   %h = host name
-                                   #   %p = port number
-                                   #   %D = database cluster path
+                                   #   %d = failed node id
+                                   #   %h = failed node host name
+                                   #   %p = failed node port number
+                                   #   %D = failed node database cluster path
                                    #   %m = new master node id
-                                   #   %H = hostname of the new master node
+                                   #   %H = new master node hostname
                                    #   %M = old master node id
                                    #   %P = old primary node id
                                    #   %r = new master port number
                                    #   %R = new master database cluster path
+                                   #   %N = old primary node hostname
+                                   #   %S = old primary node port number
                                    #   %% = '%' character
 failback_command = ''
                                    # Executes this command at failback.
                                    # Special values:
-                                   #   %d = node id
-                                   #   %h = host name
-                                   #   %p = port number
-                                   #   %D = database cluster path
+                                   #   %d = failed node id
+                                   #   %h = failed node host name
+                                   #   %p = failed node port number
+                                   #   %D = failed node database cluster path
                                    #   %m = new master node id
-                                   #   %H = hostname of the new master node
+                                   #   %H = new master node hostname
                                    #   %M = old master node id
                                    #   %P = old primary node id
                                    #   %r = new master port number
                                    #   %R = new master database cluster path
+                                   #   %N = old primary node hostname
+                                   #   %S = old primary node port number
                                    #   %% = '%' character
 
 failover_on_backend_error = on
@@ -763,8 +769,8 @@ enable_shared_relcache = off
                                    # Default is off.
                                    # (change requires restart)
 
-relcache_query_target = master    # Target node to send relcache queries. Default is master (primary) node.
-                                  # If load_balance_node is specified, queries will be sent to load balance node.
+relcache_query_target = master     # Target node to send relcache queries. Default is master (primary) node.
+                                   # If load_balance_node is specified, queries will be sent to load balance node.
 #------------------------------------------------------------------------------
 # IN MEMORY QUERY MEMORY CACHE
 #------------------------------------------------------------------------------
index c82de2143bcad74aac7b4b9e3b716625a35fbfc2..fb7dfff9ab11c05d7231808bf76fb6e75dc14c49 100644 (file)
@@ -37,9 +37,9 @@ socket_dir = '/tmp'
                                    # /var/run/postgresql
                                    # (change requires restart)
 reserved_connections = 0
-                                  # Number of reserved connections.
-                                  # Pgpool-II does not accept connections if over
-                                  # num_init_chidlren - reserved_connections.
+                                   # Number of reserved connections.
+                                   # Pgpool-II does not accept connections if over
+                                   # num_init_chidlren - reserved_connections.
 
 
 # - pgpool Communication Manager Connection Settings -
@@ -400,16 +400,18 @@ delay_threshold = 10000000
 follow_master_command = ''
                                    # Executes this command after master failover
                                    # Special values:
-                                   #   %d = node id
-                                   #   %h = host name
-                                   #   %p = port number
-                                   #   %D = database cluster path
+                                   #   %d = failed node id
+                                   #   %h = failed node host name
+                                   #   %p = failed node port number
+                                   #   %D = failed node database cluster path
                                    #   %m = new master node id
-                                   #   %H = hostname of the new master node
+                                   #   %H = new master node hostname
                                    #   %M = old master node id
                                    #   %P = old primary node id
                                    #   %r = new master port number
                                    #   %R = new master database cluster path
+                                   #   %N = old primary node hostname
+                                   #   %S = old primary node port number
                                    #   %% = '%' character
 
 #------------------------------------------------------------------------------
@@ -461,30 +463,34 @@ connect_timeout = 10000
 failover_command = ''
                                    # Executes this command at failover
                                    # Special values:
-                                   #   %d = node id
-                                   #   %h = host name
-                                   #   %p = port number
-                                   #   %D = database cluster path
+                                   #   %d = failed node id
+                                   #   %h = failed node host name
+                                   #   %p = failed node port number
+                                   #   %D = failed node database cluster path
                                    #   %m = new master node id
-                                   #   %H = hostname of the new master node
+                                   #   %H = new master node hostname
                                    #   %M = old master node id
                                    #   %P = old primary node id
                                    #   %r = new master port number
                                    #   %R = new master database cluster path
+                                   #   %N = old primary node hostname
+                                   #   %S = old primary node port number
                                    #   %% = '%' character
 failback_command = ''
                                    # Executes this command at failback.
                                    # Special values:
-                                   #   %d = node id
-                                   #   %h = host name
-                                   #   %p = port number
-                                   #   %D = database cluster path
+                                   #   %d = failed node id
+                                   #   %h = failed node host name
+                                   #   %p = failed node port number
+                                   #   %D = failed node database cluster path
                                    #   %m = new master node id
-                                   #   %H = hostname of the new master node
+                                   #   %H = new master node hostname
                                    #   %M = old master node id
                                    #   %P = old primary node id
                                    #   %r = new master port number
                                    #   %R = new master database cluster path
+                                   #   %N = old primary node hostname
+                                   #   %S = old primary node port number
                                    #   %% = '%' character
 
 failover_on_backend_error = on
@@ -765,8 +771,8 @@ enable_shared_relcache = off
                                    # Default is off.
                                    # (change requires restart)
 
-relcache_query_target = master    # Target node to send relcache queries. Default is master (primary) node.
-                                  # If load_balance_node is specified, queries will be sent to load balance node.
+relcache_query_target = master     # Target node to send relcache queries. Default is master (primary) node.
+                                   # If load_balance_node is specified, queries will be sent to load balance node.
 #------------------------------------------------------------------------------
 # IN MEMORY QUERY MEMORY CACHE
 #------------------------------------------------------------------------------
index 512a5a141196e21f76abfb5617df097232275e8d..c6fdf9a858ed1de0f0016d634f61869288a60a6e 100644 (file)
@@ -3,7 +3,7 @@ DATA_built = pgpool-recovery.sql
 DATA = uninstall_pgpool-recovery.sql
 
 EXTENSION = pgpool_recovery
-DATA = pgpool_recovery--1.1.sql pgpool_recovery--1.2.sql pgpool_recovery--1.1--1.2.sql
+DATA = pgpool_recovery--1.1.sql pgpool_recovery--1.2.sql pgpool_recovery--1.1--1.2.sql pgpool_recovery--1.3.sql pgpool_recovery--1.2--1.3.sql
 
 # if you are using PostgreSQL 8.0 or later,
 # using pg_config is recommended.
index 6dbb7be605f595b35c1a12e77cc268a8e14c5b26..dc24a923bf1817f16e5987d7156ce8bfaa23c756 100644 (file)
@@ -80,24 +80,37 @@ pgpool_recovery(PG_FUNCTION_ARGS)
                elog(ERROR, "must be superuser to use pgpool_recovery function");
 #endif
 
-       if (PG_NARGS() >= 5)            /* Pgpool-II 4.0 or later */
+       if (PG_NARGS() >= 6)            /* Pgpool-II 4.1 or later */
        {
+               char       *primary_port = DatumGetCString(DirectFunctionCall1(textout,
+                                                                                                                                         PointerGetDatum(PG_GETARG_TEXT_P(3))));
+               int                     remote_node = PG_GETARG_INT32(4);
+
                char       *remote_port = DatumGetCString(DirectFunctionCall1(textout,
+                                                                                                                                         PointerGetDatum(PG_GETARG_TEXT_P(5))));
+
+               snprintf(recovery_script, sizeof(recovery_script), "\"%s/%s\" \"%s\" \"%s\" \"%s\" \"%s\" %d \"%s\"",
+                                DataDir, script, DataDir, remote_host,
+                                remote_data_directory, primary_port, remote_node, remote_port);
+       }
+       else if (PG_NARGS() >= 5)               /* Pgpool-II 4.0 */
+       {
+               char       *primary_port = DatumGetCString(DirectFunctionCall1(textout,
                                                                                                                                          PointerGetDatum(PG_GETARG_TEXT_P(3))));
-               int                     recovery_node = PG_GETARG_INT32(4);
+               int                     remote_node = PG_GETARG_INT32(4);
 
                snprintf(recovery_script, sizeof(recovery_script), "\"%s/%s\" \"%s\" \"%s\" \"%s\" \"%s\" %d",
                                 DataDir, script, DataDir, remote_host,
-                                remote_data_directory, remote_port, recovery_node);
+                                remote_data_directory, primary_port, remote_node);
        }
        else if (PG_NARGS() >= 4)       /* Pgpool-II 3.4 - 3.7 */
        {
-               char       *remote_port = DatumGetCString(DirectFunctionCall1(textout,
+               char       *primary_port = DatumGetCString(DirectFunctionCall1(textout,
                                                                                                                                          PointerGetDatum(PG_GETARG_TEXT_P(3))));
 
                snprintf(recovery_script, sizeof(recovery_script), "\"%s/%s\" \"%s\" \"%s\" \"%s\" \"%s\"",
                                 DataDir, script, DataDir, remote_host,
-                                remote_data_directory, remote_port);
+                                remote_data_directory, primary_port);
        }
        else
        {
index cc550616add666dfccb3ef92f32f680b63fac6c8..1670969b4b0d073ab6e712ab267eb0411c3ba65b 100644 (file)
@@ -3,7 +3,7 @@
 -- complain if script is sourced in psql, rather than via ALTER EXTENSION
 \echo Use "ALTER EXTENSION pgpool_recovery UPDATE TO '1.2'" to load this file. \quit
 
-create FUNCTION pgpool_recovery(script_name text, remote_host text, remote_data_directory text, remote_port text, recovery_node integer)
+create FUNCTION pgpool_recovery(script_name text, remote_host text, remote_data_directory text, primary_port text, remote_node integer)
 RETURNS bool
 AS 'MODULE_PATHNAME', 'pgpool_recovery'
 LANGUAGE C STRICT;
diff --git a/src/sql/pgpool-recovery/pgpool_recovery--1.2--1.3.sql b/src/sql/pgpool-recovery/pgpool_recovery--1.2--1.3.sql
new file mode 100644 (file)
index 0000000..8320ac3
--- /dev/null
@@ -0,0 +1,9 @@
+/* contrib/pgpool_recovery/pgpool_recovery--1.2--1.3.sql */
+
+-- complain if script is sourced in psql, rather than via ALTER EXTENSION
+\echo Use "ALTER EXTENSION pgpool_recovery UPDATE TO '1.3'" to load this file. \quit
+
+create FUNCTION pgpool_recovery(script_name text, remote_host text, remote_data_directory text, primary_port text, remote_node integer, remote_port text)
+RETURNS bool
+AS 'MODULE_PATHNAME', 'pgpool_recovery'
+LANGUAGE C STRICT;
index 6163515e55f907ae4a0e5855695cc9e0db045885..6a0bd4a7b0eb16dd60117627206bd60a93f1492a 100644 (file)
@@ -5,7 +5,7 @@ CREATE FUNCTION pgpool_recovery(IN script_name text,
           IN remote_host text,
           IN remote_data_directory text,
           IN remote_port text,
-          IN recovery_node integer)
+          IN recovery_node integer)
 RETURNS bool
 AS 'MODULE_PATHNAME', 'pgpool_recovery'
 LANGUAGE C STRICT;
diff --git a/src/sql/pgpool-recovery/pgpool_recovery--1.3.sql b/src/sql/pgpool-recovery/pgpool_recovery--1.3.sql
new file mode 100644 (file)
index 0000000..aec2175
--- /dev/null
@@ -0,0 +1,51 @@
+-- complain if script is sourced in psql, rather than via CREATE EXTENSION
+\echo Use "CREATE EXTENSION pgpool_recovery" to load this file. \quit
+
+CREATE FUNCTION pgpool_recovery(IN script_name text,
+          IN remote_host text,
+          IN remote_data_directory text,
+          IN primary_port text,
+          IN remote_node integer,
+          IN remote_port text)
+RETURNS bool
+AS 'MODULE_PATHNAME', 'pgpool_recovery'
+LANGUAGE C STRICT;
+
+CREATE FUNCTION pgpool_recovery(IN script_name text,
+          IN remote_host text,
+          IN remote_data_directory text,
+          IN primary_port text,
+          IN remote_node integer)
+RETURNS bool
+AS 'MODULE_PATHNAME', 'pgpool_recovery'
+LANGUAGE C STRICT;
+
+CREATE FUNCTION pgpool_recovery(IN script_name text,
+          IN remote_host text,
+          IN remote_data_directory text,
+          IN primary_port text)
+RETURNS bool
+AS 'MODULE_PATHNAME', 'pgpool_recovery'
+LANGUAGE C STRICT;
+
+CREATE FUNCTION pgpool_recovery(IN script_name text,
+          IN remote_host text,
+          IN remote_data_directory text)
+RETURNS bool
+AS 'MODULE_PATHNAME', 'pgpool_recovery'
+LANGUAGE C STRICT;
+
+CREATE FUNCTION pgpool_remote_start(IN remote_host text, IN remote_data_directory text)
+RETURNS bool
+AS 'MODULE_PATHNAME', 'pgpool_remote_start'
+LANGUAGE C STRICT;
+
+CREATE OR REPLACE FUNCTION pgpool_pgctl(IN action text, IN stop_mode text)
+RETURNS bool
+AS '$libdir/pgpool-recovery', 'pgpool_pgctl'
+LANGUAGE C STRICT;
+
+CREATE OR REPLACE FUNCTION pgpool_switch_xlog(IN arcive_dir text)
+RETURNS text
+AS 'MODULE_PATHNAME', 'pgpool_switch_xlog'
+LANGUAGE C STRICT;
index 121163de46f52a5284c6c4c27f1d142edeeb0482..beb710a568bd5cf9bde3a6e645ca27dac7eacb0b 100644 (file)
@@ -1,5 +1,5 @@
 # pgpool-recovery extension
-comment = 'recovery functions for pgpool-II for V4.0 or later'
-default_version = '1.2'
+comment = 'recovery functions for pgpool-II for V4.1 or later'
+default_version = '1.3'
 module_pathname = '$libdir/pgpool-recovery'
 relocatable = true