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