• Michael Paquier's avatar
    Fix handling of WAL segments ready to be archived during crash recovery · 4e87c483
    Michael Paquier authored
    78ea8b5d has fixed an issue related to the recycling of WAL segments on
    standbys depending on archive_mode.  However, it has introduced a
    regression with the handling of WAL segments ready to be archived during
    crash recovery, causing those files to be recycled without getting
    archived.
    
    This commit fixes the regression by tracking in shared memory if a live
    cluster is either in crash recovery or archive recovery as the handling
    of WAL segments ready to be archived is different in both cases (those
    WAL segments should not be removed during crash recovery), and by using
    this new shared memory state to decide if a segment can be recycled or
    not.  Previously, it was not possible to know if a cluster was in crash
    recovery or archive recovery as the shared state was able to track only
    if recovery was happening or not, leading to the problem.
    
    A set of TAP tests is added to close the gap here, making sure that WAL
    segments ready to be archived are correctly handled when a cluster is in
    archive or crash recovery with archive_mode set to "on" or "always", for
    both standby and primary.
    
    Reported-by: Benoît Lobréau
    Author: Jehan-Guillaume de Rorthais
    Reviewed-by: Kyotaro Horiguchi, Fujii Masao, Michael Paquier
    Discussion: https://postgr.es/m/20200331172229.40ee00dc@firost
    Backpatch-through: 9.5
    4e87c483
xlog.h 13.6 KB