[pgsql-jp: 33923] Re: pgpool のエラー(pool_read: EOF encountered)

Tatsuo Ishii t-ishii @ sra.co.jp
2004年 8月 25日 (水) 18:18:28 JST


石井です.

> > これはマスタ = 0x75('K'),セカンダリ = 0x69('E')なので,セカンダリだけ
> > 認証に失敗しているようですね.認証設定がマスタとセカンダリで違っている
> > のではないでしょうか.
> 
> 間違ってはいないと思うのですが、このエラーになる前に対話式処理を
> 実行しましたが問題ありませんでした、この後問題の処理を流しました。
> pgpoolの動作が不安定になり、同期が取れなくなり上記のようなメッセージ
> が出たのではないでしょうか。

なるほど.そうかもしれないですね.

> > > 処理は前回より進歩しまして、データの抽出までは動作しましたが、
> > > データを大量に書き出す部分で前回同様のエラーがでました。
> > 
> > 「データを大量に書き出す」というのは実際には何をしているのでしょう?
> 
> 当方で開発したものでなく、他社様の業務アプリです。中身までは解析できない
> のですが、仕様書レベルで処理概要を推測しますと、年間データの中から当月分
> を抜き出し、約5ファイルへのデータの更新と約10ファイルへの新規データの追
> 記処理です。
> 参照ファイルも含めると約20ファイル程度を使用しています。
> 一次ファイルなどを作って動作はしていないと思いますが、はっきりしたことは
> いえません。
> もともと高負荷のかかっているプログラムで、処理中はCPU使用率 80%,メモリ
> も512MB搭載の機器で500MB程度の使用、スワツプ 150MB程度の処理です。

ということは,そのアプリはDBではなく,普通のファイルに書いているわけで
すね.

pgpoolのソースを見直したところ,バックエンドからデータを読み出す際にソ
ケットからのデータの待ちに甘いところがあったので,それを直してみました.
よかったらお試し下さい.
添付のパッチは,前回のパッチをあてあることが条件になっています.2.0.8
からの差分の方が良ければ言ってください.
--
Tatsuo Ishii

------------------------------ cut here ---------------------------
Index: pool_stream.c
===================================================================
RCS file: /home/t-ishii/repository/pgpool/pool_stream.c,v
retrieving revision 1.22
diff -c -r1.22 pool_stream.c
*** pool_stream.c	25 Aug 2004 08:45:33 -0000	1.22
--- pool_stream.c	25 Aug 2004 08:57:44 -0000
***************
*** 115,132 ****
  
  	while (len > 0)
  	{
! 		if (cp->issecondary_backend)
  		{
! 			if (pool_check_fd(cp, 0))
  			{
  				pool_log("pool_read: secondary data is not ready. abort this session");
  				exit(1);
  			}
! 		}
! 
! 		else if (!cp->isbackend)
! 		{
! 			if (pool_check_fd(cp, 0))
  			{
  				pool_error("pool_read: pool_check_fd failed (%s)", strerror(errno));
  			    return -1;
--- 115,128 ----
  
  	while (len > 0)
  	{
! 		if (pool_check_fd(cp, 0))
  		{
! 			if (cp->issecondary_backend)
  			{
  				pool_log("pool_read: secondary data is not ready. abort this session");
  				exit(1);
  			}
! 			else
  			{
  				pool_error("pool_read: pool_check_fd failed (%s)", strerror(errno));
  			    return -1;
***************
*** 219,236 ****
  
  	while (len > 0)
  	{
! 		if (cp->issecondary_backend)
  		{
! 			if (pool_check_fd(cp, 0))
  			{
  				pool_log("pool_read2: secondary data is not ready. abort this session");
  				exit(1);
  			}
! 		}
! 
! 		else if (!cp->isbackend)
! 		{
! 			if (pool_check_fd(cp, 0))
  			{
  				pool_error("pool_read2: pool_check_fd failed (%s)", strerror(errno));
  			    return NULL;
--- 215,228 ----
  
  	while (len > 0)
  	{
! 		if (pool_check_fd(cp, 0))
  		{
! 			if (cp->issecondary_backend)
  			{
  				pool_log("pool_read2: secondary data is not ready. abort this session");
  				exit(1);
  			}
! 			else
  			{
  				pool_error("pool_read2: pool_check_fd failed (%s)", strerror(errno));
  			    return NULL;
------------------------------ cut here ---------------------------



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