• Robert Haas's avatar
    Fix corner case failure of new standby to follow new primary. · caba8f0d
    Robert Haas authored
    This only happens if (1) the new standby has no WAL available locally,
    (2) the new standby is starting from the old timeline, (3) the promotion
    happened in the WAL segment from which the new standby is starting,
    (4) the timeline history file for the new timeline is available from
    the archive but the WAL files for are not (i.e. this is a race),
    (5) the WAL files for the new timeline are available via streaming,
    and (6) recovery_target_timeline='latest'.
    
    Commit ee994272 introduced this
    logic and was an improvement over the previous code, but it mishandled
    this case. If recovery_target_timeline='latest' and restore_command is
    set, validateRecoveryParameters() can change recoveryTargetTLI to be
    different from receiveTLI. If streaming is then tried afterward,
    expectedTLEs gets initialized with the history of the wrong timeline.
    It's supposed to be a list of entries explaining how to get to the
    target timeline, but in this case it ends up with a list of entries
    explaining how to get to the new standby's original timeline, which
    isn't right.
    
    Dilip Kumar and Robert Haas, reviewed by Kyotaro Horiguchi.
    
    Discussion: http://postgr.es/m/CAFiTN-sE-jr=LB8jQuxeqikd-Ux+jHiXyh4YDiZMPedgQKup0g@mail.gmail.com
    caba8f0d
cp_history_files 238 Bytes