[pgsql-jp: 35413] Re: pgpool経由のpg_dumpに失敗

Kenichirou Kimura ( 木村健一郎 ) kimura @ project-com.com
2005年 5月 24日 (火) 11:50:03 JST


木村です。

At Tue, 24 May 2005 11:13:13 +0900,
わたし wrote:
> 試してみましたところ、EAGAINが出たときに「エラーでpg_dumpが止まる」こ
> とはなくなったのですが、今度はいつまでもリトライし続けてpg_dumpが終了
> しなくなりました。

すいません、もうちょっといろいろやってみたところどうも「リトライし続け
て」ってのは違うようです(pg_dumpが終了しないのは確かなんですが)。該当
個所を

if (errno == EAGAIN){
  pool_error("pool_flush:EAGAIN");
  continue;
}

としてみたので、リトライし続けているならログに「pool_flush:EAGAIN」が
延々と出るはずなんですが、1回しか出ていません。しかし、現象として1度
EAGAINが出ると、パイプにデータが流れてきていないようです。

で、さらに「本当にこのfflushのループで止まってるの?」という疑問が湧い
たため、forループを抜ける部分を以下のようにしてみました。


int pool_flush(POOL_CONNECTION *cp)
{
	.....

        pool_error("pool_flush:OK");
        return 0;
}

すると、ログは

2005-05-24 11:29:46 ERROR: pid 78848: pool_flush:EAGAIN
2005-05-24 11:29:46 ERROR: pid 78848: pool_flush:OK
2005-05-24 11:29:46 DEBUG: pid 78848: Complete Command Response: string: "COPY"
2005-05-24 11:29:46 DEBUG: pid 78848: read kind from backend pending data Z len:
 0 po: 0
2005-05-24 11:29:46 ERROR: pid 78848: pool_flush:EAGAIN
2005-05-24 11:29:46 ERROR: pid 78848: pool_flush:OK
2005-05-24 11:29:46 ERROR: pid 78848: pool_flush:EAGAIN
2005-05-24 11:29:46 ERROR: pid 78848: pool_flush:OK

ということで、EAGAINが出たあとにfflushに成功して、このforループを抜け
て、その後で処理が止まってるようです。
この処理が止まった部分、pg_dumpがあるテーブルにCOPY to STDOUTを投げた
ところで、その結果を受けきれてないように見えます(直前の"Complete COPY"
は、他のテーブルのCOPYが完了した際のもので、postgresqlには次のテーブル
に対するCOPYコマンドが発行されていました)。

現象の報告だけで申し訳ないですが、ひとまず報告まで。


 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
木村健一郎



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