• Alvaro Herrera's avatar
    Fix replay of create database records on standby · ffd28516
    Alvaro Herrera authored
    Crash recovery on standby may encounter missing directories when
    replaying create database WAL records.  Prior to this patch, the standby
    would fail to recover in such a case.  However, the directories could be
    legitimately missing.  Consider a sequence of WAL records as follows:
    
        CREATE DATABASE
        DROP DATABASE
        DROP TABLESPACE
    
    If, after replaying the last WAL record and removing the tablespace
    directory, the standby crashes and has to replay the create database
    record again, the crash recovery must be able to move on.
    
    This patch adds a mechanism similar to invalid-page tracking, to keep a
    tally of missing directories during crash recovery.  If all the missing
    directory references are matched with corresponding drop records at the
    end of crash recovery, the standby can safely continue following the
    primary.
    
    Backpatch to 13, at least for now.  The bug is older, but fixing it in
    older branches requires more careful study of the interactions with
    commit e6d80695, which appeared in 13.
    
    A new TAP test file is added to verify the condition.  However, because
    it depends on commit d6d317dbf615, it can only be added to branch
    master.  I (Álvaro) manually verified that the code behaves as expected
    in branch 14.  It's a bit nervous-making to leave the code uncovered by
    tests in older branches, but leaving the bug unfixed is even worse.
    Also, the main reason this fix took so long is precisely that we
    couldn't agree on a good strategy to approach testing for the bug, so
    perhaps this is the best we can do.
    Diagnosed-by: default avatarPaul Guo <paulguo@gmail.com>
    Author: Paul Guo <paulguo@gmail.com>
    Author: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
    Author: Asim R Praveen <apraveen@pivotal.io>
    Discussion: https://postgr.es/m/CAEET0ZGx9AvioViLf7nbR_8tH9-=27DN5xWJ2P9-ROH16e4JUA@mail.gmail.com
    ffd28516
xlogutils.h 2.26 KB