pgpool2.git / summary / log / commit / refs
commit ed90a39db3664eb7be85f192f5472cc0b59a2d8f
Author: Bo Peng <pengbo@sraoss.co.jp>
Date: Thu Aug 08 00:45:00 2019 +0000
Add new arguments in pgpool_recovery function and failover_command/failback_command/follow_master_command.
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
doc.ja/src/sgml/failover.sgml | 42 ++++++++++++++++++
doc.ja/src/sgml/online-recovery.sgml | 8 ++++
doc/src/sgml/failover.sgml | 28 +++++++++++-
doc/src/sgml/online-recovery.sgml | 5 +++
src/Makefile.am | 2 +
src/Makefile.in | 2 +
src/main/pgpool_main.c | 12 +++++
src/pcp_con/recovery.c | 5 ++-
src/pgpool.spec | 2 +
src/sample/pgpool.conf.sample | 48 +++++++++++---------
src/sample/pgpool.conf.sample-logical | 40 +++++++++--------
src/sample/pgpool.conf.sample-master-slave | 47 +++++++++++---------
src/sample/pgpool.conf.sample-replication | 46 ++++++++++---------
src/sample/pgpool.conf.sample-stream | 46 ++++++++++---------
src/sql/pgpool-recovery/Makefile | 2 +-
src/sql/pgpool-recovery/pgpool-recovery.c | 23 +++++++---
.../pgpool-recovery/pgpool_recovery--1.1--1.2.sql | 2 +-
.../pgpool-recovery/pgpool_recovery--1.2--1.3.sql | 9 ++++
src/sql/pgpool-recovery/pgpool_recovery--1.2.sql | 2 +-
src/sql/pgpool-recovery/pgpool_recovery--1.3.sql | 51 ++++++++++++++++++++++
src/sql/pgpool-recovery/pgpool_recovery.control | 4 +-
21 files changed, 313 insertions(+), 113 deletions(-)
diff --git a/doc.ja/src/sgml/failover.sgml b/doc.ja/src/sgml/failover.sgml
index 13f5151c5..a188ed8aa 100644
--- a/doc.ja/src/sgml/failover.sgml
+++ b/doc.ja/src/sgml/failover.sgml
@@ -170,6 +170,20 @@
-->
<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>
<!--
diff --git a/doc.ja/src/sgml/online-recovery.sgml b/doc.ja/src/sgml/online-recovery.sgml
index 1376996c9..c9129821b 100644
--- a/doc.ja/src/sgml/online-recovery.sgml
+++ b/doc.ja/src/sgml/online-recovery.sgml
@@ -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>
diff --git a/doc/src/sgml/failover.sgml b/doc/src/sgml/failover.sgml
index 765db4dd9..c14110f60 100644
--- a/doc/src/sgml/failover.sgml
+++ b/doc/src/sgml/failover.sgml
@@ -145,7 +145,7 @@
</row>
<row>
<entry>%m</entry>
- <entry> New master node ID</entry>
+ <entry>New master node ID</entry>
</row>
<row>
<entry>%H</entry>
@@ -153,7 +153,7 @@
</row>
<row>
<entry>%P</entry>
- <entry> Old primary node ID</entry>
+ <entry>Old primary node ID</entry>
</row>
<row>
<entry>%r</entry>
@@ -163,6 +163,14 @@
<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>
@@ -302,6 +310,14 @@
<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>
diff --git a/doc/src/sgml/online-recovery.sgml b/doc/src/sgml/online-recovery.sgml
index 045a3e373..133dce5b5 100644
--- a/doc/src/sgml/online-recovery.sgml
+++ b/doc/src/sgml/online-recovery.sgml
@@ -259,6 +259,11 @@
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>
diff --git a/src/Makefile.am b/src/Makefile.am
index 4f7e36a41..7eb11db41 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -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 \
diff --git a/src/Makefile.in b/src/Makefile.in
index ee1a7f644..8f3635d78 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -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 \
diff --git a/src/main/pgpool_main.c b/src/main/pgpool_main.c
index bdf10109d..371aa69cf 100644
--- a/src/main/pgpool_main.c
+++ b/src/main/pgpool_main.c
@@ -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;
diff --git a/src/pcp_con/recovery.c b/src/pcp_con/recovery.c
index 7668cf39d..11597af2b 100644
--- a/src/pcp_con/recovery.c
+++ b/src/pcp_con/recovery.c
@@ -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,
diff --git a/src/pgpool.spec b/src/pgpool.spec
index bacb5417c..5dade9d3f 100644
--- a/src/pgpool.spec
+++ b/src/pgpool.spec
@@ -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
diff --git a/src/sample/pgpool.conf.sample b/src/sample/pgpool.conf.sample
index 65d016fd6..897868fab 100644
--- a/src/sample/pgpool.conf.sample
+++ b/src/sample/pgpool.conf.sample
@@ -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
#------------------------------------------------------------------------------
diff --git a/src/sample/pgpool.conf.sample-logical b/src/sample/pgpool.conf.sample-logical
index 8f6caa900..7d3100ee8 100644
--- a/src/sample/pgpool.conf.sample-logical
+++ b/src/sample/pgpool.conf.sample-logical
@@ -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
#------------------------------------------------------------------------------
diff --git a/src/sample/pgpool.conf.sample-master-slave b/src/sample/pgpool.conf.sample-master-slave
index 99725d938..632639a9f 100644
--- a/src/sample/pgpool.conf.sample-master-slave
+++ b/src/sample/pgpool.conf.sample-master-slave
@@ -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
#------------------------------------------------------------------------------
diff --git a/src/sample/pgpool.conf.sample-replication b/src/sample/pgpool.conf.sample-replication
index 7a1913a82..ca70e5419 100644
--- a/src/sample/pgpool.conf.sample-replication
+++ b/src/sample/pgpool.conf.sample-replication
@@ -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
#------------------------------------------------------------------------------
diff --git a/src/sample/pgpool.conf.sample-stream b/src/sample/pgpool.conf.sample-stream
index c82de2143..fb7dfff9a 100644
--- a/src/sample/pgpool.conf.sample-stream
+++ b/src/sample/pgpool.conf.sample-stream
@@ -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
#------------------------------------------------------------------------------
diff --git a/src/sql/pgpool-recovery/Makefile b/src/sql/pgpool-recovery/Makefile
index 512a5a141..c6fdf9a85 100644
--- a/src/sql/pgpool-recovery/Makefile
+++ b/src/sql/pgpool-recovery/Makefile
@@ -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.
diff --git a/src/sql/pgpool-recovery/pgpool-recovery.c b/src/sql/pgpool-recovery/pgpool-recovery.c
index 6dbb7be60..dc24a923b 100644
--- a/src/sql/pgpool-recovery/pgpool-recovery.c
+++ b/src/sql/pgpool-recovery/pgpool-recovery.c
@@ -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
{
diff --git a/src/sql/pgpool-recovery/pgpool_recovery--1.1--1.2.sql b/src/sql/pgpool-recovery/pgpool_recovery--1.1--1.2.sql
index cc550616a..1670969b4 100644
--- a/src/sql/pgpool-recovery/pgpool_recovery--1.1--1.2.sql
+++ b/src/sql/pgpool-recovery/pgpool_recovery--1.1--1.2.sql
@@ -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
index 000000000..8320ac35a
--- /dev/null
+++ b/src/sql/pgpool-recovery/pgpool_recovery--1.2--1.3.sql
@@ -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;
diff --git a/src/sql/pgpool-recovery/pgpool_recovery--1.2.sql b/src/sql/pgpool-recovery/pgpool_recovery--1.2.sql
index 6163515e5..6a0bd4a7b 100644
--- a/src/sql/pgpool-recovery/pgpool_recovery--1.2.sql
+++ b/src/sql/pgpool-recovery/pgpool_recovery--1.2.sql
@@ -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
index 000000000..aec2175ed
--- /dev/null
+++ b/src/sql/pgpool-recovery/pgpool_recovery--1.3.sql
@@ -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;
diff --git a/src/sql/pgpool-recovery/pgpool_recovery.control b/src/sql/pgpool-recovery/pgpool_recovery.control
index 121163de4..beb710a56 100644
--- a/src/sql/pgpool-recovery/pgpool_recovery.control
+++ b/src/sql/pgpool-recovery/pgpool_recovery.control
@@ -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
[parent: 565f1af8c783]