• Amit Kapila's avatar
    Fix the logical replication timeout during large transactions. · d6da71fa
    Amit Kapila authored
    The problem is that we don't send keep-alive messages for a long time
    while processing large transactions during logical replication where we
    don't send any data of such transactions. This can happen when the table
    modified in the transaction is not published or because all the changes
    got filtered. We do try to send the keep_alive if necessary at the end of
    the transaction (via WalSndWriteData()) but by that time the
    subscriber-side can timeout and exit.
    
    To fix this we try to send the keepalive message if required after
    processing certain threshold of changes.
    
    Reported-by: Fabrice Chapuis
    Author: Wang wei and Amit Kapila
    Reviewed By: Masahiko Sawada, Euler Taveira, Hou Zhijie, Hayato Kuroda
    Backpatch-through: 10
    Discussion: https://postgr.es/m/CAA5-nLARN7-3SLU_QUxfy510pmrYK6JJb=bk3hcgemAM_pAv+w@mail.gmail.com
    d6da71fa
pgoutput.c 37.7 KB