[pgsql-jp: 39953] Re: pgpool でプロトコルエラー
Tatsuo Ishii
ishii @ sraoss.co.jp
2009年 8月 6日 (木) 15:34:11 JST
石井です。
板垣さん、テストありがとうございます。
石田さん、パッチありがとうございます。早速コミットさせて頂きます。
--
Tatsuo Ishii
SRA OSS, Inc. Japan
> こんにちは。石田@苫小牧市です。
>
> 2009/08/05 16:45 に Itagaki Takahiro<itagaki.takahiro @ oss.ntt.co.jp> さんは書きました:
> > 板垣です。
> >
> > pgpool を、あえて通常とは異なる使い方をしてテストしていたのですが、
> > SELECT の結果行数が異なるパターンでは、プロトコルエラーによる強制切断が
> > 発生するようです。
> >
> > ----
> > =# /**/SELECT * FROM generate_series(1, (random()*10)::integer);
> > ERROR: kind mismatch among backends. Possible last query was:
> > "/**/SELECT * FROM generate_series(1, (random()*10)::integer);" kind de
> > メッセージの内容がメッセージ種類"E"の長さに合いません
> > サーバとの接続が想定外にクローズされました
> > おそらく要求の処理前または処理中にサーバが異常終了
> > したことを意味しています。
> >
> > (pgpool のエラーログ)
> > ERROR: kind mismatch among backends. Possible last query was:
> > "/**/SELECT * FROM generate_series(1, (random()*10)::integer);"
> > kind details are: 0[C] 1[D]
> >
> > $ pgpool -v
> > pgpool-II version 2.2.2 (urukiboshi)
> > ----
> >
> > 一方、片方がエラーになるパターン (kind details are: 0[T] 1[E]) では、
> > 適切に強制切断されています。最初のパターンでも、エラーになることは
> > 確実なのですが、エラーの種類が適切でないようなので気になっております。
>
>
> pgpoolがフロントエンドにErrorResponseを返す時に、メッセージを
> 整形する処理に問題があるようです。
> 片方がエラーになるパターンは(kind details are: 0[T] 1[E])
> 短かいSQLだったのではないでしょうか。
>
> 単純に直すとすれば、
>
> diff -r ee01705b85e1 pool_process_query.c
> --- a/pool_process_query.c Thu Jul 16 17:21:01 2009 +0900
> +++ b/pool_process_query.c Thu Aug 06 14:52:04 2009 +0900
> @@ -2329,16 +2329,19 @@ void pool_send_error_message(POOL_CONNEC
>
> /* error level */
> thislen = snprintf(msgbuf, MAXMSGBUF, "SERROR");
> + thislen = Min(thislen, MAXMSGBUF);
> memcpy(data +len, msgbuf, thislen+1);
> len += thislen + 1;
>
> /* code */
> thislen = snprintf(msgbuf, MAXMSGBUF, "C%s", code);
> + thislen = Min(thislen, MAXMSGBUF);
> memcpy(data +len, msgbuf, thislen+1);
> len += thislen + 1;
>
> /* message */
> thislen = snprintf(msgbuf, MAXMSGBUF, "M%s", message);
> + thislen = Min(thislen, MAXMSGBUF);
> memcpy(data +len, msgbuf, thislen+1);
> len += thislen + 1;
>
> ...以下同様
>
> で良いと思いますが、MAXMSGBUFはもうすこし大きくても
> 良いかもしれません。
>
>
>
> >
> > とりあえず、報告だけになります。原因の詳細までは解析できていません。
> >
> > ------------------------------------------------------------
> > 板垣貴裕 <itagaki.takahiro @ oss.ntt.co.jp>
> >
> >
> >
>
>
>
> --
> ISHIDA Akio <iakio @ mono-space.net/ishida @ cycleof5th.com>
pgsql-jp メーリングリストの案内