リリース 3.6

Pgpool-II 3.6.5 文書
前のページ | 上に戻る | 付録 A. リリースノート | 次のページ

# A.6. リリース 3.6

> Release Date: 2016-11-21

## A.6.1. 概要

Pgpool-II 3.6 の主な改善点は以下のとおりです。

- fail-over の挙動が改善されました。

  Streaming Replicationモードで、フェイルオーバーが発生した時に、ダウンしたスタンバイサーバを利用しなければ、クライアントセッションが切断されなくなります。 プライマリサーバがダウンした場合、すべてのセッションが切断されます。 また、ヘルスチェックのリトライの最中でも Pgpool-IIに接続することが可能です。 Pgpool-IIへの接続リトライする最大回数までヘルスチェックのリトライが続きます。

- 新しいコマンド PGPOOL SET が追加されました。 このコマンドを使用することで、現行セッション内で設定パラメータを変更することができるようになりました。

- Watchdogが大幅に改善されました。 以前のバージョンよりも信頼性が向上しています。

- 問合せから大量の行が返される場合、ストリーミングレプリケーション時の拡張問い合わせプロトコル（例えば、Java アプリケーションで使用される場合）の処理速度が改善されました。

- PostgreSQL 9.6 のパーサを取り込みました。

- 特定の場合に`pg_terminate_backend()`がフェイルオーバを起こさないようになりました。

- ドキュメントの形式が HTML から SGML に変更されました。

上記の項目は以下のセクションで詳しく説明します。

## A.6.2. 主な改善点

- fail-over の挙動が改善されました。(Tatsuo Ishii)

  Streaming Replication モードで、フェイルオーバーが発生した時に、ダウンしたスタンバイサーバがそのセッションで使用されていなければ、クライアントセッションが切断されなくなりました。 プライマリサーバがダウンした場合は、すべてのセッションが切断されます。 ヘルスチェックタイムアウトした場合でも、すべてのセッションが切断されます。 リトライ最大回数を超えた場合を含めて、他のヘルスチェックエラーではすべてのセッションは切断されません。

  fail-over が発生する場合にローカル負荷分散ノードの情報が重要なので、`show pool_nodes` コマンドで、ローカル負荷分散ノードの情報が利用者の便宜のために表示されるようになりました。 負荷分散ノードがダウンしたノードではない場合、フェイルオーバーによる影響はありません。

  また、ヘルスチェックのリトライの最中でも Pgpool-II に接続できるようになりました。 以前は、fail_over_on_backend_errorがオフの場合でもPgpool-IIへの接続は、ヘルスチェックのリトライをしている間はすべて失敗していました。 これは、Pgpool-IIの子プロセスがまず失敗したバックエンドを含めてすべてのバックエンドへの接続を試み、失敗した場合終了するためです（これはもちろん失敗します）。 これは一時的な状況であり、Pgpool-IIがフェールオーバーを行えば解決します。 しかし、ヘルスチェックの再試行が行っている場合は、この一時的な状況は health_check_max_retriesとhealth_check_retry_delayの設定次第で長時間続きます。 この状況は良くないので、以下のように修正しました。

  ストリーミングレプリケーションモードにおいて、バックエンドへの接続に失敗したら、そのダウンしたノードがプライマリではなければ、このバックエンドへの接続をあきらめて、他のノードへの接続を試みます。

  ローカルノードのステータスを"down"と記録します。 これによりプライマリーノードがロードバランスノードとして選択され、すべてのクエリがプライマリーノードへ転送されます。 他にスタンバイのノードが存在する場合、その中からロードバランスノードが選択されます。

  セッションが終了した後、ローカルの状態を保持しないように子プロセスは自殺します。

- PGPOOL SHOW, PGPOOL SET と PGPOOL RESET コマンドが追加されました。 (Muhammad Usama)

  これはPgpool-IIに現在のセッションの設定パラメータを設定またはリセットする機能を追加するという点でPostgreSQLのSET、SHOW、RESETコマンドと似ていますが、PostgreSQLのSET、RESETコマンドコマンドと区別するために、`PGPOOL`というキーワードが前に挿入してあります。

  現在 PGPOOL SHOW/SET/RESET に対応している設定パラメータは以下です。 log_per_node_statement, check_temp_table, check_unlogged_table, allow_sql_comments, client_idle_limit, log_error_verbosity, client_min_messages, log_min_messages, client_idle_limit_in_recovery.

- Pgpool-II再起動後、PostgreSQLノードの状態の不整合がある場合、これを同期するようにしました。(bug 218) (Muhammad Usama)

  watchdog がバックエンドノードを同期させなかったのが原因でした。

- 多くの行が出力されるSELECTの性能を改善しました。(Tatsuo Ishii)

  Pgpool-II がフロントエンドに行データ（"Data Row"メッセージ）を送るたびにネットワークにデータを（`write(2)`を呼び出して）フラッシュしていました。 例えば、10,000行を転送する必要がある場合、write()が10,000 回呼び出されます。 これは非常にコストが高いです。 繰り返し行データを送信した後、"Command Complete"メッセージが送られるので、Command Completeメッセージの時に併せてwrite()を発行すれば十分です。 また、command completeメッセージの取り扱いにおいて、不必要なフラッシュがありました。

  Quick testingのテスト結果から、この修正により、特定の場合で、47%から62%の性能向上が得られたことが分かりました。

  しかし、問い合わせが返す行が少ない場合は、まだ改善されていません。 そうした行はいずれにせよネットワークへのフラッシュが必要だからです。

- PostgreSQL 9.6's のパーサを取り込みました。 (Bo Peng)

  これにより、Pgpool-II は PostgreSQL 9.6 で導入された新しい構文 (`COPY INSERT/UPDATE/DELETE ... RETURNING` など) を理解可能です。

- ある場合では、pg_terminate_backend() 関数が failover を引き起さないようになりました。(Muhammad Usama)

  `pg_terminate_backend()`でバックエンドを終了させた場合、 PostgreSQLがpostmasterをシャットダウンしたときと同じメッセージを返しますので、 ユーザが望まないかもしれないフェールオーバーを発生させます。

  これを修正するために、Pgpool-IIは、 `pg_terminate_backend()`の対象バックエンドのPIDを検出し、フェールオーバーを発生させません。

  この修正は単純なプロトコルの場合、または`pg_terminate_backend()` に渡されたPIDが定数の場合にのみ適用します。 拡張プロトコル（Javaなど）の場合、`pg_terminate_backend()`はフェールオーバーを起こします。

- HTMLドキュメントが、SGMLドキュメントから生成されるようになりました。(Muhammad Usama, Tatsuo Ishii, Bo Peng)

  これはより良い構成、内容、保守の容易性をもたらすためです。 また、manページがSGMLから生成されるようになりました。 しかし、SGMLドキュメントにはまだたくさんの改良の余地があります。 どうか私達を助けてください！

## A.6.3. 他の改善点

- 認証エラーメッセージをわかりやすくしました。 (Tatsuo Ishii)

  バックエンドに接続する時に(ヘルスチェックを含む)、"invalid authentication message response type, Expecting 'R' and received '%c'" メッセージではなく"sorry, too many clients already"のようなメッセージを返すようにしました。

- pool_check_fd()のヘルスチェックタイマーの期限切れ条件を強化しました。(Muhammad Usama)

- 新しいスクリプト "watchdog_setup" が追加されました。 (Tatstuo Ishii)

  watchdog_setup は watchdog 機能を有効にしたPgpool-IIクラスタのテスト環境を構築するコマンドです。

- pgpool_setup に "pg" オプションが追加されました。(Tatsuo Ishii)

  これはpgpool_setupを使用する時に、PostgreSQLに特定のポート番号を割り当てたい場合に便利です。 また、`pgpool` と同じように、`pgpool_setup`は標準binディレクトリにインストールされるようになりました。

- show pool_nodes の出力結果に replication delay カラムが追加されました。(Tatsuo Ishii)

  streaming replication モードの場合、 このカラムは replication delay の値を bytes 単位で表示します。

- すべてのノードがダウンした場合、 status ファイルを更新しないように変更されました。(Chris Pacejo, Tatsuo Ishii)

  レプリケーションモードにおいて、すべてのノードがダウン状態の場合にstatusファイルに記録しないようにすることで、[pgpool-general:3918] で報告されたデータの不整合を修正しました。 この驚ほど単純ですが、スマートな解決方法はChris Pacejoにより提供されました。

- Pgpool-II が 複数 SSL cipher protocols に対応できるように修正しました。(Muhammad Usama)

  SSLセッションを初期化する際の処理でTLSv1_method()を`SSLv23_method()`で置き換えることにより、TLSv1プロトコルよりも多くのプロトコルを使うことができるようになりました。

- black_function_list/white_function_list に任意のアイテムの数が使用できるようになりました。(Muhammad Usama)

  これまで、このアイテムの数には固定の上限がありました。

- コメントのみを含む空クエリを適切に処理できるよう修正しました。(Tatsuo Ishii)

  この修正で、Pgpool-II"/* DBD::Pg ping test v3.5.3 */" (';' を含まないことに注意)のような空クエリを正しく識別できるようになりました。

  これまではエラークエリとして処理していました。

- wd_authkey ハッシュ計算失敗時に警告メッセージを出力するようにしました。(Yugo Nagata)

  たまに、認証キー不一致以外の何らかの理由で wd_authkey 計算に失敗することがあります。 メッセージ出力を追加することでこれらを互いに区別できるようにしました。

## A.6.4. 変更点

- log_destination = syslog 設定の不具合を修正しました。(Muhammad Usama)

  PGPOOL SET/SHOW コマンド追加の修正によって、ログの出力先がsyslogの場合、不具合がありましたので、修正しました。また、log_destinationパラメータがカンマ区切りで複数出力先を指定することができるようになりました。この修正によって、log_destination は "syslog" と "stderr" の任意の組み合わせに設定できるようになりました。

- search_primary_node_timeoutのデフォルト値を10から300に変更しました。(Tatstuo Ishii)

  これまでのデフォルト値10秒は、スタンバイを昇格する際には小さすぎでした。

- src/sql/ 配下の Makefile が修正されました。(Bo Peng)

  詳しくは [pgpool-hackers: 1611] を参照してください。

- pcp_proc_count コマンドの出力結果のプロセス ID を 6 桁まで表示 できるよう修正しました。(Bo Peng)

  特定の環境において、pcp_proc_count コマンドの出力結果のプロセス ID が6 桁の場合、 6 番目の文字が表示されませんでした。 この修正で、プロセス ID が最大 6 桁まで表示するよう変更しました。

- すべてのクエリがプライマリサーバに送信されるように変更しました。(Tatsuo Ishii)

  load_balance_mode = off の場合でも、一部のクエリがプライマリサーバ以外にも転送されていました。 この修正で、 streaming replication モードで load_balance_mode = off の場合はすべてのクエリをプライマリサーバにのみ送るようにしました。

## A.6.5. 不具合修正

- pool_stream関数の潜在的なクラッシュを修正しました。(Muhammad Usama)

  POOL_CONNECTION-> con_infoは、バックエンドソケットで読み取りまたは書き込みが失敗したときに、逆参照する前にヌル値をチェックする必要があります。

- watchdogクラスタでのフェイルオーバーコマンドの転送処理が改善されました。(Muhammad Usama)

  これまでは、Pgpool-II ノードの watchdogがすべての接続されたノードにフェイルオーバーコマンド(failover、 failback 及び promote node)を転送していました。多数のノードが含まれているwatchdogクラスタでは、フェールオーバーコマンドが複数のPgpool-IIによって実行されることによって、データの同期問題を引き起こす可能性がありました。このコミットでは、すべてのフェイルオーバーコマンド(failover、 failback 及び promote node)が master/coordinator watchdog に転送され、master/coordinator watchdogはすべてのスタンバイノードに転送するようになりました。

  また、今回の修正では、インターロック機能も変更されました。master/coordinatorノーのみがロックホルダになり、フェイルオーバコマンドはmaster/coordinatorノードでのみ実行されます。

- すべてのバックエンドがダウンした後に、1つのノードを復帰させる時の不具合が修正されました。(Tatsuo Ishii)

  すべてのノードがダウンすると、すべてのコネクションを受け付けなくなります。 その状態で1つのPostgreSQLが起動し、`pcp_attach_node`コマンドでそのノードを復帰させます。 そしてこのコマンドは成功しました。 しかし、新しい接続が拒否されました。 これはPgpool-II の子プロセスがキャッシュされた古い情報を参照したのが原因でした。 ストリーミングレプリケーションモードでは、このキャッシュされた情報において、復帰させたノードの状態がdownのままでした。 （ネィティブレプリケーションモード、およびそれ以外のモードでは問題ありません） 解決法として、全ノードがダウンした場合、強制的に全 Pgpool-II子プロセスを再起動するようにしました。

- 再起動が必要なパラメータの設定を変更した際のPgpool-II停止が起こらないようにしました。(Muhammad Usama)

  この修正のために、設定パラメータの検証機構の順序を逆にしました。 以前はスタンバイノードがPgpool-IIマスターノードに対して設定パラメータの値を検証し、不整合が見つかった場合にはFATALエラーが出力されていました。 この修正で、Pgpool-IIマスターノードに検証の役割が移譲されました。 マスターノードは参加している個々のスタンバイノードの設定値をローカルの設定値と比較し、違っている場合にはエラーではなくてWARNINGメッセージを出力します。 この方法では、ユーザは、手動でマスターPgpool-IIログの中から不整合ワーニングを見つけて、Pgpool-IIマスターのスイッチオーバが起きたときに驚くようなことが起こらないようにしなければなりません。

- watchdog が有効な場合、failover_command コマンドのロック取得時の処理が改善されました。(Muhammad Usama)

- コンパイルエラーを修正するために、`configure.ac` ファイルにコンパイルフラグ "-fno-strict-aliasing" が追加されました。(Tatsuo Ishii)

- MD5 salt を生成するときに、`random()` を使用しないように修正しました。(Tatsuo Ishii)

  `random()`関数はセキュリティ関連のアプリケーションで使用すべきではありません。 `random()`の代わりにPostgreSQLの`PostmasterRandom()` 使用するように変更しました。

- クエリキャッシュが有効な場合、sync メッセージが廃棄されないよう修正しました。(Tatsuo Ishii)

- listen_addressesが空文字の場合、Pgpool-II が起動できない不具合を修正しました。(bug 237) (Muhammad Usama)

  TCP listen addresses が空の場合、socket descriptor 配列（fds[]）の終了マークがないのが原因でした。

- リグレッションログディレクトリが存在しない場合、作成されるようになりました。(Tatsuo Ishii)

- ソケットの操作に失敗したときのエラーメッセージを修正しました。(Muhammad Usama)

- show pool_nodes コマンドの修正を反映し、レグレッションテスト 003.failover を変更しました。

- Portal suspend を受け取ったときのハングが修正されました。(bug 230) (Tatsuo Ishii)

- ネットワークが復旧した時にIPを降格しない問題を修正しました。(bug 228) (Muhammad Usama)

  ローカルノードの状態が調停者状態から他の状態に変わった時に降格させるために、set_state関数が実装されました。

- SIGUSR1 シグナルハンドラーを watchdog の初期化前にインストールするように修正しました。(Muhammad Usama)

  watchdog 初期化直後に 他のwatchdog ノードから failover リクエストがあった場合、 SIGUSR1 シグナルハンドラーのインストールを待っていれば、クラッシュが発生する可能性がありました。

- 他のノードが利用できない場合、Pgpool-II が IPアドレスをエスカレートしない不具合を修正しました。(bug 215) (Muhammad Usama)

  Heartbeat destination が IPアドレスで指定され、wd_hostname が hostname で設定される場合、 heartbeat receiver が heartbeat sender watchdog ノードを識別できなかったのが原因でした。 逆の場合でも同様なエラーが起こります。

- watchdog に関するコーデイングミスを修正しました。(Muhammad Usama)

  `wd_issue_failover_lock_command()`関数は、渡ってきたコマンドタイプを`wd_send_failover_sync_command()`関数の引数に渡すように想定されていますが、その代わりにNODE_FAILBACK_CMDコマンドタイプを渡していました。

  この修正で、いくつかのログメッセージも改善しました。

- pcp_node_info コマンドの標準出力の「Status」がわかりやすくように変更されました。(Muhammad Usama)

  pcp_node_info コマンドの標準出力の「Status」が内部状態コードから人間がわかりやすい状態の文字列に変更されました。

- 「MAJOR」マクロによる発生しうるセグメンテーションフォルトを修正しました。(Tatsuo Ishii)

  MAJOR が `pool_virtual_master_db_node_id()` を呼出し、 戻り値 idを使ってbackend->slots[id]->con にアクセスします。 可能性は低いですが、conが0を指し（DB にアクセスできない場合）、con->major にアクセスし、セグメンテーションフォルトを引き起す可能性がありました。

- "kind mismatch" エラーメッセージの処理について修正しました。(Muhammad Usama)

  多くの"kind mismatch..."エラーは、NOTICE や WARNING メッセージが DBノードのいくつかで起こることによるものです。 この修正では、そうしたケースにおいて、"kind mismatch..."エラーを引き起こすのではなく、 NOTICE や WARNINGメッセージをフロントエンドに送るようになりました。 これにより、"kind mismatch..."エラーの発生が減少します。

- pcp_listen_addresses パラメータの処理の不具合を修正しました。(Muhammad Usama)

- シグナルハンドラ中でエラー番号が保存されるようになりました。 (Tatsuo Ishii)

- pgpool メインプロセスの `wait(2)` の扱いを修正しました。(Tatsuo Ishii)

  Pgpool-II メインプロセスから呼び出される`wait(2)`はそのシステムコール内で永久に待つ可能性があります。 この修正で、 `wait(2)` の代わりに、`waitpid(2)` を使うように変更しました。

- fail_over_on_backend_error が off の場合、 `read(2)` が -1 を返しても `pool_read()` がエラーメッセージを発行しない不具合が修正されました。(Tatsuo Ishii)

- `show pool_nodes` でのバッファオーバーランを修正しました。(Tatsuo Ishii)

  `show pool_nodes` を実行時、hostname に割り当てられたバッファが十分ではないのが原因でした。 `pgpool.conf` のバッファサイズと同じようにしました。

- [pgpool-hackers: 1638] で報告された、Pgpool-II がデフォルトの設定を使用しない不具合が修正されました。(Muhammad Usama)

  設定ファイルが見つからない場合は、 ERROR または FATAL ではなく、WARNING を返すように修正しました。

- 共有メモリ上のロードバランスノードの書き込みに関するバグを修正しました。(Tatsuo Ishii)

  2, 3の箇所で、ロードバランスノードが間違ったことろに置かれてしまいました。

  [正しい場所]

      ConnectionInfo *con_info[child id, connection pool_id, backend id].load_balancing_node].

  [実際に置かれた場所]

      *con_info[child id, connection pool_id, 0].load_balancing_node].

  バックエンド id が 0 の場合、上記バグが発生しませんが、Pgpool-II 3.6 のフェイルオーバーテストで、プライマリノードが 1 (ロードバランスノード)、スタンバイノードが 0 の場合、ノード1 の接続が切断され、フェイルオーバーが起きています。 これは想定外のことだったのでこのバグが見つかりました。

  このバグはかなり前からありましたが、上記の理由で、今まで見つかっておリませんでした。

- #197 で報告されたpgpoolのハングを修正しました。(bug 197) (Muhammad Usama)

  watchdog が有効で、バックエンドノードとリモート Pgpool-IIノードが同時接続できなくなった場合、クライアント接続がスタックします。 原因は watchdog に IPC コマンドを送信する関数を呼び出すコマンドタイムアウトがなかったからです。

- ヘルスチェックで発生し得るハングアップを修正しました。(bug 204) (Yugo Nagata)

  `connect(2)` が成功し、 その後バックエンドからデータが送信されない場合、ヘルスチェックがハングしていました。 ヘルスチェック中に、`select(2)`がSIGALRMのためにEINTRで終了した場合、`pool_check_fd()`が1を返すように修正しました。

- streaming replication モードで、プライマリノードが 0 ではない場合に発生する不具合が修正されました。 (Tatsuo Ishii)

  http://www.pgpool.net/mantisbt/view.php?id=194#c837の報告により、bug194-3.3.diff を適用しても、プライマリノードが 0 ではない場合、ステートメントタイムアウトが発生する可能性がありました。 調査した結果、MASTER マクロがプライマリノードまたはロードバランスノード 以外のノードを返したからです。 そのため、`do_query()`がクエリを間違ったノードに送信していました（これは報告では明確ではありませんでしが、 調査で確認できました）。

  MASTER マクロから呼ばれる`pool_virtual_master_db_node_id()` は、クエリコンテキストが存在する場合、query_context->virtual_master_node_id を返します。 その変数がまだ初期化されていない場合、この関数が間違ったノード を返す可能性があります。 そのため、`pool_virtual_master_db_node_id()` 関数を以下のように修正しました。 変数にプライマリノードもロード バランスノードも設定されていない場合、プライマリノードを返します。

- バックエンドのステートメントタイムアウトが有効で、`do_query()`がクエリをプライマリノードに送信し、それ以降のユーザクエリがスタンバイノードに送信された場合、次のコマンド、例えば、ENDコマンドが、プライマリノードのステートメントタイムアウトを引き起こし、kind mismatch error が発生する可能性がありました。(bug 194) (Tatsuo Ishii)

  この問題を軽減するために、`do_query()` がフラッシュメッセージを送信する代わりに、sync メッセージ送信するように修正しました。 明示的トランザクションのときは、sync メッセージを送信することで、ステートメントタイムアウトタイマーがリセットされます。 暗黙的なトランザクションでは、このやり方は使えません。 なぜなら、unnamed portal が存在する場合、sync メッセージが unnamed portalを削除するからです。

  更にこれにより、pg_stat_statement が `do_query()` が発行したクエリを "running" で表示しなくなります。

- 拡張プロトコルのraw モードでのバグを修正しました。(bug 152) (Tatsuo Ishii)

  Bug 152の報告により、拡張プロトコルの raw モード（実は stream モード以外）で `Describe()` と `Close()` の処理に誤りがありました。stream モードとは異なり、バックエンドからの応答を待つべきでした。

- `pgpool.conf` の不正確なコメントを修正しました。(Tatsuo Ishii)

- 日本語と中国語ドキュメントのraw モードに関する内容の誤りを修正しました。(Yugo Nagata, Bo Peng)

  raw モードでも、コネクションプーリングが有効です。

- `is_set_transaction_serializable()`関数の`SET default_transaction_isolation TO 'serializable'`の扱いに関するバグを修正しました。(bug 191) (Bo Peng)

  Pgpool-II は `SET default_transaction_isolation TO 'serializable'` をプライマリだけではなく、スタンバイにも送信してしまい、エラーが起きていました。 この修正で、streaming replication モードの場合、`SET default_transaction_isolation TO 'serializable'` がプライマリサーバのみに送信されます。

- 拡張プロトコルにおける空クエリの場合、発生し得るハングアップを修正しました。(Tatsuo Ishii)

  この修正は3.5.1で空のクエリの場合の拡張プロトコルの扱いに関係しています。 この場合バックエンドはcommand complete messageと同じ意味を持つ"empty query response"を返します。 問題は、"empty query response"を受信した際に、Pgpool-IIがクエリ進行中フラグをリセットせず、 バックエンドの応答を待ち続けることことです。 しかし、バックエンドはsyncメッセージをを受け取るまではready for queryメッセージを返しません。 解決方法は、"empty query response"を受信した際に、クエリ進行中フラグをリセットし、フロントエンドがsync メッセージを送信することを期待してフロントエンドからの応答を待つことです。

- [pgpool-general: 4569] により報告された trusted_servers チェック時のセグメンテーションフォルトを修正しました。 (Muhammad Usama)

  Pgpool-II 3.4 からは PostgreSQL のメモリマネージャおよび 例外マネージャ API を流用していますが、 それはスレッドセーフ ではありません。上位接続を確認するため ping の応答で信頼できるサーバ確認時、 watchdog lifecheck プロセスでセグメンテ ーションフォルトを引き起こしていました。 スレッドを削除し、 子プロセスを使うように修正しました。

- PCP パケットの長さを検証するよう修正しました。(Muhammad Usama)

  この検証がない場合、非常に巨大なデータサイズのパケットを送信することで、 不正な PCP パケットが PCP 子プロセスをクラッシュさせたり、サーバで out of memory を発生させることが可能でした。

- pgpool_setupがログ出力を混乱させないように修正しました。(Tatsuo Ishii)

  以前は Pgpool-II プロセスの stdout および stderr は単にログファイルにリダイレクトされていました。 これは複数プロセスが同時に書き込みを行うため競合が発生し、 ログの文字化けや消失の原因となっていました。

  このため、pgpool_setup が生成する startall スクリプトでは、Pgpool-II は stdout/stderr を cat コマンドにパイプで送信し、 cat がログファイルの書き込みを行うように修正されました。 （パイプに書き込む際にはこの競合状態は発生しないようです）

- [pgpool-general: 4519] により報告されたワーカープロセスが終了し再生成されなくなる不具合を修正しました。(Muhammad Usama)

  この問題は watchdog が有効のときに終了した子プロセスのタイプをチェックするコードにロジック間違いがあったのが原因でした。 また、接続が max connection に達して子プロセスが終了する際に出力されるメッセージの重要度を FATAL からLOG に変更されました。

- バックエンドからエラー状態を受信した後のハングを修正しました。 (bug #169) (Tatsuo Ishii)

  これは拡張プロトコル問い合わせを実行しそれが失敗したときに発生し得ました。

- ストリーミングレプリケーションモードで拡張プロトコル問い合わせを使用したときに スタックが発生する問題を修正しました。(bug 167, 168) (Tatsuo Ishii)

- [pgpool-hackers: 1440] により報告されたリセットクエリがスタックする問題を修正しました。(Tatsuo Ishii)

  フロントエンドから 'X' メッセージを受信した後、リセットクエリ送信前に Pgpool-II が EOF をその接続で検出すると、Pgpool-II がリセットクエリを受信していないバックエンドからの応答を待ち続けることがありました。 EOF を受信した場合には、これを ERROR ではなく FRONTEND_ERROR として扱うことで修正しました。

- [pgpool-general: 4265] より報告されたリセットクエリがスタックする問題を修正しました。(Muhammad Usama)

  フロントエンドソケットにおける pool_flush が失敗したときには、ERRORではなく FRONTEND_ERROR を発生させることで解決しました。

- PostgreSQL 9.6における pgpool-recovery モジュールのコンパイルエラーを修正しました。(Muhammad Usama)

  PostgreSQL 9.6 の `GetConfigOption()` 関数の関数定義の変化に対応しました。

- FreeBSD でのコンパイルエラーを修正しました。(Muhammad Usama)

  不足していた include ファイルを追加しました。 パッチはバグ報告者によって作成され、Usama により改善されました。

- 個々のテストのタイムアウトをチェックできるようレグレッションテストを修正しました。(Yugo Nagata)

前のページ | ホーム | 次のページ
リリース 3.6.1 | 上に戻る | リリース 3.5.9