postgres.git / summary / log / commit / refs

commit    d24dac9549067716f5b4d8e44ccf87dd5274bfcd
Author:   Alvaro Herrera <alvherre@alvh.no-ip.org>
Date:     Fri Nov 26 14:14:27 2021 +0000

    Fix determination of broken LSN in OVERWRITTEN_CONTRECORD
    
    In commit ff9f111bce24 I mixed up inconsistent definitions of the LSN of
    the first record in a page, when the previous record ends exactly at the
    page boundary.  The correct LSN is adjusted to skip the WAL page header;
    I failed to use that when setting XLogReaderState->overwrittenRecPtr,
    so at WAL replay time VerifyOverwriteContrecord would refuse to let
    replay continue past that record.
    
    Backpatch to 10.  9.6 also contains this bug, but it's no longer being
    maintained.
    
    Discussion: https://postgr.es/m/45597.1637694259@sss.pgh.pa.us


src/backend/access/transam/xlogreader.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/access/transam/xlogreader.c b/src/backend/access/transam/xlogreader.c index f01aea6ddad..d797d9d5087 100644 --- a/src/backend/access/transam/xlogreader.c +++ b/src/backend/access/transam/xlogreader.c @@ -464,7 +464,7 @@ restart: */ if (pageHeader->xlp_info & XLP_FIRST_IS_OVERWRITE_CONTRECORD) { - state->overwrittenRecPtr = state->currRecPtr; + state->overwrittenRecPtr = RecPtr; ResetDecoder(state); RecPtr = targetPagePtr; goto restart; [parent: 371087d006e0]