• Noah Misch's avatar
    In caught-up logical walsender, sleep only in WalSndWaitForWal(). · f246ea3b
    Noah Misch authored
    Before sleeping, WalSndWaitForWal() sends a keepalive if MyWalSnd->write
    < sentPtr.  When the latest physical LSN yields no logical replication
    messages (a common case), that keepalive elicits a reply.  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.
    
    Reviewed by Fujii Masao and Michael Paquier.
    
    Discussion: https://postgr.es/m/20200418070142.GA1075445@rfd.leadboat.com
    f246ea3b
walsender.c 103 KB