Pgpool-II 4.0.6 文書 | |||
---|---|---|---|
前のページ | 上に戻る | 付録 A. リリースノート | 次のページ |
リリース日: 2017-07-11
[pgpool-hackers: 2400]で報告された、ログ出力中の不正なバイトを修正しました。(Muhammad Usama)
ほとんどログメッセージの修正でした。
PostgreSQLのMemoryManager APIに関する最新の変更をインポートしました。(Muhammad Usama)
[pgpool-hackers: 2390] によって報告されたデーモンモードでの相対パスの問題を修正しました。(Muhammad Usama)
PostgreSQL 10の変更に合わせて以下の関数名を修正しました。(Tatsuo Ishii)
pg_current_wal_location -> pg_current_wal_lsn pg_last_wal_replay_location -> pg_last_wal_replay_lsn
ストリーミングレプリケーションと拡張プロトコルで発生するハングアップを修正しました。(Yugo Nagata)
以下の例で再現できます。
- pgpool.confですべての読み取りクエリをスタンバイに送信するように設定しています。 - まず、トランザクションブロックで書き込みクエリを発行します。 - トランザクションをコミットした後、SELECTクエリを発行します。 - クエリを処理するときに、Parseの直後にDescribe(statement)メッセージを送信します。
JDBCを使用せず、pgprotoを利用し以下のデータでこの問題を再現できます。
'Q' "DROP TABLE IF EXISTS test_tbl" 'Y' 'Q' "CREATE TABLE test_tbl(i int)" 'Y' 'Q' "INSERT INTO test_tbl VALUES(1)" 'Y' 'P' "" "BEGIN" 0 'B' "" "" 0 0 0 'E' "" 0 'S' 'Y' 'P' "" "INSERT INTO test_tbl VALUES(1)" 0 'B' "" "" 0 0 0 'E' "" 0 'S' 'Y' 'P' "" "COMMIT" 0 'B' "" "" 0 0 0 'E' "" 0 'S' 'Y' 'P' "S_1" "SELECT * FROM test_tbl" 0 'D' 'S' "S_1" 'B' "C_1" "S_1" 0 0 0 'E' "C_1" 0 'S' 'Y' 'X'
BindとExecuteを適切なバックエンドに送信するように、parse_before_bind()
は、トランザクション中にのみ呼び出されるように修正しました。
erlangアプリケーションを使用する場合、Pgpool-II がハングする不具合を修正しました。(Tatsuo Ishii)
Erlangクライアントは "Describe"メッセージの後に "Flush"を送信し、バックエンドは "Row description" を返します。しかし、Pgpool-IIは、"Row description" メッセージを受信した後、進行中のクエリフラグをリセットすることを忘れてしまい、Pgpool-IIはバックエンドからの応答を待っていました。これがerlangクライアントのハングアップの原因でした。
Pgpool-IIが "Row description" メッセージを受信した際に、クエリ処理中のフラグをリセットするように修正しました。"no data" メッセージと同じ扱いにする必要がありました。
詳細は[pgpo ol-general: 5555]を参照してください。
間違ったターゲットノードにバインドメッセージを送信するバグを修正しました。 (bug 306) (Tatsuo Ishii)
node.jsを使用する場合に発生するクエリキャッシュのハングアップの問題を修正しました。(Tatsuo Ishii)
詳細は[pgpool-general: 5511]を参照してください。
PostgreSQL 10のストリーミングレプリケーションの遅延チェックに関する変更に合わせて修正しました。(Tatsuo Ishii)
クエリキャッシュのメモリリークを修正しました。(Tatsuo Ishii)
oidがないクエリ(BEGIN、CHECKPOINT、VACUUMなど)の場合キャッシュバッファがクリアされるべきでしたが、されていませんでした。
特定の場合に発生する拡張クエリのハングアップを修正しました。(Tatsuo Ishii)
erlang PostgreSQL APIはParse ('P')、Describe ('D')、Flush ('H')、Bind (B)、Execute('E')を生成します。この"H"はJDBCにはありませんので、今まで問題が起こらなかったと思われます。その後、Pgpool-IIは拡張クエリモードを削除し、データを読み取るバックエンドを見つけることができませんでした。したがって、Pgpool-IIはバックエンドの一部にメッセージを送信していない可能性があるため、ハングアップを引き起こすすべてのバックエンドを読み取ろうとします。
この問題を避けるために、Flushメッセージを受信後拡張クエリフラグを設定するように修正しました。
滅多に発生しないPgpool-II起動時のバグを修正しました。(Tatsuo Ishii)
プライマリノードが見つかる前にフェールオーバーの要求が受け入れられる可能性がありました。 これにより、Pgpool-IIは奇妙な状態に陥ります。障害が発生したノードはプライマリノードの場合、 プライマリノードは存在しないと判断していました。(既存のスタンバイが昇格し新しいプライマリノードになった場合でも)
詳細は[pgpool-hackers: 2321] をご参照下さい。