Fix wal_consistency_checking nbtree bug.
authorPeter Geoghegan <pg@bowt.ie>
Thu, 5 Nov 2020 23:01:40 +0000 (15:01 -0800)
committerPeter Geoghegan <pg@bowt.ie>
Thu, 5 Nov 2020 23:01:40 +0000 (15:01 -0800)
wal_consistency_checking indicated an inconsistency in certain cases
involving nbtree page deletion.  The underlying issue is that there was
a minor difference between the page image produced after a REDO routine
ran and the corresponding page image following original execution.

This harmless inconsistency has been around forever.  We more or less
expect total consistency among even deleted nbtree pages these days,
though, so this won't do anymore.

To fix, tweak the REDO routine to match original execution.

Oversight in commit f47b5e13.

src/backend/access/nbtree/nbtxlog.c

index bda9be234896189cb003fb001b414e6d43ef328b..e9132267604f431286a2eb2b1b8a9cced5afa438 100644 (file)
@@ -824,6 +824,8 @@ btree_xlog_unlink_page(uint8 info, XLogReaderState *record)
    pageop->btpo_next = rightsib;
    pageop->btpo.xact = xlrec->btpo_xact;
    pageop->btpo_flags = BTP_DELETED;
+   if (!BlockNumberIsValid(xlrec->topparent))
+       pageop->btpo_flags |= BTP_LEAF;
    pageop->btpo_cycleid = 0;
 
    PageSetLSN(page, lsn);