• Michael Paquier's avatar
    Fix handling of missing files when using pg_rewind with online source · 1d09fb1f
    Michael Paquier authored
    When working with an online source cluster, pg_rewind gets a list of all
    the files in the source data directory using a WITH RECURSIVE query,
    returning a NULL result for a file's metadata if it gets removed between
    the moment it is listed in a directory and the moment its metadata is
    obtained with pg_stat_file() (say a recycled WAL segment).  The query
    result was processed in such a way that for each tuple we checked only
    that the first file's metadata was NULL.  This could have two
    consequences, both resulting in a failure of the rewind:
    - If the first tuple referred to a removed file, all files from the
    source would be ignored.
    - Any file actually missing would not be considered as such.
    
    While on it, rework slightly the code so as no values are saved if we
    know that a file is going to be skipped.
    
    Issue introduced by b36805f3, so backpatch down to 9.5.
    
    Author: Justin Pryzby, Michael Paquier
    Reviewed-by: Daniel Gustafsson, Masahiko Sawada
    Discussion: https://postgr.es/m/20200713061010.GC23581@telsasoft.com
    Backpatch-through: 9.5
    1d09fb1f
libpq_fetch.c 13.9 KB