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