• Fujii Masao's avatar
    Avoid assertion failure with targeted recovery in standby mode. · ef34ab42
    Fujii Masao authored
    At the end of recovery, standby mode is turned off to re-fetch the last
    valid record from archive or pg_wal. Previously, if recovery target was
    reached and standby mode was turned off while the current WAL source
    was stream, recovery could try to retrieve WAL file containing the last
    valid record unexpectedly from stream even though not in standby mode.
    This caused an assertion failure. That is, the assertion test confirms that
    WAL file should not be retrieved from stream if standby mode is not true.
    
    This commit moves back the current WAL source to archive if it's stream
    even though not in standby mode, to avoid that assertion failure.
    
    This issue doesn't cause the server to crash when built with assertion
    disabled. In this case, the attempt to retrieve WAL file from stream not
    in standby mode just fails. And then recovery tries to retrieve WAL file
    from archive or pg_wal.
    
    Back-patch to all supported branches.
    
    Author: Kyotaro Horiguchi
    Reviewed-by: Fujii Masao
    Discussion: https://postgr.es/m/20200227.124830.2197604521555566121.horikyota.ntt@gmail.com
    ef34ab42
xlog.c 386 KB