[pgpool-general-jp: 1175] pgpool-II 3.2.5, 3.1.8, 3.0.12 released
Yugo Nagata
nagata @ sraoss.co.jp
2013年 7月 10日 (水) 14:49:48 JST
長田です。
pgpool-II 3.2.5, 3.1.8, 3.0.12 をリリースしましたのでお知らせいたします。
これらは、各メジャーバージョンの最新安定版です。
以下からダウンロードすることができます。
http://pgpool.net/mediawiki/index.php/Downloads
===========================================================================
pgpool-II 3.2.5
===========================================================================
---------------------------------------------------------------------------
* バグ修正
---------------------------------------------------------------------------
- オンラインリカバリ時のフェイルバックの完了待機でタイムアウト処理をするよう
にしました。(Tatsuo Ishii)
これによりリカバリが永遠に終わらず pgpool-II が終了できなくなる状況を回避
します。この現象は特に follow_master_command の実行中に起こり得ました。
- ストリームレプリケーションモードでの follow_master_command 実行時に、%H に
新しいプライマリノードが正しく割り当てられないバグを修正しました。
(Tatsuo Ishii)
- watchdog ソケット作成時に、connect() の前に select() を実行していたのを修正
しました。(Yugo Nagata)
未接続のソケットで select() を実行したときの処理は未定義で、プラットフォー
ムで異なります。Linux では 2 を返し、結果としては無害です。しかし、Solaris
では 0 を返し、これはタイムアウトと区別がつかないため、 watchdog が正しく動
いていませんでした。
- pgpool_regclass がインストールされていない場合に生じるエラーを修正しました。
(Tatsuo Ishii)
pgpool_rgcalss が存在しない場合に、pool_has_pgpool_regcalss() で使われてい
るクエリが失敗していました。このバグは 3.2.4 からのものです。詳しくは、
[pgpool-general:1722] を参照してください。
[pgpool-general: 1722] [PgPool-II 3.2.4] pgpool_regclass now mandatory?
http://www.sraoss.jp/pipermail/pgpool-general/2013-May/001749.html
- PostgreSQL がエラーを返したときに do_query() がハングしないよう修正しました。
(Tatsuo Ishii)
典型的な症状が「pg_stat_activety によると SELECT が実行されたままのように見
える」というものです。これを解決するため、pgpool-II は当該プロセスを終了させ、
既存のコネクションを捨てるように修正しました。
- watchdog を有効にしたときに、フェイルオーバの最中に起こりうるデッドロックを
修正しました。(Yugo Nagata)
このバグは、バグトラッカ #54 にて arshu arora さんによって報告されました。
#54 pgpool-II semaphore lock problem
http://www.pgpool.net/mantisbt/view.php?id=54
- 拡張プロトコルの際に do_query で発生しうるハングアップを修正しました。
(Tatsuo Ishii)
これは insert_lock が有効で、pgpool_catalog.insert_lock が存在することに起
こり得ます。詳しくは [pgpool-general: 1684] を参照してください。
[pgpool-general: 1684] insert_lock hangs
http://www.sraoss.jp/pipermail/pgpool-general/2013-May/001711.html
- COMMIT 時エラーに不要なバックエンド切り離しを行わないようにしました。
(Tatsuo Ishii)
マスタースレーブモードで、COMMIT 時にマスターノードでエラーが発生していたと
しても、他のスレーブノードが正常な場合にはバックエンドを切り離す必要はあり
ません。これは、遅延トリガーのために "kind mismatch error" が発生しうるから
です。
- トランザクション内の DML で、クエリキャッシュの無効化が失敗する場合があるの
を修正しました。(Tatsuo Ishii)
CREATE TABLE t1(i INTEGER);
CREATE TABLE t2(i INTEGER);
SELECT * FROM t1;
BEGIN;
DELETE FROM t2 WHERE i = 0;
INSERT INTO t1(i) VALUES(1);
COMMIT;
SELECT * FROM t1;
上の SQL で、COMMIT 発行時に pgpool は t2 のキャッシュを削除しようとします
が、実際には t2 のOID テーブルエントリがないのでこれは失敗します。そのとき
に、t1 の OID テーブルの確認までも失敗とみなされ、直前の t1 の SELECT 結果
のキャッシュが不正に残っていました。
この問題はバグトラッカ #58 で wms さんにより報告されました。
#58 query cache invalidation does not fire for multiple DML in transaction
http://www.pgpool.net/mantisbt/view.php?id=58
- pgpool_regclass を pg_catalog スキーマに登録するよう修正しました。
(Tatsuo Ishii)
これは postgres_fdw のような、スキーマ検索パスが pg_catalog に限定されてい
るクライアントに対応するために必要です。
- pg_md5 コマンドで起こりうるクラッシュを修正しました。(Muhammad Usama)
- オンメモリクエリキャッシュ有効時に発生するセグメンテーション違反が修正され
ました。(Tatsuo Ishii))
これは、拡張クエリモードで実行されたクエリが長い結果を返すときに発生します。
このバグはバグトラック #63 にて、harukat さんにより報告、解析され、テストケ
ースが提供されました。
#63 Child process was terminated by segmentation fault with memcached
http://www.pgpool.net/mantisbt/view.php?id=63
- スタートアップパケットに PostgreSQL ユーザ情報が含まれていなかった場合に発
生する子プロセスのセグメンテーション違反を修正しました。(Yugo Nagata)
このバグは以下を実行することにより再現できます。
$ psql -p 9999 -U ''
enable_pool_hba が有効の場合は子プロセスがセグメンテーション違反で異常終了
し、無効の場合には以下のメッセージがログに出力されていました。
ERROR: pool_discard_cp: cannot get connection pool for user (null)
database (null)
また、両方の場合で psql はフロントエンドに何のメッセージ出力せずに終了して
いました。修正後は、スタートアップパケットに PostgreSQL ユーザが指定されて
いない場合には以下のメッセージがログとフロントエンドの両方に出力されます。
これは PostgreSQLと同じ振る舞いです。
FATAL: no PostgreSQL user name specified in startup packet
- オンメモリクエリを有効にした時の拡張クエリの処理におけるメモリ割り当てロジ
ックを修正しました。(Tatsuo Ishii)
バインドパラメータ付きの拡張クエリで、1024 バイト以上の長いクエリ文字列が渡
されたときに、十分なメモリ割り当てができていませんでした。
- マニュアルの ssl_sa_cert, ssl_ca_cert_dir オプションの説明を SSL セクション
に移動しました。(Yugo Nagata)
- ssl_sa_cert, ssl_ca_cert_dir オプションの説明を日本語マニュアルに追加しまし
た。(Yugo Nagata)
- pcp_recovery_node コマンドで、バックエンドノード番号をチェックするように修
正しました。(Yugo Nagata)
不正な値が使用された場合、リカバリで実行されるスクリプトの引数に空の値が渡
されており、誤動作の原因となっていました。特にベースバックアップを行うスク
リプトで、rsync が関係のないファイルを削除してしまうことがありました。
===========================================================================
pgpool-II 3.1.8
===========================================================================
---------------------------------------------------------------------------
* バグ修正
---------------------------------------------------------------------------
- man ページに -D オプションの記述を追加しました。(Tatsuo Ishii)
- オンラインリカバリ時のフェイルバックの完了待機でタイムアウト処理をするよう
にしました。(Tatsuo Ishii)
これによりリカバリが永遠に終わらず pgpool-II が終了できなくなる状況を回避
します。この現象は特に follow_master_command の実行中に起こり得ました。
- ストリームレプリケーションモードでの follow_master_command 実行時に、%H に
新しいプライマリノードが正しく割り当てられないバグを修正しました。
(Tatsuo Ishii)
- PostgreSQL がエラーを返したときに do_query() がハングしないよう修正しました。
(Tatsuo Ishii)
典型的な症状が「pg_stat_activety によると SELECT が実行されたままのように見
える」というものです。これを解決するため、pgpool-II は当該プロセスを終了させ、
既存のコネクションを捨てるように修正しました。
- 拡張プロトコルの際に do_query で発生しうるハングアップを修正しました。
(Tatsuo Ishii)
これは insert_lock が有効で、pgpool_catalog.insert_lock が存在することに起
こり得ます。詳しくは [pgpool-general: 1684] を参照してください。
[pgpool-general: 1684] insert_lock hangs
http://www.sraoss.jp/pipermail/pgpool-general/2013-May/001711.html
- COMMIT 時エラーに不要なバックエンド切り離しを行わないようにしました。
(Tatsuo Ishii)
マスタースレーブモードで、COMMIT 時にマスターノードでエラーが発生していたと
しても、他のスレーブノードが正常な場合にはバックエンドを切り離す必要はあり
ません。これは、遅延トリガーのために "kind mismatch error" が発生しうるから
です。
- pgpool_regclass を pg_catalog スキーマに登録するよう修正しました。
(Tatsuo Ishii)
これは postgres_fdw のような、スキーマ検索パスが pg_catalog に限定されてい
るクライアントに対応するために必要です。
- pg_md5 コマンドで起こりうるクラッシュを修正しました。(Muhammad Usama)
- スタートアップパケットに PostgreSQL ユーザ情報が含まれていなかった場合に発
生する子プロセスのセグメンテーション違反を修正しました。(Yugo Nagata)
このバグは以下を実行することにより再現できます。
$ psql -p 9999 -U ''
enable_pool_hba が有効の場合は子プロセスがセグメンテーション違反で異常終了
し、無効の場合には以下のメッセージがログに出力されていました。
ERROR: pool_discard_cp: cannot get connection pool for user (null)
database (null)
また、両方の場合で psql はフロントエンドに何のメッセージ出力せずに終了して
いました。修正後は、スタートアップパケットに PostgreSQL ユーザが指定されて
いない場合には以下のメッセージがログとフロントエンドの両方に出力されます。
これは PostgreSQLと同じ振る舞いです。
FATAL: no PostgreSQL user name specified in startup packet
- マニュアルの ssl_sa_cert, ssl_ca_cert_dir オプションの説明を SSL セクション
に移動しました。(Yugo Nagata)
- ssl_sa_cert, ssl_ca_cert_dir オプションの説明を日本語マニュアルに追加しまし
た。(Yugo Nagata)
- pcp_recovery_node コマンドで、バックエンドノード番号をチェックするように修
正しました。(Yugo Nagata)
不正な値が使用された場合、リカバリで実行されるスクリプトの引数に空の値が渡
されており、誤動作の原因となっていました。特にベースバックアップを行うスク
リプトで、rsync が関係のないファイルを削除してしまうことがありました。
===========================================================================
pgpool-II 3.0.12
===========================================================================
---------------------------------------------------------------------------
* バグ修正
---------------------------------------------------------------------------
- man ページに -D オプションの記述を追加しました。(Tatsuo Ishii)
- オンラインリカバリ時のフェイルバックの完了待機でタイムアウト処理をするよう
にしました。(Tatsuo Ishii)
これによりリカバリが永遠に終わらず pgpool-II が終了できなくなる状況を回避
します。この現象は特に follow_master_command の実行中に起こり得ました。
- PostgreSQL がエラーを返したときに do_query() がハングしないよう修正しました。
(Tatsuo Ishii)
典型的な症状が「pg_stat_activety によると SELECT が実行されたままのように見
える」というものです。これを解決するため、pgpool-II は当該プロセスを終了させ、
既存のコネクションを捨てるように修正しました。
- 拡張プロトコルの際に do_query で発生しうるハングアップを修正しました。
(Tatsuo Ishii)
これは insert_lock が有効で、pgpool_catalog.insert_lock が存在することに起
こり得ます。詳しくは [pgpool-general: 1684] を参照してください。
[pgpool-general: 1684] insert_lock hangs
http://www.sraoss.jp/pipermail/pgpool-general/2013-May/001711.html
- COMMIT 時エラーに不要なバックエンド切り離しを行わないようにしました。
(Tatsuo Ishii)
マスタースレーブモードで、COMMIT 時にマスターノードでエラーが発生していたと
しても、他のスレーブノードが正常な場合にはバックエンドを切り離す必要はあり
ません。これは、遅延トリガーのために "kind mismatch error" が発生しうるから
です。
- pgpool_regclass を pg_catalog スキーマに登録するよう修正しました。
(Tatsuo Ishii)
これは postgres_fdw のような、スキーマ検索パスが pg_catalog に限定されてい
るクライアントに対応するために必要です。
- pg_md5 コマンドで起こりうるクラッシュを修正しました。(Muhammad Usama)
- スタートアップパケットに PostgreSQL ユーザ情報が含まれていなかった場合に発
生する子プロセスのセグメンテーション違反を修正しました。(Yugo Nagata)
このバグは以下を実行することにより再現できます。
$ psql -p 9999 -U ''
enable_pool_hba が有効の場合は子プロセスがセグメンテーション違反で異常終了
し、無効の場合には以下のメッセージがログに出力されていました。
ERROR: pool_discard_cp: cannot get connection pool for user (null)
database (null)
また、両方の場合で psql はフロントエンドに何のメッセージ出力せずに終了して
いました。修正後は、スタートアップパケットに PostgreSQL ユーザが指定されて
いない場合には以下のメッセージがログとフロントエンドの両方に出力されます。
これは PostgreSQLと同じ振る舞いです。
FATAL: no PostgreSQL user name specified in startup packet
- マニュアルの ssl_sa_cert, ssl_ca_cert_dir オプションの説明を SSL セクション
に移動しました。(Yugo Nagata)
- ssl_sa_cert, ssl_ca_cert_dir オプションの説明を日本語マニュアルに追加しまし
た。(Yugo Nagata)
- pcp_recovery_node コマンドで、バックエンドノード番号をチェックするように修
正しました。(Yugo Nagata)
不正な値が使用された場合、リカバリで実行されるスクリプトの引数に空の値が渡
されており、誤動作の原因となっていました。特にベースバックアップを行うスク
リプトで、rsync が関係のないファイルを削除してしまうことがありました。
--
Yugo Nagata <nagata @ sraoss.co.jp>
pgpool-general-jp メーリングリストの案内