]> granicus.if.org Git - postgresql/commitdiff
Fix description of WAL record XLOG_BTREE_META_CLEANUP
authorMichael Paquier <michael@paquier.xyz>
Wed, 19 Jun 2019 02:02:19 +0000 (11:02 +0900)
committerMichael Paquier <michael@paquier.xyz>
Wed, 19 Jun 2019 02:02:19 +0000 (11:02 +0900)
This record uses one metadata buffer and registers some data associated
to the buffer, but when parsing the record for its description a direct
access to the record data was done, but there is none.  This leads
usually to an incorrect description, but can also cause crashes like in
pg_waldump.  Instead, fix things so as the parsing uses the data
associated to the metadata block.

This is an oversight from 3d92796, so backpatch down to 11.

Author: Michael Paquier
Description: https://postgr.es/m/20190617013059.GA3153@paquier.xyz
Backpatch-through: 11

src/backend/access/rmgrdesc/nbtdesc.c

index 989c85ac089eac0d40932682043ac05cdb29dfb1..a14eb792ecd17d0b2994bf08238d34464af1bfbd 100644 (file)
@@ -97,8 +97,10 @@ btree_desc(StringInfo buf, XLogReaderState *record)
                        }
                case XLOG_BTREE_META_CLEANUP:
                        {
-                               xl_btree_metadata *xlrec = (xl_btree_metadata *) rec;
+                               xl_btree_metadata *xlrec;
 
+                               xlrec = (xl_btree_metadata *) XLogRecGetBlockData(record, 0,
+                                                                                                                                 NULL);
                                appendStringInfo(buf, "oldest_btpo_xact %u; last_cleanup_num_heap_tuples: %f",
                                                                 xlrec->oldest_btpo_xact,
                                                                 xlrec->last_cleanup_num_heap_tuples);