postgres.git / summary / log / commit / refs

commit    b4969a29657dfeb05b61baaa7d7be72b957ac262
Author:   Michael Paquier <michael@paquier.xyz>
Date:     Thu Feb 20 01:43:38 2025 +0000
First released in: 18.0, 15.13, 16.9, 17.5

    Fix FATAL message for invalid recovery timeline at beginning of recovery
    
    If the requested recovery timeline is not reachable, the logged
    checkpoint and timeline should to be the values read from the
    backup_label when it is defined.  The message generated used the values
    from the control file in this case, which is fine when recovering from
    the control file without a backup_label, but not if there is a
    backup_label.
    
    Issue introduced in ee994272ca50.  v15 has introduced xlogrecovery.c and
    more simplifications in this area (4a92a1c3d1c3, a27048cbcb58), making
    this change a bit simpler to think about, so backpatch only down to this
    version.
    
    Author: David Steele <david@pgbackrest.org>
    Reviewed-by: Andrey M. Borodin <x4mmm@yandex-team.ru>
    Reviewed-by: Benoit Lobréau <benoit.lobreau@dalibo.com>
    Discussion: https://postgr.es/m/c3d617d4-1696-4aa7-8a4d-5a7d19cc5618@pgbackrest.org
    Backpatch-through: 15


src/backend/access/transam/xlogrecovery.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/backend/access/transam/xlogrecovery.c b/src/backend/access/transam/xlogrecovery.c index 6d48cb7e843..603779d22b5 100644 --- a/src/backend/access/transam/xlogrecovery.c +++ b/src/backend/access/transam/xlogrecovery.c @@ -831,13 +831,13 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr, * tliSwitchPoint will throw an error if the checkpoint's timeline is * not in expectedTLEs at all. */ - switchpoint = tliSwitchPoint(ControlFile->checkPointCopy.ThisTimeLineID, expectedTLEs, NULL); + switchpoint = tliSwitchPoint(CheckPointTLI, expectedTLEs, NULL); ereport(FATAL, (errmsg("requested timeline %u is not a child of this server's history", recoveryTargetTLI), errdetail("Latest checkpoint is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X.", - LSN_FORMAT_ARGS(ControlFile->checkPoint), - ControlFile->checkPointCopy.ThisTimeLineID, + LSN_FORMAT_ARGS(CheckPointLoc), + CheckPointTLI, LSN_FORMAT_ARGS(switchpoint)))); } [parent: 9fe0cad166df]