[pgsql-jp: 36362] Re: pgpool264 で接続エラー
Tatsuo Ishii
ishii @ sraoss.co.jp
2005年 11月 10日 (木) 23:31:41 JST
石井です.
> moriyamaと申します
>
> pgpoolのサイトに2.6.4が上がっていたので試してみたところ、
> CSEで接続をしようとすると4回に1回しか接続できなくなりました。
>
> 接続失敗時CSEに表示されるエラーメッセージは下記になります。
>
> connectDB() -- expected authentication request
>
> 接続が正常に出来た場合は、普通にDB内のデータにもアクセスできます。
>
> 2.6.3ではこのような現象は発生しませんでした。
>
> なにかDBコネクション系で大きく変更があったのでしょうか。
済みません.ご推察の通り,2.6.3 -> 2.6.4 でenbugしてしまったようです.
pgpool開発サイト(pgfoundry)のMLで報告されたバグに対応するためにコネク
ション処理をいじったときにバグが入り込みました.
CSEはV2(古い)プロトコルを使うのですね.V2プロトコルかつtrust
authenticationかつ初回接続のときに限り,このバグにぶちあたってしまいま
す.したがって,コネクションをキャッシュしている状態では発生せず,「4
回に1回しか接続できなくなりました」というのはこのせいだと思います.
お手数ですが,修正パッチを作ってみたので試していただけるでしょうか?
パッチはpool_auth.cにあててください.
--
SRA OSS, Inc. Japan
Tatsuo Ishii
--------------------------------------------------------------------
Index: pool_auth.c
===================================================================
RCS file: /cvsroot/pgpool/pgpool/pool_auth.c,v
retrieving revision 1.6
diff -c -r1.6 pool_auth.c
*** pool_auth.c 22 Oct 2005 12:57:57 -0000 1.6
--- pool_auth.c 10 Nov 2005 14:24:26 -0000
***************
*** 133,150 ****
/* trust? */
if (pid == 0)
{
if (protoMajor == PROTO_MAJOR_V3)
{
- int msglen;
-
- pool_write(frontend, "R", 1);
msglen = htonl(8);
pool_write(frontend, &msglen, sizeof(msglen));
! msglen = htonl(0);
! if (pool_write_and_flush(frontend, &msglen, sizeof(msglen)) < 0)
! {
! return -1;
! }
}
MASTER(cp)->auth_kind = 0;
}
--- 133,152 ----
/* trust? */
if (pid == 0)
{
+ int msglen;
+
+ pool_write(frontend, "R", 1);
+
if (protoMajor == PROTO_MAJOR_V3)
{
msglen = htonl(8);
pool_write(frontend, &msglen, sizeof(msglen));
! }
!
! msglen = htonl(0);
! if (pool_write_and_flush(frontend, &msglen, sizeof(msglen)) < 0)
! {
! return -1;
}
MASTER(cp)->auth_kind = 0;
}
pgsql-jp メーリングリストの案内