Re: Replication server timeout patch
Fujii Masao <masao.fujii@gmail.com>
From: Fujii Masao <masao.fujii@gmail.com>
To: Heikki Linnakangas <heikki.linnakangas@enterprisedb.com>
Cc: Robert Haas <robertmhaas@gmail.com>, Josh Berkus <josh@agliodbs.com>, pgsql-hackers@postgresql.org
Date: 2011-03-24T13:24:34Z
Lists: pgsql-hackers
On Wed, Mar 23, 2011 at 7:33 PM, Heikki Linnakangas <heikki.linnakangas@enterprisedb.com> wrote: > I don't much like the API for this. Walsender shouldn't need to know about > the details of the FE/BE protocol, pq_putbytes_if_available() seems too low > level to be useful. > > I think a better API would be to have a non-blocking version of > pq_putmessage(). We can make the output buffer in pqcomm.c resizeable, so > that when the message doesn't fit in the output buffer in pq_putmessage(), > the buffer is enlarged instead of trying to flush it. > > Attached is a patch using that approach. This is a much smaller patch, and > easier to understand. Agreed. Thanks for improving the patch. pq_flush_if_writable() calls internal_flush() without using PG_TRY block. This seems unsafe because for example pgwin32_waitforsinglesocket() called by secure_write() can throw ERROR. > I'm not totally happy with the walsender main loop, it > seems to work as it is, but the logic has become quite complicated. Ideas > welcome on how to simplify that. As the patch I proposed before did, how about leaving XLogSend() instead of WalSndLoop() to call pq_flush_if_writable() when there is pending data in output buffer? Regards, -- Fujii Masao NIPPON TELEGRAPH AND TELEPHONE CORPORATION NTT Open Source Software Center