• Fujii Masao's avatar
    Fix handling of files that source server removes during pg_rewind is running. · 09e96b3f
    Fujii Masao authored
    After processing the filemap to build the list of chunks that will be
    fetched from the source to rewing the target server, it is possible that
    a file which was previously processed is removed from the source.  A
    simple example of such an occurence is a WAL segment which gets recycled
    on the target in-between.  When the filemap is processed, files not
    categorized as relation files are first truncated to prepare for its
    full copy of which is going to be taken from the source, divided into a
    set of junks.  However, for a recycled WAL segment, this would result in
    a segment which has a zero-byte size.  With such an empty file,
    post-rewind recovery thinks that records are saved but they are actually
    not because of the truncation which happened when processing the
    filemap, resulting in data loss.
    
    In order to fix the problem, make sure that files which are found as
    removed on the source when receiving chunks of them are as well deleted
    on the target server for consistency.
    
    Back-patch to 9.5 where pg_rewind was added.
    
    Author: Tsunakawa Takayuki
    Reviewed-by: Michael Paquier
    Reported-by: Tsunakawa Takayuki
    
    Discussion: https://postgr.es/m/0A3221C70F24FB45833433255569204D1F8DAAA2%40G01JPEXMBYT05
    09e96b3f
file_ops.h 850 Bytes