pgpool-II 3.2.1, 3.1.5, 3.0.9 released

From: Tatsuo Ishii <ishii(at)postgresql(dot)org>
To: pgsql-announce(at)postgresql(dot)org
Subject: pgpool-II 3.2.1, 3.1.5, 3.0.9 released
Date: 2012-10-12 09:03:44
Message-ID: 20121012.180344.233038424610959476.t-ishii@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.1, 3.1.5, 3.0.9, the latest stable versions of each major
series.

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

============================================================================
3.2.1
============================================================================

http://git.postgresql.org/gitweb/?p=pgpool2.git;a=shortlog;h=refs/heads/V3_2_STABLE

- Fix send_cached_messages(). (Tatsuo Ishii)

Before it had 8192 bytes fix length buffer for each row data and if data
exceeded 8192 bytes, it just crashed.
To fix this, eliminate copying raw data which is passed as an argument
to buffer and pass the pointer to send_message.

- Fix that extended queries failed due to query cache. (Nozomi Anzai)

- Fix read_startup_packet(). (Tatsuo Ishii)

If packet length is lower than 0, it should have returned immediately.
Otherwise it would cause memory allocation error later on.
per pgpool-general:886. Also add canceling alarm.

[pgpool-general: 886] read_startup_packet: out of memory
From: Lonni J Friedman
Date: Wed, 8 Aug 2012 10:18:15 -0700
http://www.sraoss.jp/pipermail/pgpool-general/2012-August/000896.html

- Fix too watchdog process's aggressively kill other processes when pgpool
shuts down. (Tatsuo Ishii)

watchdog process calls kill(0,SIG) to kill all processes related to
watchdog. Unfortunately this will kill not only watchdog related
processes but parent pgpool and even httpd in case when pgpool was
invoked from pgpoolAdmin because they are in the same process
group.
So for now, fix is removing call to the kill() and setpgid() because
setpgid() does nothing useful.

In the future, we should call setsid() to establish new process group
in any case.

- Fix query cache to regist such queries that start with "-- comment" or
have comments more than one. (Nozomi Anzai)

- Fix query cache to ignore multi statement. (Nozomi Anzai)

In previous, queries like "SELECT 1;UPDATE..." were cached, too, but it
was wrong.

- Add a watchdog restriction to documents. (Yugo Nagata)

- Add NOTICE message handling to s_do_auth(). (Tatsuo Ishii)

Without this, health check responses false alarm and causes failover.
per bug track:

#25 s_do_auth doesn't handle NoticeResponse (N) message
Date: 2012-08-28 03:57
Reporter: singh.gurjeet
http://www.pgpool.net/mantisbt/view.php?id=25

- Remove unnecessary/confusing debug log from s_do_auth().(Tatsuo Ishii)

- Fix buffer overrun in Execute when memory cache enabled.
(Tatsuo Ishii)

If one of bind parameter < 0, it was possible to produce more than 2
byte string for "%02X" due to sign extention.
Also use snprintf, rather than sprintf to prevent from possible buffer
overrun in the future.

- Fix long standing memory leak bug with free_select_result() since
pgpool-II 2.3 was born in December 2009. (Tatsuo Ishii)

Actually this bug only appears when operated in replication mode
(triggered by timestamp rewriting process by coincidence).
Per bug track #24:

#24 Severe memory leak in an OLTP environment
Date: 2012-08-28 03:43
Reporter: singh.gurjeet
http://www.pgpool.net/mantisbt/view.php?id=24

- Fix typo in cache_reporting(). (Tatsuo Ishii)

- Fix inifinit loop in SSL mode. (Tatsuo Ishii)

When there's pending data in SSL layer of frontend, pool_process_query()
checks pending data in backend. If there's non, it loops again and checks
frontend/backend receive buffer by using is_cache_empty().
Unfortunately it first checks pending data in SSL layer of frontend,
thus goes to backend data and checks again (infinite loop).

The solution is, if there's pending data in SSL layer of frontend and
query is not in progress, call ProcessFrontendResponse() to process new
request from frontend.

- Fix is_system_catalog() to use pgpool_regclass if available.
(Tatsuo Ishii)

- Fix memory leak in pool_get_insert_table_name(). (Tatsuo Ishii)

If session context's memory contex is used for nodeToString(), memory is
not freed until session ends.
See bug track #24 for more details.

#24 Severe memory leak in an OLTP environment
Date: 2012-08-28 03:43
Reporter: singh.gurjeet
http://www.pgpool.net/mantisbt/view.php?id=24

- Use fcntl(2) rather than flock(2) to lock oid map files. (Tatsuo Ishii)

flock(2) is not portable and cannot be used on Solaris.
Patch contributed by Ibrar Ahmed.

- Fix oversight of get_next_master_node() when operated in raw mode.
(Tatsuo Ishii)

If master node goes down, it always returned master node id 0.
See [pgpool-general: 1039] for more details.

[pgpool-general: 1039] Raw failover not working as expected on pgpool-II
v3.2.0
From: Quentin White
Date: Tue, 25 Sep 2012 07:45:34 +0000
http://www.sraoss.jp/pipermail/pgpool-general/2012-September/001057.html

- Fix segfault of do_query(). (Tatsuo Ishii)

When memqcache enabled and extended protocol is used, do_query()
accesses system catalog and use pool_read2(). Unfortunately parse message
packet is given to Parse() and the packet contents is on pool_read2's
buffer. Thus do_query could break the packet contents, and it leads to
segfault.

Solution is, allocate memory and copies the packet contents and pass to
Parse(). Note that query context holds query string, which is in the
packet as well. So we need to copy it and save the pointer in the
query context.

We think the problem is not only with Parse() but with other protocol
modules. So this fix is not Parse() only, rather for other modules. For
this purpose ProcessFrontendResponse() is changed.

See bugtrack in detai.

#21 pgpool-II 3.2.0 cannot execute sql through jdbc
Date: 2012-08-17 16:31
Reporter: elisechiang
http://www.pgpool.net/mantisbt/view.php?id=21

- Fix to set unix domain socket path for pgpool PCP communication before
setting up signal handlers. (Yugo Nagata)

Previously, unlink of the socket in exitting process was failed because
the path of the socket was not set.
Patch contributed by Gilles Darold

[pgpool-hackers: 131] Found bug with watchdog resulting in pgpool
segmentation fault
From: Gilles Darold
Date: Thu, 13 Sep 2012 18:54:42 +0200
http://www.sraoss.jp/pipermail/pgpool-hackers/2012-September/000130.html

- Fix to output the message when, in watchdog, ifup/down or arping command
does not exist. (Yugo Nagata)
- Fix long standing problem with do_query(). (Tatsuo Ishii)

When 1) extended protocol used and 2)unnamed portal is used and 3) no
explicit transaction is used, user's unnamed portal is removed by Sync
message.
This is because Sync message closes transaction and unnamed portal is
removed. This leads to "portal "" does not exist" error.

Fix is, use "Flush" message instead of Sync. Main difference between
using Sync and Flush is, Flush does not return Ready for Query message.
So do_query() does not return until all expected responses are returned.
It seems the order of messages returned from backend is random, and
do_query () manages it by using state bits.

============================================================================
3.1.5, 3.0.9
============================================================================

http://git.postgresql.org/gitweb/?p=pgpool2.git;a=shortlog;h=refs/heads/V3_1_STABLE
http://git.postgresql.org/gitweb/?p=pgpool2.git;a=shortlog;h=refs/heads/V3_0_STABLE

- Fix read_startup_packet. (Tatsuo Ishii)

If packet length is lower than 0, it should
have returned immediately. Otherwise it would cause memory allocation
error later on. per pgpool-general:886.
Also add canceling alarm.

[pgpool-general: 886] read_startup_packet: out of memory
From: Lonni J Friedman
Date: Wed, 8 Aug 2012 10:18:15 -0700
http://www.sraoss.jp/pipermail/pgpool-general/2012-August/000896.html

- Add NOTICE message handling to s_do_auth. (Tatsuo Ishii)

Without this, health check responses false alarm and causes failover.
per bug track:

#25 s_do_auth doesn't handle NoticeResponse (N) message
Date: 2012-08-28 03:57
Reporter: singh.gurjeet
http://www.pgpool.net/mantisbt/view.php?id=25

Also allow to receive ready for query packet *not* right after backend
keydata. I'm not sure if this could happen in the real world but the
protocol seems to allow this.

- Remove unnecessary/confusing debug log from s_do_auth.(Tatsuo Ishii)

- Fix inifinit loop in SSL mode. When there's pending data in SSL layer
of frontend, pool_process_query() checks pending data in backend.
(Tatsuo Ishii)

If there's non, it loops again and checks frontend/backend receive buffer
by using is_cache_empty(). Unfortunately it first checks pending data
in SSL layer of frontend, thus goes to backend data and checks again
(infinite loop).
The solution is, if there's pending data in SSL layer of frontend and
query is not in progress, call ProcessFrontendResponse() to process new
request from frontend.

- Fix is_system_catalog to use pgpool_regclass if available.
(Tatsuo Ishii)

- Fix memory leak in pool_get_insert_table_name(). (Tatsuo Ishii)

If session context's memory contex is used for nodeToString(), memory is
not freed until session ends.

- Fix possible memory leak in nodeToString(). (Tatsuo Ishii)

Since the memory context could be session context, memory used for
String object may be considerable if user session continues for hours or
days.
See bug track #24 for more details.

#24 Severe memory leak in an OLTP environment
Date: 2012-08-28 03:43
Reporter: singh.gurjeet
http://www.pgpool.net/mantisbt/view.php?id=24

- Fix long standing problem with do_query(). (Tatsuo Ishii)

When 1) extended protocol used and 2)unnamed portal is used and 3) no
explicit transaction is used, user's unnamed portal is removed by Sync
message.
This is because Sync message closes transaction and unnamed portal is
removed. This leads to "portal "" does not exist" error.

Fix is, use "Flush" message instead of Sync. Main difference between
using Sync and Flush is, Flush does not return Ready for Query message.
So do_query() does not return until all expected responses are returned.
It seems the order of messages returned from backend is random, and
do_query () manages it by using state bits.

============================================================================
--
Tatsuo Ishii
SRA OSS, Inc. Japan
English: http://www.sraoss.co.jp/index_en.php
Japanese: http://www.sraoss.co.jp

Browse pgsql-announce by date

  From Date Subject
Next Message David Fetter 2012-10-15 05:37:46 == PostgreSQL Weekly News - October 14 2012 ==
Previous Message Dave Page 2012-10-09 16:59:44 PostgreSQL Conference Europe 2012: Last chance to register!!