pgpool-II 3.2.2, 3.1.6, 3.0.10, and pgpoolAdmin 3.2.2 released

From: Yugo Nagata <nagata(at)sraoss(dot)co(dot)jp>
To: pgpool-general(at)pgpool(dot)net, pgsql-announce(at)postgresql(dot)org
Subject: pgpool-II 3.2.2, 3.1.6, 3.0.10, and pgpoolAdmin 3.2.2 released
Date: 2013-02-08 10:31:22
Message-ID: 20130208193122.463d7626.nagata@sraoss.co.jp
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-announce

pgpool Gobal Development Group is pleased to announce the availability
of pgpool-II 3.2.2, 3.1.6, 3.0.10, and pgpoolAdmin 3.2.2 the latest stable
versions of each major series.

You can download them here:
http://pgpool.net/mediawiki/index.php/Downloads

============================================================================
pgpool-II 3.2.2
============================================================================

- Fix compile errors on FreeBSD. (Tatsuo Ishii)

- Fix pgpool does not recognize VIEWs other than in default schema,
which is usually "public". (Tatsuo Ishii)

This makes pgpool to create caches for such a VIEW's query results,
which of course should not be allowed.

Problem reported and patch provided by jgentsch in bug id #30.

#30 pgpool 3.2.1 - views in schema other than public are caching
Reporter: 2012-10-19 23:13
Date: jgentsch
http://www.pgpool.net/mantisbt/view.php?id=30

- Fix race condition when using md5 authentication. (Tatsuo Ishii)

The file descriptor to pool_passwd is opened in pgpool main and pgpool
child inherits it. When concurrent connections try to authenticate md5
method, they call pool_get_passwd and seek the fd and cause random md5
auth failure because underlying fd is shared. Fix is, let individual
pgpool child open the file by calling pool_reopen_passwd_file.

Problem reported and analyzed by Jason Slagle in pgpool-general:1141.

[pgpool-general: 1141] Possible race condition in pool_get_passwd
From: Jason Slagle
Date: Sun, 28 Oct 2012 01:12:52 -0400
http://www.sraoss.jp/pipermail/pgpool-general/2012-October/001160.html

- Clarify load balance condition information in manual. (Tatsuo Ishii)

- Fix segfault due to bug with query cache array handling. (Tatsuo Ishii)

The cache arrary is used to keep temporary cache results in a transaction.
If there are more than 128 SELECTs in a transaction, the module expands
cache_arrary by using realloc. However it does not record the new pointer
returned by realloc. So the module keeps on using the old pointer which is
absoleted.

This problem is reported in bug track #31 by jgentsch.

#31 pgpool V3_2_STABLE - segfault in pool_memqcache.c:2529
Reporter: jgentsch
Date: 2012-10-23 06:25
http://www.pgpool.net/mantisbt/view.php?id=31

- Fix hung up while repeating pcp_attach_node and pcp_detatch_node
(Tatsuo Ishii)

When node status is changed by pcp_attach_node and pcp_detatch_node,
failover() sends SIGUSR1 to pcp_child process expecting it exits to
refresh node status. In this situation lots of pgpool children exit and
produce SIGCHLD as well. The SIGCHLD handler reaper() tries catch all
SIGCHLD but sometimes it fails depending on the system load and timing.
If SIGCHLD produced by pcp child is not caught, the process becomes
zombie and never restarted.

This problem is reported in bug track #32 (by oleg_myrk) etc.

#32 PGPool hangs on pcp_attach/detach
Reporter: oleg_myrk
 Date: 2012-10-24 00:01
http://www.pgpool.net/mantisbt/view.php?id=32

- Fix pool_send_severity_message() not to use uninitialized memory.
(Tatsuo Ishii)

It cause a segmentaion fault.
Reported in Bug #33's attached valgrind output by dudee.

#33 pgpool-II 3.2.1 segfault
Reporter: dudee
Date: 2012-10-30 19:16
http://www.pgpool.net/mantisbt/view.php?id=33

- Fix bug with query cache returning incorrect data in some cases when a
persistent table and temp table have same name. (Tatsuo Ishii)

Here is a sequence to trigger the bug:

1) CREATE TABLE t1(i int); -- create a persistent table
2) INSERT INTO t1 VALUES(1);
3) SELECT * FROM t1; -- query cache entry created
4) CREATE TEMP TABLE t1(i int); -- create a temp table
5) SELECT * FROM t1; -- query cache entry mistakenly created!

Problem is #3 creates relcache entry for t1, and #5 incorrecly uses it
and believes that temp table t1 is not a temp table.

- Add a description about "-f" to help message. (Tatsuo Ishii)

- Fix reaper() not to exit wait3() loop when catches pcp or worker child
exit event. (Tatsuo Ishii)

Otherwise reaper() mistakenly ignore some process exit event and make a
risk of creating zombie process and forgetting to create new process.

Problem reported and fix suggested by Goto in [pgpool-general-jp: 1123].
http://www.sraoss.jp/pipermail/pgpool-general-jp/2012-November/001122.html
(in Japanese)

- Fix a typo of configure help message. (Yugo Nagata)

- Add wd_hostname to pool_process_reporting.c. (Yugo Nagata)

Otherwise, wd_hostname is not contained in results of SHOW pool_status and
cp_pool_status.

- Fix connect_inet_domain_socket_by_port() to not error out when connect(2)
returns EISCONN (Socket is already connected) error. (Tatsuo Ishii)

This could happen with non blocking socket and should be treated as normal.
Per bug track #29 (by spork) and pgpool-general 1218 (by Mikola Rose).

#29 pgpool 3.2.1 cannot connect to db hosts
Reporter: spork
Date: 2012-10-18 15:03
http://www.pgpool.net/mantisbt/view.php?id=29

[pgpool-general: 1218] pgpool 3.2.1 - Health check failing to connect
From: Mikola Rose
Date: Tue, 4 Dec 2012 20:21:55 +0000
http://www.sraoss.jp/pipermail/pgpool-general/2012-December/001237.html

- Fix health_check() to check the health check timer before retrying
with template1 database. (Tatuo Ishii)

Without this, the retry with node 0 always fails because health check timer
may be already expired.

- Fix pool_search_relcache() to use MASTER or MASTER_NODE_ID macro, rather
than REAL_MASTER_NODE_ID. (Tatsuo Ishii)

In case node 0 fail back in streaming replication mode, pgpool does not
restart child process. So REAL_MASTER_NODE_ID looks for node 0 con info,
which is not present until new connection to backend made. Thus referring
to node con info results in segfault. MASTER or MASTER_NODE_ID are safe in
this situation because they look at cached former master node id.

- Fix long standing bug "portal not found" error when replication delay
is too much in streaming replication mode. (Tatsuo Ishii)

The bug had been there since the delay threshold was introduced.

We changed destination DB node if delay threshold exceeds in bind,
describe and execute. However, if parse sends to different node, bind,
describe or execute will fail because no parsed statement or portal
exists. Solution is, not to send to different parse node even
if delay threshold is too much.

- Fix pg_md5 to output "\n" after user inputs password. (Yugo Nagata)

- Fix to print error message when the port number for watchdog is already used.
(Yugo Nagata)

This issue was reported by Will Ferguson in [pgpool-general: 1167].

[pgpool-general: 1167] Re: Watchdog error - wd_init: delegate_IP already exists
From: Will Ferguson
Date: Tue, 6 Nov 2012 13:03:36 +0000
http://www.sraoss.jp/pipermail/pgpool-general/2012-November/001186.html

- Fix child_exit() to not call send_frontend_exits() if there's no
connection pool. (Tatsuo Ishii)

Otherwise, it segfaults because send_frontend_exits() referes to objects
pointed to by pool_connection_pool. Per bug track #44 by tuomas.

#44 pgpool went haywire after slave shutdown triggering master failover
Reporter: tuomas
Date: 2012-12-11 00:33
http://www.pgpool.net/mantisbt/view.php?id=4

- Fix bug that only tables in white_memqcache_table_list was cached when
black_memqcache_table_list has any tables. (Yugo Nagata)

- Fix read_startup_packet() to reset alarm and free StartupPacket when
pool_read() returns 0 which means incorrect packet length. (Nozomi Anzai)

Previously, authentication timeout occurs when connected by a program
monitoring the pgpool port.It is reported in bug track #35 by tuomas.

#35 Authentication is timeout
Reporter: tuomas
Date: 2012-11-20 11:54
http://www.pgpool.net/mantisbt/view.php?id=35

- Fix long standing bug with pool_open(). (Tatsuo Ishii)

It initializes wrong buffer pointer. Actually this is harmless because the
pointer is initialized by prior memset() call, though.

- Log that failover is avoided because "fail_over_on_backend_error" is
turned off. (Tatsuo Ishii)

- Fix LISTEN/NOTIFY handling bugs. (Tatsuo Ishii)

1) In streaming replication mode:

Session 1: LISTEN aaa;
Session 2: NOTIFY aaa;
Session 1: LISTEN aaa; --- hangs

(If LISTEN and NOTIFY are issued in a same session, it works fine.)

We assume that packets come from all nodes. However in streaming
replication mode, notification message only comes from primary
node and we should avoid reading from standby nodes.

2) In streaming replication mode: If primary node is not node 0, it
hangs like #1 even if fix applies. This is because MASTER_NODE_ID
macro (actually pool_virtual_master_db_node_id()) always returns
REAL_MASTER_NODE_ID, which is node 0 (if it is alive). The function
should return PRIMARY_NODE_ID in master/slave mode.

3) In replication mode, LISTEN/NOTIFY simply does not work. In the
mode, NOTIFY is sent to all backends. However the order of arrival of
'Notification response' is not necessarily the master first and then
slaves. So if it arrives slave first, we should try to read from
master, rather than just discard it. Fixed in pool_process_query().

4) In replication mode, if LISTEN and NOTIFY are issued in a same
session, the session is disconnected because do_command() may receive
other than 'N', 'E', 'S' and 'C'. The solution is, put 'A' packet on a
stack and pop out when it is convenient. For this purpose, new
functions pool_push(), pool_pop() and pool_stacklen() are added.

This probmel is reported in but grack #45 by rpashin.

#45 LISTEN/NOTIFY doesn't work if cluster contains more then 1 node in
streaming replication mode
Reporter: rpashin
Date: 2012-12-12 00:09:
http://www.pgpool.net/mantisbt/view.php?id=45

Considering the size of the patch, I do not back patch to 3.1 or
before(so far, we have not heard any complaints on 3.1 or before).

- Fix connect_inet_domain_socket_by_port() to call select(2) rather than
error out when connect(2) returns EINPROGESS or EALREADY error.
(Tatsuo Ishii)

When using non-blocking socket, despite the errors like
"Connection timed out", actually connection has been established.
To solve the problem we should use select(2) to wait for connection
establishing when connect(2) reports EINPROGRESS or EALREADY, instead
of doing a retry tight loop.

This problem is reported in bug track #46 by mcousin.

#46 Watchdog failing to connect sometimes
Reporter: mcousin
Date: 2012-12-15 01:01
http://www.pgpool.net/mantisbt/view.php?id=46

- Add caution to increase num_init_children if watchdog enabled in manual.
(Tatsuo Ishii)

See [pgpool-general: 1330] for more details.

[pgpool-general: 1330] WatchDog and pgool sudden stop working
From: Tomas Halgas
Date: Fri, 18 Jan 2013 14:47:23 +0100
http://www.sraoss.jp/pipermail/pgpool-general/2013-January/001350.html

- Fix segmentation fault while pgpool-II stating up or fail over when
watchdog is enabled. (Yugo Nagata)

This is caused by wrong usage of pthread, namely pthread_detach and
pthread_join are mixed together. Solution is to use pthread_join only
if we need to get status of child thread. BTW, the problem could occu
on moderately modern OS such as Fedora 17, but the reason why the problem
is not observed on other OSs is, just we were lucky.

Problem reported in [pgpool-general: 1179] by Lonni J Friedman.

[pgpool-general: 1179] 3.2.1 segfaults at startup on Fedora17.
From: Lonni J Friedman
Date: Mon, 12 Nov 2012 15:58:29 -0800
http://www.sraoss.jp/pipermail/pgpool-general/2012-November/001198.html

Patch provided by chads in bug track #48.

pthread_detach is being used wrong; causes pgpool to segfault.
Reporter: chads
Date: 2013-01-16 05:44
http://www.pgpool.net/mantisbt/view.php?id=48

- Avoid split-brain situation reported in [pgpool-general: 1046] (Yugo Nagata)

After all backend nodes are detached from pgpools and then some backend node
are attached to these, multiple active pgpools could exist simultaneously,
that is to say, split-brain situation occurs.

In this fix, when once all backend DB nodes are detached from pgpool,
the pgpool stays DOWN status until this is restarted. The pgpool in DOWN
status cannot escalate to active (delegate IP holder), so split-brain
situation is avoided.

[pgpool-general: 1046]
watchdog enabled delegate_IP on multiple nodes simultaneously
From: Lonni J Friedman
Date: Wed, 26 Sep 2012 09:05:09 -0700
http://www.sraoss.jp/pipermail/pgpool-general/2012-September/001064.html

- Avoid a possible hang during the active pgpool exits. (Yugo Nagata)

When exiting, the active pgpool brings down the virtual IP and then
sends a packet to other pgpools. However, the packet sometimes is sent
before the virtual IP is brought down completely. In this case the packet
sender is set to this IP. When the IP is brought down before other pgpools
respond, the active pgpool can not recieve the response, and hang up.

In this fix, the active pgpool confirms that the virtual IP is brought
down before sending the packet.

- Modify descriptions of restrictions on watchdog. (Yugo Nagata)

- Modify pgpool.conf.sample* and documents to correct information of
whether a certain parameter change requires restart. (Yugo Nagata)

- Add pool_passwd option to pgpool.conf.sample*, pool_process_reporting.c,
and documents. (Yugo Nagata)

Otherwise, wd_hostname is not contained in results of SHOW pool_status and
pcp_pool_status.

============================================================================
pgpool-II 3.1.6
============================================================================

- Fix race condition when using md5 authentication. (Tatsuo Ishii)

The file descriptor to pool_passwd is opened in pgpool main and pgpool
child inherits it. When concurrent connections try to authenticate md5
method, they call pool_get_passwd and seek the fd and cause random md5
auth failure because underlying fd is shared. Fix is, let individual
pgpool child open the file by calling pool_reopen_passwd_file.

Problem reported and analyzed by Jason Slagle in pgpool-general:1141.

[pgpool-general: 1141] Possible race condition in pool_get_passwd
From: Jason Slagle
Date: Sun, 28 Oct 2012 01:12:52 -0400
http://www.sraoss.jp/pipermail/pgpool-general/2012-October/001160.html

- Fix hung up while repeating pcp_attach_node and pcp_detatch_node
(Tatsuo Ishii)

When node status is changed by pcp_attach_node and pcp_detatch_node,
failover() sends SIGUSR1 to pcp_child process expecting it exits to
refresh node status. In this situation lots of pgpool children exit and
produce SIGCHLD as well. The SIGCHLD handler reaper() tries catch all
SIGCHLD but sometimes it fails depending on the system load and timing.
If SIGCHLD produced by pcp child is not caught, the process becomes
zombie and never restarted.

This problem is reported in bug track #32 (by oleg_myrk) etc.

#32 PGPool hangs on pcp_attach/detach
Reporter: oleg_myrk
 Date: 2012-10-24 00:01
http://www.pgpool.net/mantisbt/view.php?id=32

- Fix pool_send_severity_message() not to use uninitialized memory.
(Tatsuo Ishii)

It cause a segmentaion fault.
Reported in Bug #33's attached valgrind output by dudee.

#33 pgpool-II 3.2.1 segfault
Reporter: dudee
Date: 2012-10-30 19:16
http://www.pgpool.net/mantisbt/view.php?id=33

- Add a description about "-f" to help message. (Tatsuo Ishii)

- Fix reaper() not to exit wait3() loop when catches pcp or worker child
exit event. (Tatsuo Ishii)

Otherwise reaper() mistakenly ignore some process exit event and make a
risk of creating zombie process and forgetting to create new process.

Problem reported and fix suggested by Goto in [pgpool-general-jp: 1123].
http://www.sraoss.jp/pipermail/pgpool-general-jp/2012-November/001122.html
(in Japanese)

- Fix pool_search_relcache() to use MASTER or MASTER_NODE_ID macro, rather
than REAL_MASTER_NODE_ID. (Tatsuo Ishii)

In case node 0 fail back in streaming replication mode, pgpool does not
restart child process. So REAL_MASTER_NODE_ID looks for node 0 con info,
which is not present until new connection to backend made. Thus referring
to node con info results in segfault. MASTER or MASTER_NODE_ID are safe in
this situation because they look at cached former master node id.

- Fix long standing bug "portal not found" error when replication delay
is too much in streaming replication mode. (Tatsuo Ishii)

The bug had been there since the delay threshold was introduced.

We changed destination DB node if delay threshold exceeds in bind,
describe and execute. However, if parse sends to different node, bind,
describe or execute will fail because no parsed statement or portal
exists. Solution is, not to send to different parse node even
if delay threshold is too much.

- Fix pg_md5 to output "\n" after user inputs password. (Yugo Nagata)

- Fix child_exit() to not call send_frontend_exits() if there's no
connection pool. (Tatsuo Ishii)

Otherwise, it segfaults because send_frontend_exits() referes to objects
pointed to by pool_connection_pool. Per bug track #44 by tuomas.

#44 pgpool went haywire after slave shutdown triggering master failover
Reporter: tuomas
Date: 2012-12-11 00:33
http://www.pgpool.net/mantisbt/view.php?id=4

- Fix read_startup_packet() to reset alarm and free StartupPacket when
pool_read() returns 0 which means incorrect packet length. (Nozomi Anzai)

Previously, authentication timeout occurs when connected by a program
monitoring the pgpool port.It is reported in bug track #35 by tuomas.

#35 Authentication is timeout
Reporter: tuomas
Date: 2012-11-20 11:54
http://www.pgpool.net/mantisbt/view.php?id=3

- Fix long standing bug with pool_open(). (Tatsuo Ishii)

It initializes wrong buffer pointer. Actually this is harmless because the
pointer is initialized by prior memset() call, though.

- Modify documents to correct information of whether a certain parameter
change requires restart. (Yugo Nagata)

- Add pool_passwd option to pgpool.conf.sample*, and documents. (Yugo Nagata)

============================================================================
pgpool-II 3.0.10
============================================================================

- Fix race condition when using md5 authentication. (Tatsuo Ishii)

The file descriptor to pool_passwd is opened in pgpool main and pgpool
child inherits it. When concurrent connections try to authenticate md5
method, they call pool_get_passwd and seek the fd and cause random md5
auth failure because underlying fd is shared. Fix is, let individual
pgpool child open the file by calling pool_reopen_passwd_file.

Problem reported and analyzed by Jason Slagle in pgpool-general:1141.

[pgpool-general: 1141] Possible race condition in pool_get_passwd
From: Jason Slagle
Date: Sun, 28 Oct 2012 01:12:52 -0400
http://www.sraoss.jp/pipermail/pgpool-general/2012-October/001160.html

- Fix pool_send_severity_message() not to use uninitialized memory.
(Tatsuo Ishii)

It cause a segmentaion fault.
Reported in Bug #33's attached valgrind output by dudee.

#33 pgpool-II 3.2.1 segfault
Reporter: dudee
Date: 2012-10-30 19:16
http://www.pgpool.net/mantisbt/view.php?id=33

- Fix reaper() not to exit wait3() loop when catches pcp or worker child
exit event. (Tatsuo Ishii)

Otherwise reaper() mistakenly ignore some process exit event and make a
risk of creating zombie process and forgetting to create new process.

Problem reported and fix suggested by Goto in [pgpool-general-jp: 1123].
http://www.sraoss.jp/pipermail/pgpool-general-jp/2012-November/001122.html
(in Japanese)

- Fix pool_search_relcache() to use MASTER or MASTER_NODE_ID macro, rather
than REAL_MASTER_NODE_ID. (Tatsuo Ishii)

In case node 0 fail back in streaming replication mode, pgpool does not
restart child process. So REAL_MASTER_NODE_ID looks for node 0 con info,
which is not present until new connection to backend made. Thus referring
to node con info results in segfault. MASTER or MASTER_NODE_ID are safe in
this situation because they look at cached former master node id.

- Fix long standing bug "portal not found" error when replication delay
is too much in streaming replication mode. (Tatsuo Ishii)

The bug had been there since the delay threshold was introduced.

We changed destination DB node if delay threshold exceeds in bind,
describe and execute. However, if parse sends to different node, bind,
describe or execute will fail because no parsed statement or portal
exists. Solution is, not to send to different parse node even
if delay threshold is too much.

- Fix pg_md5 to output "\n" after user inputs password. (Yugo Nagata)

- Fix child_exit() to not call send_frontend_exits() if there's no
connection pool. (Tatsuo Ishii)

Otherwise, it segfaults because send_frontend_exits() referes to objects
pointed to by pool_connection_pool. Per bug track #44 by tuomas.

#44 pgpool went haywire after slave shutdown triggering master failover
Reporter: tuomas
Date: 2012-12-11 00:33
http://www.pgpool.net/mantisbt/view.php?id=44

- Fix read_startup_packet() to reset alarm and free StartupPacket when
pool_read() returns 0 which means incorrect packet length. (Nozomi Anzai)

Previously, authentication timeout occurs when connected by a program
monitoring the pgpool port.It is reported in bug track #35 by tuomas.

#35 Authentication is timeout
Reporter: tuomas
Date: 2012-11-20 11:54
http://www.pgpool.net/mantisbt/view.php?id=35

- Fix long standing bug with pool_open(). (Tatsuo Ishii)

It initializes wrong buffer pointer. Actually this is harmless because the
pointer is initialized by prior memset() call, though.

- Add a description about "-f" to help message. (Tatsuo Ishii)

- Modify documents to correct information of whether a certain parameter
change requires restart. (Yugo Nagata)

- Add pool_passwd option to pgpool.conf.sample*, and documents. (Yugo Nagata)

============================================================================
pgpoolAdmin 3.2.2
============================================================================

- Fix typo: health_check_pasword -> health_check_password (Nozomi Anzai)

- Fix the type of delay_threshold: bool -> integer (Nozomi Anzai)

- Add pool_passwd parameter (Yugo Nagata)

--
Yugo Nagata <nagata(at)sraoss(dot)co(dot)jp>

Browse pgsql-announce by date

  From Date Subject
Next Message Julien Tachoires 2013-02-08 14:46:24 pg_activity 0.3.0
Previous Message Magnus Hagander 2013-02-07 10:49:46 PostgreSQL 2013-02-07 Security Update Release