[pgsql-jp: 39952] Re: pgpool でプロトコルエラー

ISHIDA Akio iakio @ mono-space.net
2009年 8月 6日 (木) 15:30:22 JST


こんにちは。石田@苫小牧市です。

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 メーリングリストの案内