On Fri, Feb 14, 2014 at 5:35 PM, Andres Freund <and...@2ndquadrant.com> wrote:
> Hi,
>
> In WalSndLoop() we do:
>
>     wakeEvents = WL_LATCH_SET | WL_POSTMASTER_DEATH | WL_TIMEOUT |
>         WL_SOCKET_READABLE;
>
>     if (pq_is_send_pending())
>         wakeEvents |= WL_SOCKET_WRITEABLE;
>     else if (wal_sender_timeout > 0 && !ping_sent)
>     {
> ...
>         if (GetCurrentTimestamp() >= timeout)
>             WalSndKeepalive(true);
> ...
>
> I think those two if's should simply be separate. There's no reason not
> to ask for a ping when we're writing. On a busy server that might be the
> case most of the time.

I think the main reason of ping is to detect n/w break sooner.
On a busy server, wouldn't WALSender can detect it when next time it
will try to send the remaining data?

Each time in below loop, it sleeps for some time and then will again
try to send data and at that time it can detect n/w failure.
if ((caughtup && !streamingDoneSending) || pq_is_send_pending())
{
..

if (wal_sender_timeout > 0)
{
..
sleeptime = 1 + (wal_sender_timeout / 10);
}
..
WaitLatchOrSocket(&MyWalSnd->latch, wakeEvents,
  MyProcPort->sock, sleeptime);
}

With Regards,
Amit Kapila.
EnterpriseDB: http://www.enterprisedb.com


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to