[pgsql-jp: 35686] Re: pgpoolのfflush()におけるEAGAIN

Hidemi Yamashita hidemi-y @ hh.iij4u.or.jp
2005年 7月 7日 (木) 09:08:14 JST


山下です。

From: Tatsuo Ishii <t-ishii @ sra.co.jp>
Subject: [pgsql-jp: 35683] Re: pgpoolのfflush()におけるEAGAIN
Date: Wed, 06 Jul 2005 22:08:41 +0900 (JST)

> > 上記ペーパ見てみました.結局自前でstdio相当のものを実装するしかなさそ
> > うですね.rubyは自前でstdioを実装しているそうなので,それをもらってく
> > る手もありますが,ライセンスがGPLなのでそれもできないですね.
> > 
> > まあ,一から作ってもたいしたことないと思うので,地道に自分で何とかする
> > ことにします.
> 
> もう一度 pgsql-jp:35408 を読み返してみましたが,FreeBSD の stdio ライ
> ブラリが駄目な実装になっているのかも,という気がしました.つまり Linux
> (あるいはglibcを使っているシステム)では起きないのかも(反例があったら教
> えてください).時間ができたら FreeBSD のソースを見てみます.

取り敢えず fdopen() でstdioに絡めている部分を削除し、fwrite()
を write() に変更して EAGAIN が発生したら書き込めなかった残
りの部分を書き込む様にし、fflush() は何もしないという感じで
試してみましたが途中でエラーが発生している様でした。現在、こ
のエラーについて原因の詳細は調べていません。但し、この様に改
造した時に pgpool -n -d で起動すると上手く行きました。多分デ
バッグ情報の出力で通信のタイミングが遅れたのだと思います。

ということは write() を呼び出す前に select() を使って書き込
み可能な状態を検査しつつ処理を進めるという手順が必要な気もし
ます。また何か分かりましたらお知らせします。

--- 山下@ジャスパー・システム




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