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]