Pgpool-II 4.4.9 文書 | |||
---|---|---|---|
前のページ | 上に戻る | 付録 A. リリースノート | 次のページ |
リリース日: 2023-08-17
共有メモリの初期化後にのみ、システム終了コールバックを呼び出すようにしました。(Muhammad Usama)
共有メモリの取得に失敗して、終了時コールバックが呼び出された場合、クリーンアップ関数は、共有メモリに存在するprocess_infoにアクセスする際にセグメンテーション違反を引き起こす可能性がありました。 process_infoがNULLのときに終了コールバックからの中断で修正することもできますが、共有メモリの初期化に成功した後に関数をインストールする方がより良いアプローチです。 なぜなら、システムの残りの部分は常にprocess_infoがNULLになることはないと想定しており、また、子プロセスが生成される前にクリーンアップをする必要はないからです。
process_management_modeがdynamicのとき、max_spare_childrenをnum_init_childrenより大きな値で設定できないようにしました。(Muhammad Usama)
num_init_childrenがmax_spare_childrenよりも小さい場合、設定の後処理の段階でエラーが発生していました。 このコミットでは、process_management_strategyの設定に基き、起動時に生成される子プロセスの数も調整するようにしました。 aggressiveのプロセス管理戦略の場合はmax_spare_childrenの数のプロセス、それ以外の2つの戦略の場合はmin_spare_childrenの数のプロセスが生成されます。
ログメッセージをダウングレードしました。(Tatsuo Ishii)
https://www.pgpool.net/mantisbt/view.php?id=806で、ログファイルに以下ログエントリがあることが指摘されています:
LOG: pool_pending_message_set_flush_request: msg: Parse
デバッグ用のメッセージであるため、ロブレベルはDEBUG*であるべきでした。そのため、ログレベルをLOGからDEBUG5に変更しました。
一部のシステムカタログ照会関数にスキーマ修飾を追加しました。(Tatsuo Ishii)
Coverityの警告を修正しました。(Tatsuo Ishii)
クエリキャッシュのモジュールで、time_tの値がint32変数に割り当てられる問題を修正しました。 Coverityの指摘に従いまして、変数の型をint64に変更しました。 また、time_tの差分を計算するためにdifftime()を使用しました。これは推奨される方法です。 https://www.jpcert.or.jp/sc-rules/c-msc05-c.html
find_primary_node_repeatedlyがsearch_primary_node_timeout指定時間内で終了しない問題を修正しました。(Bo Peng)
v2プロトコルを利用する場合のクラッシュを修正しました。(bug 807)(Tatsuo Ishii)
read_kind_from_backend()で統計データを蓄積する際、v2プロトコルのケースには対応していませんでした。
MCanivezからバグ報告とパッチを提供いただきました。
マルチステートメントにおけるPREPAREの利用を修正しました。(Tatsuo Ishii)
マルチステートメントの二番目以降の位置にPREPAREが含まれている場合、その後のbindメッセージでプリペアドステートメントを利用すると、送信されたメッセージにプリペアドステートメントが保存されないため、「unable to bind」エラーが発生していました。
この問題を修正するために、ステートメントを解析した後にそのようなケースが見つかった場合、名前付きステートメントのクエリコンテキストを作成し、送信メッセージのリストに追加するようにしました。
議論: https://www.pgpool.net/pipermail/pgpool-general/2023-July/008931.html
この修正のため、リグレッションテスト079..multi_prepareを追加しました。
pgprotoをパラメータを使用するbindメッセージを処理できるようにしました。(Tatsuo Ishii)
以前、pgprotoはパラメータを持たないbindメッセージしか処理できませんでした。
ログメッセージのタイポを修正しました。(Bo Peng)
CTE SEARCHおよびCYCLEのリライトが抜けていた問題を修正しました。(Bo Peng)
ネイティブレプリケーションモードでは、Pgpool-IIはWRITEクエリ内の日付/時刻関数をタイムスタンプにリライトする必要がありますが、CTE SEARCHおよびCYCLEのリライト処理が不足していました。
src/sample/pgpool.conf.sample-streamにある重複したpcp_listen_address設定を削除しました。(Bo Peng)
共有ロック中のクエリキャッシュの更新を回避しました。(Tatsuo Ishii)
期限切れのクエリキャッシュエントリが共有ロックの下で変更される可能性があるとbug 795で指摘されていました。 これは、クエリキャッシュで使用される共有メモリの破損を引き起こす可能性がありました。 これを修正するために、キャッシュエントリを変更する前に一時的に共有ロックを解除し、その後排他ロックを取得するようにしました。 ロック解除と再取得の間に、他の誰かによってメタデータが変更されていないことを確認するために、再びキャッシュエントリのメタデータを取得する必要があります。
V4.4でクエリキャッシュの共有ロックが導入されたため、V4.4 STABLEブランチにバックポートされました。
delay_threshold_by_timeとprefer_lower_delay_standbyを修正しました。(Tatsuo Ishii)
4.4 でdelay_threshold_by_timeが導入された時にこれらが壊されていました。
where_to_send内でdelay_threshold_by_timeがチェックされていなかったため、レプリケーションが遅延している場合に負荷分散が壊れていました。
delay_threshold_by_timeとprefer_lower_standby_delayの両方が有効な場合、select_load_balancing_nodeが機能しなくなっていました。
この問題を修正するため、where_to_sendとselect_load_balancing_nodeを修正しました。 また、delay_threshold_by_timeのテストケースを033.prefer_lower_standby_delayに追加しました。
議論: https://www.pgpool.net/pipermail/pgpool-general/2023-June/008864.html
サンプルスクリプトreplication_mode_recovery_2nd_stage.sample内の変数名が間違っていたため修正しました。(Bo Peng)
loggerプロセスのアプリケーション名記載漏れを修正しました。(Bo Peng)
停止モードの意味を明確にしました。(Tatsuo Ishii)
4.2.10リリースノートにあった誤った情報を削除しました。(Bo Peng)
「pgpool_recovery拡張のスクリプトを修正しました。 (Tatsuo Ishii)」の記載を削除しました。
「8.2. Pgpool-II + Watchdogの構築の例」のSSH公開鍵認証の説明を補足しました。(Bo Peng)
負荷分散章の説明を修正しました。(Tatsuo Ishii)
一部の文章で「ストリーミングレプリケーションモード」と記述されるべきの箇所が「ネイティブレプリケーションモード」となっていました。 また、ストリーミングレプリケーションモードにおける負荷分散の追加要件に関する説明を改善しました。 いくつかのインデックスを追加しました。
オンラインリカバリーの説明を改善しました。(Bo Peng)
複数のpgpoolノードでwatchdogが有効になっていない場合、オンラインリカバリーのセカンドステージが適切に機能しないことについて言及しました。
時折発生する069.memory_leak_extendedテストの失敗を修正しました。(Tatsuo Ishii)
偶発するテストの失敗の原因は、pgbenchが終了した後にpsコマンドを実行する前にpgpoolの子プロセスが消えてしまうことにあると判明しました。 これにより、「DISCARD ALL cannot be executed within a pipeline」というkind mismatchのFATALエラーが発生していました。 これを修正するために、pgbenchをバックグラウンドで実行し、pgbenchが終了する前にプロセスのサイズを取得するようにしました。
議論: https://www.pgpool.net/pipermail/pgpool-hackers/2023-May/004338.html