From 34a8967ff373926f541193189898060ade72170d Mon Sep 17 00:00:00 2001 From: Nozomi Anzai Date: Wed, 8 Oct 2014 15:34:15 +0900 Subject: [PATCH] Adopt pgpool-II 3.4 Added parameters are: - listen_backlog_multiplier - connect_timeout - allow_sql_comments - check_unlogged_table - database_redirect_preference_list - app_name_redirect_preference_list --- common.php | 14 +- definePgpoolConfParam.php | 33 +- lang/en.lang.php | 7 +- lang/ja.lang.php | 5 + nodeStatus.php | 2 +- status.php | 2 +- templates/help/en/pgconfig.tpl | 2194 +------------------------------ templates/help/ja/pgconfig.tpl | 2249 +------------------------------- templates/pgconfig.tpl | 61 +- 9 files changed, 124 insertions(+), 4443 deletions(-) diff --git a/common.php b/common.php index 05f8876..9a63d3f 100644 --- a/common.php +++ b/common.php @@ -30,7 +30,7 @@ error_reporting(E_ALL); function versions() { - return array('3.3', '3.2', '3.1', '3.0', + return array('3.4', '3.3', '3.2', '3.1', '3.0', '2.3', '2.2', '2.1', '2.0'); } @@ -562,6 +562,16 @@ function paramExists($param) switch ($param) { /* Add */ + // params added in 3.4 + case 'listen_backlog_multiplier': + case 'connect_timeout': + case 'allow_sql_comments': + case 'check_unlogged_table': + case 'database_redirect_preference_list': + case 'app_name_redirect_preference_list': + $add_version = 3.4; + break; + // params added in 3.3 case 'clear_memqcache_on_escalation': case 'heartbeat_destination': @@ -697,7 +707,7 @@ function isSuperUser($user_name) $result = pg_query($conn, "SELECT usesuper FROM pg_user WHERE usename = '{$user_name}'"); - if (!pg_result_status($result) == PGSQL_TUPLES_OK) { + if (!pg_result_status($result) == PGSQL_TUPLES_OK) { @pg_close($conn); return NULL; } diff --git a/definePgpoolConfParam.php b/definePgpoolConfParam.php index 2be6763..9cdea39 100644 --- a/definePgpoolConfParam.php +++ b/definePgpoolConfParam.php @@ -1,5 +1,4 @@ 'en', 'strLang' => 'English', + 'descAllow_sql_comments' => 'If on, ignore SQL comments when judging if load balance or query cache is possible', + 'descApp_name_redirect_preference_list' => '"application name:node id" pairs to specify the node id when the application is used', 'descArping_path' => 'The path of a command to send an ARP request after the virtual IP is switched', 'descArping_cmd' => 'The ommand to send an ARP request after the virtual IP is switched', 'descAuthentication_timeout' => 'Timeout in seconds to complete client authentication', @@ -39,6 +41,7 @@ $message = array( 'descDelegate_IP' => 'The virtual IP address (VIP) of pgpool-II ', 'descBlack_function_list' => 'Comma separated functions which write to database', 'descBlack_memqcache_table_list' => 'Comma separated list of table names not to be cached', + 'descCheck_temp_table' => 'If on, enable temporary table check in SELECT statements', 'descChild_life_time' => 'Life of an idle child process in seconds', 'descChild_max_connections' => 'If child_max_connections connections were received, child exits', 'descClear_memqcache_on_escalation' => 'If on, watchdog clears all the query cache in the shared memory when pgpool-II escaltes to active', @@ -47,7 +50,8 @@ $message = array( 'from a client in on line recovery', 'descConnection_cache' => 'If true, cache connections to PostgreSQL', 'descConnection_life_time' => 'Life time for each idle connection in seconds', - 'descCheck_temp_table' => 'If on, enable temporary table check in SELECT statements', + 'desCconnect_timeout' => 'Timeout value in milliseconds before giving up connecting to backend using connect() system call', + 'descDatabase_redirect_preference_list' => '"database name:node id" pairs to specify the node id when connecting to the database', 'descDelay_threshold' => 'If the standby server delays more than delay_threshold, '. 'any query goes to the primary only', 'descDebug_level' => 'Debug message verbosity level', @@ -79,6 +83,7 @@ $message = array( 'descInsert_lock' => ' If you replicate a table having SERIAL data type column, '. 'sometimes the serial value does not match between servers', 'descListen_addresses' => 'Specifies the addresses to listen on for TCP/IP connections', + 'descListen_backlog_multiplier' => 'The number of preforked pgpool-II server processes', 'descLoad_balance_mode' => 'Perform load balancing for SELECT', 'descLobj_lock_table' => 'Specifies table name lock used when rewriting lo_create in replication mode', 'descLog_destination' => 'Where to log', diff --git a/lang/ja.lang.php b/lang/ja.lang.php index 972de53..31f1b5e 100644 --- a/lang/ja.lang.php +++ b/lang/ja.lang.php @@ -27,6 +27,8 @@ $message = array( 'lang' => 'ja', 'strLang' => '日本語', + 'descAllow_sql_comments' => '負荷分散やクエリキャッシュができるかどうかの判定の際に、SQLコメントを無視するかどうか', + 'descApp_name_redirect_preference_list' => 'アプリケーション名によって負荷分散をしたいノード番号を、"アプリケーション名:ノード番号"で指定', 'descArping_path' => 'IP アドレス切り替え後に ARP リクエストを送信するコマンドのパス', 'descArping_cmd' => 'IP アドレス切り替え後に ARP リクエストを送信するコマンド', 'descAuthentication_timeout' => 'クライアント認証のタイムアウト時間(秒)', @@ -46,6 +48,8 @@ $message = array( 'descClient_idle_limit_in_recovery' => 'リカバリ中のクライアントからのクエリの最大待ち時間(秒)', 'descConnection_cache' => 'コネクションキャッシュ機能の有無', 'descConnection_life_time' => 'コネクションプール中のコネクションの有効期間(秒)', + 'desCconnect_timeout' => 'connect()システムコールを使ってバックエンドに接続する際のタイムアウト値を指定(ミリ秒)', + 'descDatabase_redirect_preference_list' => 'データベース名によって負荷分散をしたいノード番号を、"データベース名:ノード番号"で指定', 'descDebug_level' => 'デバッグメッセージの詳細レベル(0は無効)', 'descDelay_threshold' => '許容するスタンバイサーバの遅延(バイト)', 'descDelegate_IP' => '仮想 IP アドレス', @@ -71,6 +75,7 @@ $message = array( 'descIgnore_leading_white_space' => 'load balance時のSQL文行頭の空白を無視', 'descInsert_lock' => 'INSERT時に自動的にトランザクションの開始,テーブルロック,トランザクションの終了', 'descListen_addresses' => 'TCP/IPコネクションを受け付けるアドレス', + 'descListen_backlog_multiplier' => 'フロントエンドからpgpool-IIへの接続待ち行列の長さ', 'descLoad_balance_mode' => 'レプリケーションモード時にSELECT文を各ノードにロードバランス', 'descLobj_lock_table' => 'ラージオブジェクトのレプリケーションでロック管理に使うためのテーブル名', 'descLog_connections' => '受信した接続のログを出力', diff --git a/nodeStatus.php b/nodeStatus.php index d85c8b2..3a3e7fd 100644 --- a/nodeStatus.php +++ b/nodeStatus.php @@ -127,7 +127,7 @@ $tpl->assign('msgStopPgpool', $message['msgStopPgpool']); $tpl->assign('nodeCount', $nodeCount); $tpl->assign('has_not_loaded_node', $has_not_loaded_node); $tpl->assign('pgpoolIsRunning', $is_pgpool_running); -$tpl->assign('is_superuser', isSuperUser($_SESSION[SESSION_LOGIN_USER])) +$tpl->assign('is_superuser', isSuperUser($_SESSION[SESSION_LOGIN_USER])); // Set params $configValue = readConfigParams('recovery_1st_stage'); diff --git a/status.php b/status.php index 295ee6a..889b0db 100644 --- a/status.php +++ b/status.php @@ -19,7 +19,7 @@ * is" without express or implied warranty. * * @author Ryuma Ando - * @copyright 2003-2013 PgPool Global Development Group + * @copyright 2003-2014 PgPool Global Development Group * @version SVN: $Id$ */ diff --git a/templates/help/en/pgconfig.tpl b/templates/help/en/pgconfig.tpl index 280e0e3..98cba28 100644 --- a/templates/help/en/pgconfig.tpl +++ b/templates/help/en/pgconfig.tpl @@ -17,34 +17,13 @@

{$message.strHelp|escape}({$message.strPgConfSetting|escape})

- -

{$message.strSummary|escape}

The content of pgpool.conf that is the configuration file of pgpool set can be displayed and be changed. +

+Official documentation:
+ +http://www.pgpool.net/docs/latest/pgpool-en.html +

{$message.strFeature|escape}

Please input the value that wants to change and push the update button. @@ -57,2169 +36,6 @@ Please push the update button when input ends.

Deletion of backend host

Please push the delete button at the right of the host setting when you want to delete the back end host who has registered.
-

Connections

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {if paramExists('ssl')} - - - - - - - - - - - - - - - - - - - - - - - - - - - {/if} - - - - - - - -
{$message.strParameter|escape}{$message.strDetail|escape}
pgpool Connection Settings
-

listen_addresses (string) *

-

Specifies the hostname or IP address, on which pgpool-II will accept - TCP/IP connections. '*' accepts - all incoming connections. '' disables TCP/IP - connections. -

-

- Default is 'localhost'. - Connections via UNIX domain socket are always accepted. -

-
-

port (integer) *

-

- The port number used by pgpool-II to listen for connections. Default is 9999. -

-
-

socket_dir (string) *

-

The directory where the UNIX domain socket accepting connections for - pgpool-II will be created. Default is '/tmp'. - Be aware that this socket might be deleted by a cron job. - We recommend to set this value to '/var/run' or such directory. -

-
pgpool Communication Manager Connection Settings
-

pcp_port (integer) *

-

- The port number where PCP process accepts connections. Default is 9898. -

-
-

pcp_socket_dir (string) *

-

The directory path of the UNIX domain socket accepting - connections for the PCP process. Default is '/tmp'. - Be aware that the socket might be deleted by cron. - We recommend to set this value to '/var/run' or such directory. -

-
Authentication
-

enable_pool_hba (bool)

-

- If true, use pool_hba.conf for client authentication. -

-
-

pool_passwd (string) *

-

- Specify the file name of pool_passwd for md5 authentication. - Default value is "pool_passwd". "" disables to read pool_passwd. -

-
-

authentication_timeout (integer)

-

Specify the timeout for pgpool authentication. 0 disables the time out. - Default value is 60. -

-
SSL Connections
-

ssl (bool) *

-

- If true, enable SSL support for both the frontend and backend connections. - Note that ssl_key and ssl_cert - must also be set in order for SSL to work with frontend connections. -

-

- SSL is off by default. Note that OpenSSL support must also have been configured at compilation time. -

-
-

ssl_key (string) *

-

- The path to the private key file to use for incoming frontend connections. -

-

- There is no default value for this option, and if left unset SSL will - be disabled for incoming frontend connections. -

-
-

ssl_cert (string) *

-

- The path to the public x509 certificate file to use for incoming - frontend connections. -

-

- There is no default value for this option, and if left unset SSL will - be disabled for incoming frontend connections. -

-
-

ssl_ca_cert (string) *

-
-

ssl_ca_cert_dir (string) *

-
- - -

Pools

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
{$message.strParameter|escape}{$message.strDetail|escape}
Pool size
-

num_init_children (integer) *

-

The number of preforked pgpool-II server processes. Default is 32. - num_init_children is also the concurrent connections limit to pgpool-II from clients. - If more than num_init_children clients try to connect to pgpool-II, - they are blocked (not rejected) until a connection to any pgpool-II process is closed. - Up to 2 * num_init_children can be queued. - Number of connections to each PostgreSQL is roughly max_pool*num_init_children

- -

Some hints in addition to above:

-
    -
  • Canceling a query creates another - connection to the backend; thus, a query cannot be canceled if - all the connections are in use. If you want to ensure that queries can - be canceled, set this value to twice the expected connections.
  • - -
  • PostgreSQL allows concurrent connections for non superusers up - to max_connections - superuser_reserved_connections.
  • -
- -

In summary, max_pool, num_init_children, max_connections, - superuser_reserved_connections must satisfy the following formula: -

- - - - - - - - - - -
no query canceling neededmax_pool*num_init_children <= (max_connections - superuser_reserved_connections)
query canceling neededmax_pool*num_init_children*2 <= (max_connections - superuser_reserved_connections
- -

- This parameter can only be set at server start. -

-
-

max_pool (integer) *

-

The maximum number of cached connections in pgpool-II children processes. - pgpool-II reuses the cached connection if an incoming connection is - connecting to the same database with the same username. - If not, pgpool-II creates a new connection to the backend. - If the number of cached connections exceeds max_pool, - the oldest connection will be discarded, and uses that slot for the new connection. -

-

- Default value is 4. Please be aware that the number of - connections from pgpool-II processes to the backends may reach - num_init_children * - max_pool. -

-
Life time
-

child_life_time (integer)

-

A pgpool-II child process' life time in seconds. - When a child is idle for that many seconds, it is terminated and a new child is created. - This parameter is a measure to prevent memory leaks and other unexpected errors. - Default value is 300 (5 minutes). - 0 disables this feature. Note that this doesn't apply for processes - that have not accepted any connection yet. -

-
-

child_max_connections (integer)

-

A pgpool-II child process will be terminated after this many connections from clients. - This parameter is useful on a server - if it is so busy that child_life_time and - connection_life_time are never triggered. - Thus this is also usefull to prevent PostgreSQL servers from getting too big. -

-
-

connection_life_time (integer)

-

Cached connections expiration time in seconds. An expired - cached connection will be disconnected. Default is 0, which - means the cached connections will not be disconnected.

-
-

client_idle_limit (integer)

-

Similar to client_idle_limit but only takes effect in the second - stage of recovery. A client being idle for client_idle_limit_in_recovery - seconds since its last query will get disconnected. - This is useful for preventing the pgpool recovery from being - disturbed by a lazy client or if the TCP/IP connection between the client - and pgpool is accidentally down (a cut cable for instance). - If set to -1, disconnect the client immediately. - The default value for client_idle_limit_in_recovery is 0, - which means the feature is turned off. -

-

- If your clients are very busy, pgpool-II cannot enter the second stage of - recovery whatever value of client_idle_limit_in_recovery you may choose. - In this case, you can set client_idle_limit_in_recovery to - 1 - so that pgpool-II immediately disconnects such busy clients before entering the second stage. -

-
- - -

Backends

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {if paramExists('backend_flag')} - - - - - {/if} - - - - - - - -
{$message.strParameter|escape}{$message.strDetail|escape}
-

backend_hostname (string)

-

Specifies where to connect with the PostgreSQL backend. - It is used by pgpool-II to communicate with the server. -

-

- For TCP/IP communication, this parameter can take a hostname or an IP address. - If this begins with a slash, it specifies Unix-domain communication - rather than TCP/IP; the value is the name of the directory - in which the socket file is stored. The default behavior when backend_hostname - is empty ('') is to connect to a Unix-domain socket in /tmp. -

-

- Multiple backends can be specified by adding a number at the end - of the parameter name (e.g.backend_hostname0). - This number is referred to as "DB node ID", and it starts from 0. - The backend which was given the DB node ID of 0 will be called "Master DB". - When multiple backends are defined, the service can be continued - even if the Master DB is down (not true in some modes). - In this case, the youngest DB node ID alive will be the new Master DB.

-

- Please note that the DB node which has id 0 has no special meaming - if operated in streaming replication mode. - Rather, you should care about if the DB node is the "primary node" or not. -

-

If you plan to use only one PostgreSQL server, specify it by - backend_hostname0.

-
-

backend_port (integer)

-

Specifies the port number of the backends. - Multiple backends can be specified by adding a number at the end of the parameter name - (e.g. backend_port0). - If you plan to use only one PostgreSQL server, specify it by backend_port0.

-
-

backend_weight (integer)

-

Specifies the load balance ratio for the backends. Multiple - backends can be specified by adding a number at the end of the - parameter name (e.g. backend_weight0). If you plan - to use only one PostgreSQL server, specify it by - backend_weight0. In the raw mode, set to 1.

-

- New backend weights can be added in this parameter by reloading a configuration file. -

-

- From pgpool-II 2.2.6/2.3 or later, you can change this value by re-loading the configuration file. - This will take effect only for new established client sessions. - This is useful if you want to prevent any query sent to slaves to perform - some administrative work in master/slave mode. -

-
-

backend_data_directory (string) *

-

Specifies the database cluster directory of the backends. - Multiple backends can be specified by adding a number - at the end of the parameter name - (e.g. backend_data_directory0). - If you don't plan to use online recovery, you do not need to specify this parameter. -

-
-

backend_flag (string) *

-

Controls various backend behavior. - Multiple backends can be specified by adding a number at the end of the parameter name - (e.g. backend_flag0). -

-

- Currently followings are allowed. - Multiple falgs can be specified by using "|". -

- - - - - - - - -
ALLOW_TO_FAILOVERAllow to failover or detaching backend. This is the default. -

You cannot specify with DISALLOW_TO_FAILOVER at a same time.

-
DISALLOW_TO_FAILOVERDisallow to failover or detaching backend. - This is usefull when you protect backend by using HA(High Availability) softwares - such as Heartbeat or Pacemaker. -

You cannot specify with ALLOW_TO_FAILOVER at a same time.

-
-
- - -

Logs

- - - - - - - - - {if paramExists('log_destination')} - - - - - - - {/if} - - - - - - - - - - - - - - - - - - - - - - - - {if paramExists('log_per_node_statement')} - - - - - {/if} - - {if paramExists('log_standby_delay')} - - - - - {/if} - - {if paramExists('syslog_facility')} - - - - - - - - - - - - {/if} - - {if paramExists('debug_level')} - - - - - - - {/if} - - - - - - - -
{$message.strParameter|escape}{$message.strDetail|escape}
Where to log
-

log_destination (string) *

-

PgPool II supports several methods for logging server messages, - including stderr and syslog. The default is to log to stderr. -

-

Note: you will need to alter the configuration of your system's syslog daemon - in order to make use of the syslog option for log_destination. - PgPool can log to syslog facilities LOCAL0 through LOCAL7 - (see syslog_facility), - but the default syslog configuration on most platforms will discard all such messages. - You will need to add something like -

-
-local0.*    /var/log/pgpool.log
-
-

to the syslog daemon's configuration file to make it work.

-
What to log
-

print_timestamp (string) *

-

Add timestamps to the logs when set to true. Default is true.

-
-

log_connections (bool)

-

If true, all incoming connections will be printed to the log.

-
-

log_hostname (bool)

-

- If true, ps command status will show the client's hostname instead - of an IP address. Also, if log_connections is enabled, - hostname will be logged. -

-
-

log_statement (bool)

-

Produces SQL log messages when true. This is similar to the - log_statement parameter in PostgreSQL. It produces logs even if the - debug option was not passed to pgpool-II at startup. -

-
-

log_per_node_statement (bool)

-

Similar to log_statement, - except that it prints logs for each DB node separately. - It can be useful to make sure that replication is working, for example. -

-
-

log_standby_delay (string)

-

- Specifies how to log the replication delay. - If 'none' is specified, no log is written. - If 'always', log the delay every time health checking is performed. - If 'if_over_threshold' is specified, the log is written when the delay - exceeds delay_threshold. - The default value for log_standby_delay is 'none'. - You need to reload pgpool.conf if you change this directive. -

-
Syslog specific
-

syslog_facility (string) *

-

When logging to syslog is enabled, this parameter determines the syslog "facility" to be used. - You can choose from LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7; - the default is LOCAL0. See also the documentation of your system's syslog daemon. -

-
-

syslog_ident (string) *

-

When logging to syslog is enabled, this parameter determines the program name - used to identify PgPool messages in syslog logs. The default is pgpool. -

-
Debug
-

debug_level (integer)

-

- Debug message verbosity level. 0 means no message, greater than 1 - means more verbose message. Default value is 0. -

-
- - -

File Locations

- - - - - - - - - - - - - - - {if paramExists('pid_file_name')} - - - - - {/if} - - - - - - - -
{$message.strParameter|escape}{$message.strDetail|escape}
-

logdir (string) *

-

pgpool_status is written into this directory.

-
-

pid_file_name (string) *

-

Full path to a file which contains pgpool's process id. - Default is "/var/run/pgpool/pgpool.pid". -

-
- - -

Connection Pooling

- - - - - - - - - - - - - - - - - - - - - - - - -
{$message.strParameter|escape}{$message.strDetail|escape}
-

connection_cache (bool) *

Caches connections to backends when set to true. Default is true.
-

reset_query_list (string)

-

Specifies the SQL commands sent to reset the connection - to the backend when exiting a session. Multiple commands can be - specified by delimiting each by ";". - Default is the following, but can be changed to suit your system. -

-reset_query_list = 'ABORT; DISCARD ALL'
-
-

- Commands differ in each PostgreSQL versions. Here are the recommended settings. -

- - - - - - - -
PostgreSQL versionreset_query_list value
7.1 or beforeABORT
7.2 to 8.2ABORT; RESET ALL; SET SESSION AUTHORIZATION DEFAULT
8.3 or laterABORT; DISCARD ALL
-

"ABORT" is not issued when not in a transaction block for 7.4 or later.

-
- - -

Replication

- - - - - - - - - - - - - - - - - - - - - - - - - {if paramExists('lobj_lock_table')} - - - - - {/if} - - - - - - - - - {if paramExists('failover_if_affected_tuples_mismatch')} - - - - - {/if} - - {if paramExists('fail_over_on_backend_error')} - - - - - {/if} - - - - - - - -
{$message.strParameter|escape}{$message.strDetail|escape}
-

replication_mode (bool) *

-

Setting to true enables replication mode. Default is false.

-
-

replicate_select (bool)

-

When set to true, pgpool-II replicates SELECTs in replication mode. If false, - pgpool-II only sends them to the Master DB. Default is false. -

-

- If a SELECT query is inside an explicit transaction block, replicate_select and - load_balance_mode will have an effect on how replication works. - Details are shown below. -

- - - - - - - - - - - - - - - - - - - - - - - - - -
SELECT is inside a transaction blockYYYNNNYN
replicate_select is trueYYNNYYNN
load_balance_mode is trueYNNNYNYY
results(R:replication, M: send only to master, L: load balance)RRMMRRML
-
-

insert_lock (bool)

-

If replicating a table with SERIAL data type, the SERIAL column value may differ between the backends. - This problem is avoidable by locking the table explicitly - (although, transactions' parallelism will be severely degraded). - To achieve this, however, the following change must be made: -

-
-INSERT INTO ...
-
-

- to -

-
-BEGIN;
-LOCK TABLE ...
-INSERT INTO ...
-COMMIT;
-
-

When insert_lock is true, pgpool-II automatically adds - the above queries each time an INSERT is executed - (if already in transaction, it simply adds LOCK TABLE ....). -

-

pgpool-II 2.2 or later, it automatically detects whether the table - has a SERIAL columns or not, so it will never lock the table if it does not use SERIAL columns. -

-

Default value is false.

-
-

lobj_lock_table (string)

-

- This parameter specifies a table name used for large object replication control. - If it is specified, pgpool will lock the table specified by - lobj_lock_table and generate a large object id by looking into - pg_largeobject system catalog and then call lo_create to create the large object. - This procedure guarantees that pgpool will get the same large object id in all DB - nodes in replication mode. -

-

- The table specified by lobj_lock_table must be created beforehand. If - you create the table in template1, any database created afterward will have it. -

-

- If lobj_lock_table has empty string(''), the feature is disabled - (thus large object replication will not work). The default value for - lobj_lock_table is ''. -

-
Degenerate handling
-

replication_stop_on_mismatch (bool)

-

When set to true, if all backends don't return the same packet kind, - the backends that differ from most frequent result set are degenerated. -

-

- A typical use case is a SELECT statement being part of a transaction, - replicate_select set to true, - and SELECT returning a different number of rows among backends. - Non-SELECT statements might trigger this though. - For example, a backend succeeded in an UPDATE, while others failed. - Note that pgpool does NOT examine the content of records returned by SELECT. -

-

- If set to false, the session is terminated and the backends are not degenerated. - Default is false.

-
-

failover_if_affected_tuples_mismatch (bool)

-

When set to true, if backends don't return the same number of affected - tuples during an INSERT/UPDATE/DELETE, - the backends that differ from most frequent result set are degenerated. - If the frequencies are same, the group which includes master DB node - (a DB node having the youngest node id) is remained and other groups are degenerated. -

-

- If set to false, the session is terminated and the backends are not - degenerated. Default is false.

-
-

fail_over_on_backend_error

-

- If true, and an error occurs when reading/writing to the backend communication, - pgpool-II will trigger the fail over procedure. - If set to false, pgpool will report an error and disconnect the session. - If you set this parameter to off, it is recommended that you turn on health checking. - Please note that even if this parameter is set to off, however, pgpool will also do the fail over when - pgpool detects the administrative shutdown of postmaster. -

-
- - -

Load Balancing Mode

- - - - - - - - - - - - - - - - - - - - {if paramExists('white_function_list')} - - - - - - - - - - {/if} - - - - - - - -
{$message.strParameter|escape}{$message.strDetail|escape}
-

load_balance_mode (bool) *

-

When set to true, SELECT queries will be - distributed to each backend for load balancing. Default is false.

-
-

ignore_leading_white_space (bool)

-

pgpool-II ignores white spaces at the beginning of SQL - queries while in the load balance mode. It is useful if used with - APIs like DBI/DBD:Pg which adds white spaces against the user's will. -

-
-

white_function_list (string)

-

- Specify a comma separated list of function names that do not - update the database. SELECTs using functions not specified in this list are - neither load balanced, nor replicated if in replication mode. - In master slave mode, such SELECTs are sent to master (primary) only. -

-

You can use regular expression into the list to match function name, - for example if you have prefixed all your read only function with 'get_' or 'select_' -

-
-white_function_list = 'get_.*,select_.*'
-
-
-

black_function_list (string)

-

- Specify a comma separated list of function names that do - update the database. SELECTs using functions specified in this list are neither - load balanced, nor replicated if in replication mode. - In master slave mode, such SELECTs are sent to master(primary) only. -

-

You can use regular expression into the list to match function name, - for example if you have prefixed all your updating functions with 'set_', 'update_', 'delete_' or 'insert_': -

-
-black_function_list = 'nextval,setval,set_.*,update_.*,delete_.*,insert_.*'
-
-

- Only one of these two lists can be filled in a configuration. -

-

- Prior to pgpool-II 3.0, nextval() and setval() were known to do - writes to the database. You can emulate this by using white_function_list and - black_function_list: -

-
-white_function_list = ''
-black_function_list = 'nextval,setval,lastval,currval'
-
-

- Please note that we have lastval and currval in addition to nextval and setval. - Though lastval() and currval() are not writing functions, - it is wise to add lastval() and currval() to avoid errors - in the case when these functions are accidentaly load balanced to other DB node. - Because adding to black_function_list will prevent load balancing. -

-
- - -

Master/Slave Mode

- - - - - - - - - - - - - - - - {if paramExists('sr_check_period')} - - - - - - - - - - - - - - - - - {/if} - - {if paramExists('delay_threshold')} - - - - - {/if} - - {if paramExists('follow_master_command')} - - - - - - {/if} - - - - - - -
{$message.strParameter|escape}{$message.strDetail|escape}
-

master_slave_mode *

-

- If true, use to couple pgpool-II with another master/slave - replication software (like Slony-I and Streaming replication), which is responsible - for doing the actual data replication. -

-
Streaming
-

sr_check_period (integer) *

-

- This parameter specifies the interval between the streaming replication - delay checks in seconds. Default is 0, which means the check is disabled. -

-
-

sr_check_user (string) *

-

- The user name to perform streaming replication check. This user must - exist in all the PostgreSQL backends. - Otherwise, the check causes an error. - Note that sr_check_user and sr_check_password are used even sr_check_period is 0. - To identify the primary server, pgpool-II sends function call request to each backend. - sr_check_user and sr_check_password are used for this session. -

-
-

sr_check_password (string) *

-

- The password of the user to perform streaming replication check. - If no password is required, specify empty string(''). -

-
-

delay_threshold (integer)

-

- Specifies how to log the replication delay. - If 'none' is specified, no log is written. - If 'always', log the delay every time health checking is performed. - If 'if_over_threshold' is specified, the log is written when the delay - exceeds delay_threshold. - The default value for log_standby_delay is 'none'. - You need to reload pgpool.conf if you change this directive. -

-
Special commands
-

follow_master_command (string) *

-

- This parameter specifies a command to run in master/slave streaming replication mode - only after a master failover. - pgpool-II replaces the following special characters with backend specific information. -

- - - - - - - - - - - - - -
Special characterDescription
%dBackend ID of a detached node.
%hHostname of a detached node.
%pPort number of a detached node.
%DDatabase cluster directory of a detached node.
%MOld master node ID.
%mNew master node ID.
%HHostname of the new master node.
%POld primary node ID.
%%'%' character
- -

- You need to reload pgpool.conf if you change follow_master_command. -

-

- If follow_master_command is not empty, when a master failover is - completed in master/slave streaming replication, - pgpool degenerate all nodes excepted the new master and starts new child processes - to be ready again to accept connections from clients. - After this, pgpool run the command set into the 'follow_master_command' for each - degenerated nodes. Typically the command should be used to recover the slave from the new master - by call the pcp_recovery_node command for example. -

-
- - - -

Parallel Mode and Query Cache

- - - - - - - - - - - - - - - {if paramExists('enable_query_cache')} - - - - - {/if} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
{$message.strParameter|escape}{$message.strDetail|escape}
-

parallel_mode *

-

- If true, activate parallel execution of queries. - Tables can be split, and data distributed to each node. - Moreover, the replication and the load balancing features can be used at the same time. -

-
-

enable_query_cache *

-

- If true, the Query cache can be used in all modes in pgpool-II. - The query cache allow to reuse the SELECT result to boost the performance. -

-
-

pgpool2_hostname (string) *

-

Where pgpool works.

-
System DB info
-

system_db_hostname (string) *

-

The hostname where the System DB is. - Specifying the empty string ('') means the System DB is on the same host as - pgpool-II, and will be accessed via a UNIX domain socket. - Default is 'localhost'.

-
-

system_db_port (integer) *

-

The port number for the System DB. Default is 5432.

-
-

system_db_dbname (string) *

-

The partitioning rules and other information will be defined - in the database specified here. - Default is 'pgpool'. -

-

system_db_schema (string) *

-

The partitioning rules and other information will be defined - in the schema specified here. Default value is: - 'pgpool_catalog'.

-
-

system_db_user (string) *

-

The username to connect to the System DB. Default is 'pgpool'.

-
-

system_db_password (string) *

-

The password for the System DB. If no password is necessary, - set the empty string ('').

-
- - -

Health Check

- - - - - - - - - - - - - - - - - - - - - - - - - {if paramExists('health_check_password')} - - - - - {/if} - - {if paramExists('health_check_max_retries')} - - - - - {/if} - - {if paramExists('health_check_retry_delay')} - - - - - {/if} - - - - - - -
{$message.strParameter|escape}{$message.strDetail|escape}
-

health_check_timeout (integer)

-

pgpool-II periodically tries to connect to the backends - to detect any error on the servers or networks. - This error check procedure is called "health check". - If an error is detected, pgpool-II tries to perform failover or degeneration. -

-

- This parameter serves to prevent the health check from waiting for a long - time in a case such as un unplugged network cable. - The timeout value is in seconds. Default value is 20. - 0 disables timeout (waits until TCP/IP timeout). -

-

- This health check requires one extra connection to each backend, - so max_connections in the - postgresql.conf needs to be incremented as needed. -

-
-

health_check_period (integer)

-

This parameter specifies the interval between the health - checks in seconds. Default is 0, which means health check is disabled. -

-
-

health_check_user (string)

-

The user name to perform health check. - This user must exist in all the PostgreSQL backends. - Otherwise, health check causes an error. -

-
-

health_check_password (string)

-

The password of the user to perform health check.

-
-

health_check_max_retries (integer)

-

The maximum number of times to retry a failed health check - before giving up and initiating failover. - This setting can be useful in spotty networks, when it is expected that health - checks will fail occasionally even when the master is fine. - Default is 0, which means do not retry. - It is advised that you disable fail_over_on_backend_error - if you want to enable health_check_max_retries. -

-
-

health_check_retry_delay (integer)

-

- The amount of time (in seconds) to sleep between failed health check - retries (not used unless health_check_max_retries is > 0). - If 0, then retries are immediate (no delay). -

-
- - -

Failover and Failback

- - - - - - - - - - - - - - - - - - - - - - - - -
{$message.strParameter|escape}{$message.strDetail|escape}
-

failover_command

-

- This parameter specifies a command to run when a node is detached. - pgpool-II replaces the following special characters with backend specific - information. -

- - - - - - - - - - - - - -
Special characterDescription
%dBackend ID of a detached node.
%hHostname of a detached node.
%pPort number of a detached node.
%DDatabase cluster directory of a detached node.
%MOld master node ID.
%mNew master node ID.
%HHostname of the new master node.
%POld primary node ID.
%%'%' character
- -

- When a failover is performed, pgpool kills all its child processes, which - will in turn terminate all active sessions to pgpool. Then pgpool invokes - the failover_command and waits for its completion. - After this, pgpool starts new child processes and is ready again to accept - connections from clients. -

-
-

failback_command

-

- This parameter specifies a command to run when a node is attached. - pgpool-II replaces special the following characters with backend specific - information. -

- - - - - - - - - - - - - -
Special characterDescription
%dBackend ID of an attached node.
%hHostname of an attached node.
%pPort number of an attached node.
%DDatabase cluster path of an attached node.
%MOld master node
%mNew master node
%HHostname of the new master node.
%POld primary node ID.
%%'%' character
-
- - - -

Online Recovery

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {if paramExists('client_idle_limit_in_recovery')} - - - - - {/if} - - - - - - - -
{$message.strParameter|escape}{$message.strDetail|escape}
-

recovery_user (string)

-

- This parameter specifies a PostgreSQL username for online recovery. - Default is 'nobody'. -

-
-

recovery_password (string)

-

- This parameter specifies a PostgreSQL password for online recovery. -

-
-

recovery_1st_stage_command (string)

-

- This parameter specifies a command to be run by master(primary) PostgreSQL server - at the first stage of online recovery. - The command file must be put in the database cluster directory for security reasons. - For example, if recovery_1st_stage_command = 'sync-command', - then pgpool-II executes $PGDATA/sync-command. -

-

- recovery_1st_stage_command will receive 3 parameters as follows: -

-
    -
  1. path to master(primary) database cluster
  2. -
  3. PostgreSQL host name to be recovered
  4. -
  5. path to database cluster to be recovered
  6. -
-

- Note that pgpool-II accepts connections and queries while - recovery_1st_stage command is executed. You can retrieve and update data during this stage. -

-
-

recovery_2nd_stage_command (string)

-

- This parameter specifies a command to be run by master(primary) PostgreSQL server - at the second stage of online recovery. - The command file must be put in the database cluster directory for security reasons. - For example, if recovery_2nd_stage_command = 'sync-command', then - pgpool-II executes $PGDATA/sync-command. -

-

- recovery_2nd_stage_command will receive 3 parameters as follows: -

-
    -
  1. path to master(primary) database cluster
  2. -
  3. PostgreSQL host name to be recovered
  4. -
  5. path to database cluster to be recovered
  6. -
-

-

- Note that pgpool-II does not accept connections and queries while - recovery_2nd_stage_command is running. - Thus if a client stays connected for a long time, - the recovery command won't be executed. pgpool-II waits - until all clients have closed their connections. The command is only executed - when no client is connected to pgpool-II anymore. -

-
-

recovery_timeout (integer)

-

- pgpool does not accept new connections during the second stage. If a client - connects to pgpool during recovery processing, it will have to wait for the end of the recovery. -

-

- This parameter specifies recovery timeout in sec. If this timeout is reached, - pgpool cancels online recovery and accepts connections. 0 means no wait. -

-
-

client_idle_limit_in_recovery (integer)

-

Similar to client_idle_limit but only takes effect in the second - stage of recovery. A client being idle for client_idle_limit_in_recovery - seconds since its last query will get disconnected. - This is useful for preventing the pgpool recovery from being - disturbed by a lazy client or if the TCP/IP connection between the client - and pgpool is accidentally down (a cut cable for instance). - If set to -1, disconnect the client immediately. - The default value for client_idle_limit_in_recovery is 0, - which means the feature is turned off. -

-

- If your clients are very busy, pgpool-II cannot enter the second stage of - recovery whatever value of client_idle_limit_in_recovery you may choose. - In this case, you can set client_idle_limit_in_recovery to -1 - so that pgpool-II immediately disconnects such busy clients before entering the second stage. -

-
- - - -{if paramExists('use_watchdog')} -

Watchdog

- - - - - - - - - - - {* --------------------------------------------------------------------- *} - - - - - - - - {* --------------------------------------------------------------------- *} - - - - - - - - - - - - - {* --------------------------------------------------------------------- *} - - - - - - - - - - - - - {if paramExists('wd_authkey')} - - - - - {/if} - - {* --------------------------------------------------------------------- *} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {* --------------------------------------------------------------------- *} - {if paramExists('clear_memqcache_on_escalation')} - - - - - - - - - - - - {/if} - - {* --------------------------------------------------------------------- *} - - - {if paramExists('wd_lifecheck_method')} - - - - - {/if} - - - - - - - {* --------------------------------------------------------------------- *} - {if paramExists('wd_lifecheck_method')} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {/if} - - {* --------------------------------------------------------------------- *} - - - - - - - - - - - - - {if paramExists('wd_lifecheck_dbname')} - - - - - - - - - - - - - - - {/if} - - {* --------------------------------------------------------------------- *} - - - - - - - - - - - - - - - - - - - - - - - - -
{$message.strParameter|escape}{$message.strDetail|escape}
Enabling
-

use_watchdog (bool) *

-

If on, activates watchdog. Default is off.

-
Connection to up stream servers
-

trusted_servers (string) *

-

- The list of trusted servers to check the up stream connections. - Each server is required to respond to ping. - Specify a comma separated list of servers such as "hostA,hostB,hostC". -

-
-

ping_path (string) *

-

This parameter specifies a path of ping command for monitoring connection to the upper servers. - Set the only path such as "/bin".

-
Watchdog communication Settings
-

wd_hostname (string) *

-

Specifies the hostname or IP address for mutual monitoring of watchdog processes.

-
-

wd_port (integer) *

-

Specifies the port number for mutual monitoring of watchdog processes.

-
-

wd_authkey (string) *

-

Specifies the authentication key used in watchdog communication. - All the pgpool-II must have the same key. Packets from watchdog of wrong key will be rejects. - This authentication is applied also for heatrbeat singals if lifecheck method is heartbeat mode.

-

If this is empty (default), watchdog doesn't conduct authenticate.

-
Virtual IP address
-

delegate_IP (string) *

-

Specifies the virtual IP address (VIP) of pgpool-II that is connected from client servers - (application servers etc.). - When a pgpool is switched from standby to active, the pgpool takes over this VIP.

-
-

ifconfig_path (string) *

-

This parameter specifies a path of a command to switch the IP address. - Set the only path such as "/sbin".

-
-

if_up_cmd (string) *

-

This parameter specifies a command to bring up the virtual IP. - Set the command and parameters such as "ifconfig eth0:0 inet $_IP_$ netmask 255.255.255.0". - $_IP_$ is replaced by the IP address specified in delegate_IP.

-
-

if_down_cmd (string) *

-

This parameter specifies a command to bring down the virtual IP. - Set the command and parameters such as "ifconfig eth0:0 down".

-
-

arping_path (string) *

-

This parameter specifies a path of a command to send an ARP request after the virtual IP is switched. - Set the only path such as "/usr/sbin".

-
-

arping_cmd (string) *

-

This parameter specifies a command to send an ARP request after the virtual IP is switched. - Set the command and parameters such as "arping -U $_IP_$ -w 1". - $_IP_$ is replaced by the IP address specified in delegate_IP.

-
Behaivor on escalation Setting
-

clear_memqcache_on_escalation (bool) *

-

If this is on, watchdog clears all the query cache in the shared memory - when pgpool-II escaltes to active. - This prevents the new active pgpool-II from using old query caches inconsistence to the old active. - Default is on.

-
-

wd_escalation_command (string) *

-

pgpool-II がアクティブに昇格した時に、ここで指定したコマンドが実行されます。 - コマンドは、仮想 IP が立ち上がる直前のタイミングで実行されます。

-
Lifecheck Setting (common)
-

wd_lifecheck_method (string) *

-

Specifies the method of life check. This is either of 'heartbeat' (default) or 'query'.

-
-
heartbeat
-
- Watchdog sends heartbeat singals (UDP packets) periodically to other pgpool-II. - Watchdog also receives the signals from other pgpool-II. - If there are no signal for a certain period, watchdog regards is as failure of the pgpool-II. -
-
query
-
watchdog sends monitoring queries to other pgpool-II and checks the response.
-
-
-

wd_interval (integer) *

-

This parameter specifies the interval between life checks of pgpool-II in second. - (A number greater than or equal to 1)

-
Lifecheck Setting (heartbeat mode)
-

wd_heartbeat_port (integer) *

-

Specifies the port number to receive heartbeat signals.

-
-

wd_heartbeat_keepalive (integer) *

-

Specifies the interval time in seconds of sending heartbeat signals. Default is 2.

-
-

wd_heartbeat_deadtime (integer) *

-

If there are no heartbeat signal for the period specified by this option, - watchdog regards it as failure of the remote pgpool-II.

-
-

heartbeat_destination (string) *

-

Specifies the destination of heartbeat signals by IP address or hostname. - You can use multiple destination. - The number at the end of the parameter name is referred as "destination number", - and it starts from 0. - This works only heartbeat mode.

-
-

heartbeat_destination (string) *

-

Specifies the port number of destination of heartbeat signals - which is specified by heartbeat_destinationX. - This is usually the same value as wd_heartbeat_port - You must use another value if the port number is unusable on a certain host or - there are more than two pgpool-IIs in a host. - The number at the end of the parameter name is referred as "destination number", - and it starts from 0. - This works only heartbeat mode.

-
-

heartbeat_device (string) *

-

Specifies the network device name for sending heartbeat signals to - destination specified by heartbeat_destinationX. - You can use the same device for different distinations. - The number at the end of the parameter name is referred as "destination number", - and it starts from 0. - This works only heartbeat mode. - In addition, this works only when pgpool-II has root privilege and are running on Linux, - because this uses SO_BINDTODEVICE socket option.

-
Lifecheck Setting (query mode)
-

wd_life_point (string) *

-

The times to retry a failed life check of pgpool-II. (A number greater than or equal to 1)

-
-

wd_lifecheck_query (string) *

-

Actual query to check pgpool-II. Default is "SELECT 1".

-
-

wd_lifecheck_dbnam(string) *

-

The database name connected for checking pgpool-II. Default is "template1"

-
-

wd_lifecheck_user(string) *

-

The user name to check pgpool-II. This user must exist in all the PostgreSQL backends. - Default is "nobody" .

-
-

wd_lifecheck_query (string) *

-

The password of the user to check pgpool-II. Default is "".

-
Servers to monitor
-

other_pgpool_hostname (string)

-

Specifies the hostname pgpool-II server to be monitored. - The number at the end of the parameter name is referred as "server id", and it starts from 0.

-
-

other_pgpool_port (integer)

-

Specifies the port number for pgpool on pgpool-II server to be monitored. - The number at the end of the parameter name is referred as "server id", and it starts from 0. -

-
-

other_wd_port (integer)

-

Specifies the port number for watchdog on pgpool-II server to be monitored. - The number at the end of the parameter name is referred as "server id", and it starts from 0. -

-
-{/if} - - -{if hasMemqcache()} -

On Memory Query Cache

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
{$message.strParameter|escape}{$message.strDetail|escape}
-

memory_cache_enabled (bool)

-

- To enable the memory cache functionality, set this to on (default is off). -

-
-

memqcache_method (string) *

-

- You can choose a cache strage: shared memory or memcached - (you can't use the both). - Query cache with shared memory is fast and easy because you don't have to install and config memcached, - but restricted the max size of cache by the one of shared memory. - Query cache with memcached needs a overhead to access network, but you can set the size as you like. -

-

- Memory cache behavior can be specified by memqcache_method directive. - Either "shmem"(shared memory) or "memcached". Default is shmem. -

-
Memcached specific
-

memqcache_memcached_host (string) *

-

- Specify the host name or the IP adddress in which memcached works. - If it is the same one as pgpool-II, set 'localhost'. -

-
-

memqcache_memcached_port (integer) *

-

- Specify the port number of memcached. Default is 11211. -

-
Shared memory specific
-

memqcache_total_size (integer) *

-

- Specify the size of shared memory as cache strage in bytes. -

-
-

memqcache_max_num_cache (integer) *

-

- Specify the number of cache entries. - This is used to define the size of cache management space - (you need this in addition to memqcache_total_size). - The management space size can be calculated by: - memqcache_max_num_cache * 48 bytes. - Too small number will cause an error while registering cache. - On the other hand too large number is just a waste of space. -

-
-

memqcache_cache_block_size (integer) *

-

- If cache storage is shared memory, pgpool uses the memory devided by memqcache_cache_block_size. - SELECT result is packed into the block. - However because the SELECT result cannot be placed in several blocks, it cannot be cached if it is larger - than memqcache_cache_block_size. - memqcache_cache_block_size must be greater or equal to 512. -

-
Common
-

memqcache_expire (integer) *

-

- If the size of a SELECT result is larger than memqcache_maxcache bytes, -

-

- To avoid this problem, you have to set memqcache_maxcache larger. - But if you use shared memory as the cache strage, - it must be lower than memqcache_cache_block_size. - If memqcached, it must be lower than the size of slab (default is 1 MB). -

-
-

memqcache_maxcache (integer) *

-

- If the size of a SELECT result is larger than memqcache_maxcache bytes. -

-

- To avoid this problem, you have to set memqcache_maxcache larger. - But if you use shared memory as the cache strage, - it must be lower than memqcache_cache_block_size. - If memqcached, it must be lower than the size of slab (default is 1 MB). -

-
-

memqcache_auto_cache_invalidation (bool) *

-

- If on, automatically deletes cache realted to the updated tables. - If off, does not delete caches. Default is on. - This parameter and memqcache_expire. are orthogonal. -

-
-

memqcache_oiddir (string) *

-

- Full path to the directory where oids of tables used by SELECTs are stored. - Under memqcache_oiddir there are directories named database oids, - and under each of them there are files named table oids used by SELECTs. - In the file pointers to query cache are stored. - They are used as keys to delete caches. -

-

- Directories and files under memqcache_oiddir are deleted whenever pgpool-II restarts. -

-
-

white_memqcache_table_list (string)

-

- Specify a comma separated list of table names whose SELECT results are to be cached even if - they are VIEWs or unlogged tables. You can use regular expression (to which added automatically ^ and $). -

-

- TABLEs and VIEWs in both of white_memqcache_table_list and - black_memqcache_table_list are cached. -

-
-

black_memqcache_table_list(string)

-

- Specify a comma separated list of table names whose SELECT results are NOT to be cached. - You can use regular expression (to which added automatically ^ and $). -

-
-{/if} - - -{if paramExists('relcache_expire')} -

Others

- - - - - - - - - - - - - - - {if paramExists('relcache_size')} - - - - - {/if} - - {if paramExists('check_temp_table')} - - - - {/if} - - - - - - -
{$message.strParameter|escape}{$message.strDetail|escape}
-

relcache_expire (integer)

-

- Life time of relation cache in seconds. 0 means no cache - expiration(the default). - The relation cache is used for cache the query result against PostgreSQL - system catalog to obtain various information including table structures - or if it's a temporary table or not. The cache is maintained in a pgpool - child local memory and being kept as long as it survives. -

-

- If someone modify the table by using ALTER TABLE or some such, the relcache - is not consistent anymore. -

-

- For this purpose, relcache_expiration controls the life time of the cache. -

-
-

relcache_size (integer)

-

Size of relation cache in seconds. Default is 256. - If you see following message frequently, increase the number.

-
-"pool_search_relcache: cache replacement happend"
-
-
-

check_temp_table (bool)

-

If on, enable temporary table check in SELECT statements. - This initiates queries against system catalog of primary/master thus increases load of primary/master. - If you are absolutely sure that your system never uses temporary tables and - you want to save access to primary/master, you could turn this off. Default is on.

-
-{/if} -