Fix initialization of fake LSN for unlogged relations
authorMichael Paquier
Sun, 27 Oct 2019 04:54:20 +0000 (13:54 +0900)
committerMichael Paquier
Sun, 27 Oct 2019 04:54:20 +0000 (13:54 +0900)
9155580 has changed the value of the first fake LSN for unlogged
relations from 1 to FirstNormalUnloggedLSN (aka 1000), GiST requiring a
non-zero LSN on some pages to allow an interlocking logic to work, but
its value was still initialized to 1 at the beginning of recovery or
after running pg_resetwal.  This fixes the initialization for both code
paths.

Author: Takayuki Tsunakawa
Reviewed-by: Dilip Kumar, Kyotaro Horiguchi, Michael Paquier
Discussion: https://postgr.es/m/OSBPR01MB2503CE851940C17DE44AE3D9FE6F0@OSBPR01MB2503.jpnprd01.prod.outlook.com
Backpatch-through: 12

src/backend/access/transam/xlog.c
src/bin/pg_resetwal/pg_resetwal.c

index e01a0780b849ea8c26f7cc27d88c7d660a9941ea..1a8704222350f0509916afa343154edb9132abc7 100644 (file)
@@ -6683,7 +6683,7 @@ StartupXLOG(void)
    if (ControlFile->state == DB_SHUTDOWNED)
        XLogCtl->unloggedLSN = ControlFile->unloggedLSN;
    else
-       XLogCtl->unloggedLSN = 1;
+       XLogCtl->unloggedLSN = FirstNormalUnloggedLSN;
 
    /*
     * We must replay WAL entries using the same TimeLineID they were created
index 2734f873187ac4589788d508ae03e166629ef2fb..349347593cf0cfc485106d07c28eeddc0127dae4 100644 (file)
@@ -706,7 +706,7 @@ GuessControlValues(void)
    ControlFile.state = DB_SHUTDOWNED;
    ControlFile.time = (pg_time_t) time(NULL);
    ControlFile.checkPoint = ControlFile.checkPointCopy.redo;
-   ControlFile.unloggedLSN = 1;
+   ControlFile.unloggedLSN = FirstNormalUnloggedLSN;
 
    /* minRecoveryPoint, backupStartPoint and backupEndPoint can be left zero */