[pgpool-general-jp: 1350] Re: pgpool-II_3.4.0の仕様について

Tatsuo Ishii ishii @ sraoss.co.jp
2015年 2月 3日 (火) 19:17:17 JST


上原様

石井です。

> To:石井様
> 
> 上原です。
> お世話になっております。
> 
> 
> 先日、質問させていただきました以下の内容についてですが、
> いかがでしょうか。
> 
> pgpoool-IIの仕様について、ご回答いただければ幸いです。
> 
>> pgpool-II 3.4.0の仕様についていくつか不明な点があります。
>> 下記の内容について、ご教授いただけないでしょうか。
>> 
>> ■1 ドキュメントバグ?
>> client_min_messagesの選択範囲にFATAL、PANICがマニュアルに記載されて
>> いますが、設定できません。(設定した場合、エラーになります)
>> ソースを確認した限り、FATAL、PANICは対象にしていないのですが、
>> ドキュメントとソースのどちらが仕様として正しいのでしょうか。

こちらはドキュメントのバグでした。すでにgit上では修正されています。

http://git.postgresql.org/gitweb/?p=pgpool2.git;a=commit;h=e456a3259928efd84d0e4bf74197df08d8b9ee23

今週リリースされる3.4.1に入る予定です。

>> ■2 client_min_messagesが制御するメッセージは何か?
>> PostgreSQLからClientに返されるメッセージを制御するものとして考えて
>> いましたが、設定を変更しても出力内容に変化がありません。
>> 
>> ソースを確認したところ、そもそも制御が行われていないように見えますが
>> いかがでしょうか。whereToSendOutputは初期値'DestDebug'のままで変更
>> されることがないため、下記の処理が行われていないという認識ですが、
>> 合っているでしょうか。

こちらも同じコミットで直っていますが、client_min_messagesはpgpool-IIか
らフロントエンドに送られるメッセージのレベルを制御するはずのものです。
(今まではバグで送られてなかった)

こんな感じです(client_min_messages = debug1の場合)。

t-ishii @ tishii-CF-SX3HE4BP: psql -p 11000 test
DEBUG:  selecting load balance node
DETAIL:  selected backend id is 0
DEBUG:  initializing session context
DETAIL:  selected load balancing node: 0
DEBUG:  session context: clearing transaction isolation. DONE
DEBUG:  session context: clearing writing transaction. DONE
DEBUG:  session context: clearing failed transaction. DONE
DEBUG:  session context: clearing failed transaction. DONE
DEBUG:  session context: clearing skip reading from backends. DONE
DEBUG:  session context: clearing ignore till sync. DONE
DEBUG:  reading backend data packet kind
DETAIL:  backend:0 of 2 kind = 'Z'
DEBUG:  reading backend data packet kind
DETAIL:  backend:1 of 2 kind = 'Z'
DEBUG:  processing backend response
DETAIL:  received kind 'Z'(5a) from backend
DEBUG:  processing backend response
DETAIL:  Ready For Query received
DEBUG:  reading message length
DETAIL:  slot: 0 length: 5
DEBUG:  reading message length
DETAIL:  slot: 1 length: 5
DEBUG:  processing ReadyForQuery
DETAIL:  transaction state '
DEBUG:  processing ReadyForQuery
DETAIL:  transaction state 'I'(49)
Pager usage is off.
psql (9.4.0)
Type "help" for help.


>> src/utils/error/elog.c
>> 285         /* Determine whether message is enabled for client output */
>> 286         if (whereToSendOutput == DestRemote && elevel != COMMERROR)
>> 287         {
>> 288                 /*
>> 289                  * client_min_messages is honored only after we complete the
>> 290                  * authentication handshake.  This is required both for security
>> 291                  * reasons and because many clients can't handle NOTICE messages
>> 292                  * during authentication.
>> 293                  */
>> 294         output_to_client = (elevel >= pool_config->client_min_messages ||
>> 295                                                                 elevel == INFO);
>> 296         }
> 
> 
> 以上です。
> よろしくお願いします。
> 
> 
> (2015/01/13 11:09), Kazuki Uehara wrote:
>> To:石井様
>> 
>> 上原です。
>> お世話になっております。
>> 
>> 
>>> [1]に対しては、atolで変換前に数字かどうか確認し、数字でない場合はエラー
>>> としてpgpool-IIが起動しないようにしました(他の設定項目同様、設定エラー扱い)。
>>>
>>> [2]に対しては、そもそも空の正規表現を受け付けること自体が間違っているの
>>> で、[1]同様設定エラー、pgpool-IIが起動しないようにしました。
>> 
>> ご確認、及びご対応いただきありがとうございます。
>> 
>> 
>> 以上です。
>> よろしくお願いします。
>> 
>> (2015/01/11 10:21), Tatsuo Ishii wrote:
>>> 上原様
>>>
>>> お世話になっています。石井です。
>>>
>>>> 石井さま
>>>>
>>>> 上原です。
>>>> お世話になっております。
>>>>
>>>> ご確認いただきありがとうございます。
>>>>
>>>>>> ■3 redirect_listの内容が不正な場合、ロードバランシングはされない?
>>>>
>>>> 申し訳ありません。
>>>> こちらの条件等の説明が不足しておりましたので、訂正させていただきます。
>>>>
>>>> お手数をお掛けして申し訳ありませんが、再度ご確認いただけないでしょうか。
>>>>
>>>> 以下の2パターンでのロードバランシングの挙動を確認した結果は
>>>> 仕様どおりのものかご確認いただけると幸いです。
>>>
>>> 確認しました。
>>>
>>>> パターン1 database_redirect_preference_list = 'testdb1:abcd&testdb2:1'
>>>
>>> "testdb1"というDBに対し、"abcd&testdb2:1"というDBノード番号にリダイレク
>>> トせよ、という設定と解釈されているようです。
>>>
>>>> 結果:testdb1へのSQLは全てプライマリで実行される。
>>>>    testdb2へのSQLはロードバランシングされる。
>>>
>>> pgpool-IIでは文字列からDBノード番号に変換するのにatolを使っているため、
>>> "abcd&testdb2:1"が0に変換され、testdb1に対する負荷分散がすべてプライマ
>>> リ(というかノード0)になってしまったようです[1]。
>>>
>>>> パターン2 database_redirect_preference_list = ':0,testdb2:1'
>>>> 結果:testdb1へのSQLは全てプライマリで実行される。
>>>>    testdb2へのSQLは全てプライマリで実行される。
>>>
>>> ""を正規表現としてコンパイルする際に、"^"に変換しており(これ自体はバグ。
>>> 本当は"^$"に変換したかった)、結果すべてのデータベース名にマッチする正規
>>> 表現になってしまい、どんなDBに対する負荷分散でもすべてプライマリ(という
>>> かノード0)になってしまったようです[2]。
>>>
>>> [1]に対しては、atolで変換前に数字かどうか確認し、数字でない場合はエラー
>>> としてpgpool-IIが起動しないようにしました(他の設定項目同様、設定エラー扱い)。
>>>
>>> [2]に対しては、そもそも空の正規表現を受け付けること自体が間違っているの
>>> で、[1]同様設定エラー、pgpool-IIが起動しないようにしました。
>>> --
>>> Tatsuo Ishii
>>> SRA OSS, Inc. Japan
>>> English: http://www.sraoss.co.jp/index_en.php
>>> Japanese:http://www.sraoss.co.jp
>> 
>> 
> 
> 
> -- 
> 上原 一樹 (Kazuki Uehara)
> Mail : uehara.kazuki @ lab.ntt.co.jp
> Phone: 03-5860-5115
> 
> _______________________________________________
> pgpool-general-jp mailing list
> pgpool-general-jp @ sraoss.jp
> http://www.sraoss.jp/mailman/listinfo/pgpool-general-jp


pgpool-general-jp メーリングリストの案内