• Noah Misch's avatar
    When WalSndCaughtUp, sleep only in WalSndWaitForWal(). · 42168581
    Noah Misch authored
    Before sleeping, WalSndWaitForWal() sends a keepalive if MyWalSnd->write
    < sentPtr.  That is important in logical replication.  When the latest
    physical LSN yields no logical replication messages (a common case),
    that keepalive elicits a reply, and processing the reply updates
    pg_stat_replication.replay_lsn.  WalSndLoop() lacks that; when
    WalSndLoop() slept, replay_lsn advancement could stall until
    wal_receiver_status_interval elapsed.  This sometimes stalled
    src/test/subscription/t/001_rep_changes.pl for up to 10s.
    
    Discussion: https://postgr.es/m/20200406063649.GA3738151@rfd.leadboat.com
    42168581
walsender.c 102 KB